Почему скобки в SQL вокруг имени поля не работают в Access VBA ADO? - PullRequest
4 голосов
/ 22 декабря 2010

В MS Access QBE, если я вставляю следующий SQL, он работает правильно, и я получаю 2 записи обратно -

SELECT [tmp_binning].[bn_faibash] FROM [tmp_binning] WHERE key2='0210043-HOU-STOR' ORDER BY [tmp_binning].[bn_faibash];

Но если я программно запускаю тот же запрос в VBA из объекта ADO, который я получаю (неправильно) нет записей.Если я изменяю SQL для удаления скобок вокруг имени поля, он правильно возвращает 2 записи в VBA ADO.

SELECT [tmp_binning].bn_faibash FROM [tmp_binning] WHERE key2='0210043-HOU-STOR' ORDER BY [tmp_binning].bn_faibash;

Я безуспешно пытаюсь найти, почему это происходит самостоятельно, может кто-нибудь сказать мне, почему?

Спасибо.

1 Ответ

1 голос
/ 23 декабря 2010

Во-первых, скобки не требуются ни в пользовательском интерфейсе Access, ни через 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 с примерами данных.

...