为什么SQL中的括号字段名称在Access VBA ADO中不起作用?

时间:2010-12-22 20:46:08

标签: sql ms-access vba access-vba

在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;

我一直没想通过谷歌搜索为什么这会发生在我自己身上,谁能告诉我为什么?

感谢。

1 个答案:

答案 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。