我有一個函數,我已經寫了,最初應該採取一個字符串字段和填充Excel值的電子表格。這些價值觀一直是空的。我開始將它追溯到記錄集,發現儘管查詢是有效的並且通過Access查詢分析器正確運行,但記錄集爲空或缺少字段。訪問2007 VBA查詢顯示查詢分析器中的數據,但不是在VBA編碼記錄集
爲了測試這個問題,我創建了一個子程序,在其中創建了一個查詢,打開了一個記錄集,然後通過值(將它們輸出到一個消息箱)進行分頁。問題中最令人困惑的部分似乎圍繞着查詢的「WHERE」子句。如果我沒有在查詢中放置「WHERE」子句,記錄集總是有數據,「DESCRIPTION」的值是正常的。
如果我把什麼在WHERE子句記錄回來要麼完全空(rs.EOF = true
)或說明字段是完全空白的地方等領域都有值。我想再次強調,如果我debug.print查詢,我可以複製/粘貼到查詢分析器,並獲得我期望的有效和返回的值。
我一定會很感激這方面的幫助。謝謝!
Private Sub NewTest()
' Dimension Variables
'----------------------------------------------------------
Dim rsNewTest As ADODB.Recordset
Dim sqlNewTest As String
Dim Counter As Integer
' Set variables
'----------------------------------------------------------
Set rsNewTest = New ADODB.Recordset
sqlNewTest = "SELECT dbo_partmtl.partnum as [Job/Sub], dbo_partmtl.revisionnum as Rev, " & _
"dbo_part.partdescription as Description, dbo_partmtl.qtyper as [Qty Per] " & _
"FROM dbo_partmtl " & _
"LEFT JOIN dbo_part ON dbo_partmtl.partnum = dbo_part.partnum " & _
"WHERE dbo_partmtl.mtlpartnum=" & Chr(34) & "3C16470" & Chr(34)
' Open recordset
rsNewTest.Open sqlNewTest, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Do Until rsNewTest.EOF
For Counter = 0 To rsNewTest.Fields.Count - 1
MsgBox rsNewTest.Fields(Counter).Name
Next
MsgBox rsNewTest.Fields("Description")
rsNewTest.MoveNext
Loop
' close the recordset
rsNewTest.Close
Set rsNewTest = Nothing
End Sub
編輯:有人要求我發佈查詢的DEBUG.PRINT。那就是:
SELECT dbo_partmtl.partnum as [Job/Sub], dbo_partmtl.revisionnum as Rev, dbo_part.partdescription as [Description], dbo_partmtl.qtyper as [Qty Per] FROM dbo_partmtl LEFT JOIN dbo_part ON dbo_partmtl.partnum = dbo_part.partnum WHERE dbo_partmtl.mtlpartnum='3C16470'
我曾嘗試使用ASCII字符和隱式雙和單引號。
例如:
"WHERE dbo_partmtl.mtlpartnum='3C16470'"
我甚至試圖與CHR(39)你的建議:
"WHERE dbo_partmtl.mtlpartnum=" & Chr(39) & "3C16470" & Chr(39)
無論對於描述返回空值。但是,如果我debug.print查詢並將其粘貼到Access查詢分析器,它顯示得很好。再次(作爲一個附註),如果我在WHERE子句中使用LIKE語句,它會給我一個完全空的記錄集。這裏真的很奇怪。
這是一個有趣的消息。表格鏈接到SQL Server
。如果我在本地複製表(數據和結構),上面的ADO代碼完美無缺地工作。如果我使用DAO,它工作正常。我已經在Windows XP
,Access 2003
和ADO (2.5, 2.6, 2.8)
的各種版本上試過這個代碼。如果表格已鏈接,則ADO
將不起作用。
ADO中存在導致此問題的一些缺陷。
絕對是我做的。請記住,您看到的DEBUG.PRINT
查詢在查詢分析器中完美運行。它返回如下:
Job/Sub Rev Description Qty Per 36511C01 A MAIN ELECTRICAL ENCLOSURE 1 36515C0V A VISION SYSTEM 1 36529C01 A MAIN ELECTRICAL ENCLOSURE 1
然而,同樣的查詢時,通過記錄運行(因爲「空」值MessageBox的錯誤)的說明返回空值(一切是一樣的)。
我試着將「description」字段重命名爲「testdep」,但它仍然是空的。使其顯示數據的唯一方法是刪除查詢的WHERE部分。我開始相信這是ADO的問題。也許我會用DAO重寫它,看看我得到了什麼結果。
編輯:我也嘗試壓縮和修復幾次。沒有骰子。
說明字段始終爲空,但其他字段可以有數據(取決於where子句)如果我使用」LIKE「 where子句,它返回一個完全空的記錄集。一如往常,查詢分析器返回正確的數據。 難道這是我使用ADO的問題嗎? – 2008-10-31 15:33:22