在MS Access QBE中,如果我粘贴以下SQL,它可以正常工作,我会收到2条记录 -
SELECT [tmp_binning].[bn_faibash] FROM [tmp_binning] WHERE key2='0210043-HOU-STOR' ORDER BY [tmp_binning].[bn_faibash];
但是如果我以编程方式从ADO对象在VBA中运行相同的查询,我得到(错误地)没有记录。如果我更改SQL以删除字段名称周围的括号,它会正确返回VBA ADO中的2条记录。
SELECT [tmp_binning].bn_faibash FROM [tmp_binning] WHERE key2='0210043-HOU-STOR' ORDER BY [tmp_binning].bn_faibash;
我一直没想通过谷歌搜索为什么这会发生在我自己身上,谁能告诉我为什么?
感谢。
答案 0 :(得分:1)
首先,在Access UI中或通过ADO不需要括号。只需在所有环境中省略它们,问题就会消失。 (如果是添加括号的Access QBE,那么请考虑另一个工具或手工制作SQL代码!)
其次,即使使用括号,我也无法使用您的SQL代码重现错误,例如
Sub gjskdjs()
On Error Resume Next
Kill Environ$("temp") & "\DropMe.mdb"
On Error GoTo 0
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim Sql As String
Sql = _
"CREATE TABLE tmp_binning" & vbCr & "(" & vbCr & " bn_faibash VARCHAR(255)," & _
" " & vbCr & " key2 VARCHAR(255)" & vbCr & ");"
.Execute Sql
Sql = _
"INSERT INTO tmp_binning (bn_faibash, key2)" & _
" VALUES ('002', '0210043-HOU-STOR');"
.Execute Sql
Sql = _
"INSERT INTO tmp_binning (bn_faibash, key2)" & _
" VALUES ('001', '0210043-HOU-STOR');"
.Execute Sql
Sql = _
"SELECT [tmp_binning].bn_faibash " & vbCr & " FROM" & _
" [tmp_binning] " & vbCr & " WHERE key2 = '0210043-HOU-STOR'" & _
" " & vbCr & " ORDER " & vbCr & " BY [tmp_binning].bn_faibash;"
Dim rs
Set rs = .Execute(Sql)
MsgBox rs.GetString
End With
Set .ActiveConnection = Nothing
End With
End Sub
考虑将您的架构发布为带有示例数据的SQL DDL。