簡體   English   中英

無法在Access 2010中查詢nVarChar(Max)字段

[英]Unable to query nVarChar(Max) field in Access 2010

已經有數百次使用Stack Overflow作為資源,但是我第一次發布問題尋求幫助!

我在SQL Server 2005中有一個表,其中包含4個nVarChar(Max)字段。 我正在嘗試使用ADO 2.8從Access(2010)VBA模塊中提取數據我正在使用SQL驅動程序SQLNCLI10進行連接

(我不能使用鏈接表,因為我最終要查詢的“表”是一個表值函數)

然后,當我打印/使用記錄集時,數據變得混亂,並與同一條記錄中的其他字段連接在一起-並拋出了一堆晦澀的字符。

VBA :(嘗試了其他各種方法,但結果相同)

Sub TestWithoutCasting()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Integer

cn.Open "Data Source=ART;DataTypeCompatibility=80;MARS Connection=True;"

Set rs = cn.Execute("SELECT * FROM JobDetail WHERE JobID = 2558 ORDER BY SeqNo ASC")

Do While Not rs.EOF

    For i = 1 To rs.Fields.Count
        Debug.Print rs.Fields(i).Name & ": " & rs.Fields(i).Value
    Next i

    rs.MoveNext
Loop

End Sub

示例輸出:

SeqNo: 1
CommandID: 2
Parameter1:     2 Daily Report    é [& some other chars not showing on here]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False

預期產量:

SeqNo: 1
CommandID: 2
Parameter1: SELECT  Day_Number  ,Day_Text  ,Channel_Group_ID [...etc]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False

因此,它是從其他字段中獲取數據的一部分,而不是正確的數據(在這種情況下,這是一條SQL語句)

然后,我嘗試在源代碼中將nvarchar(max)字段轉換為文本

查看已創建:

    CREATE VIEW TestWithCast 
    AS
    SELECT jd.JobID, jd.SeqNo, jd.CommandID
    ,cast(jd.Parameter1 as text) as Parameter1
    ,cast(jd.Parameter2 as text) as Parameter2
    ,cast(jd.Parameter3 as text) as Parameter3
    ,cast(jd.Parameter4 as text) as Parameter4
    ,jd.[Description]
    ,jd.Active

    FROM JobDetail jd

現在,我最初在這里很幸運-使用與上面相同的代碼可以帶回數據-但是當我在主代碼中使用此代碼時(它會跳入和跳出其他過程); 一旦查詢了記錄集的第一個結果,它似乎就會擦除其余的記錄/字段,並將它們設置為Null。 我還嘗試在其余vba運行之前將每個字段的值設置為變量,然后再獲取下一條記錄-但這也無濟於事。

幾乎感覺就像我需要將記錄集轉儲到本地Access表中,然后從那里進行查詢-這是已經存在的解決方法(通過轉換為文本)的市場解決方法。

我這里有些東西我完全不見了,還是我確實需要轉換為文本並加載到本地表中?

感謝您的幫助-真讓我發瘋!

PS。 希望我提供了正確的詳細信息/級別-如果我錯過任何關鍵信息,請告訴我。

編輯:

Yikes,我想我已經完成/找到了問題...我將驅動程序更改為SQLSRV32(v6.01)-似乎可以直接在文本轉換字段上正常工作。 所以...為什么它可以與較舊的驅動程序一起使用,而不能與較新的“推薦”(由我閱讀的各種資料)一起使用。 並且...在本機客戶端上使用它會不會有明顯的缺點?

編輯2:

好的,我已經在幾台機器上嘗試了一些驅動程序,每種情況下都使用了TEXT CASTING和Direct to to VARCHAR MAX。

[在裝有SQLSMS 2008的Windows 7計算機上]

SQL Native Client 10.0-兩種方法均不能與此驅動程序可靠地運行SQL Server 6.01-兩種方法均能可靠地工作-盡管需要進一步測試

[在帶有SQLS 2005的生產服務器上]

SQL Native Client(v2005.90)-完全不能與varchar(max)一起使用,但可以與文本轉換SQL Server(v2008.86)一起使用-兩種方法似乎都能可靠地工作-盡管需要進一步測試

這應該使部署變得有趣!

這不是一個真正的答案,因為我沒有測試它,但是...您在連接中使用了“ DataTypeCompatibility = 80”參數。 據我所知,DataTypeCompatibility = 80指的是SQL Server 2000,其中nvarchar(max)字段類型仍未實現。

我有同樣的問題,通過將字段轉換為nvarchar(1000)來解決。 如果1000個字符足夠,將是一個簡單,兼容的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM