2017-01-05 15 views
-1
Sub Access() 

Dim filepath As String 

Dim oConn As ADODB.Connection 

Dim RS As ADODB.Recordset 

Dim ssql As String 

Dim strMyPath As String, strDBName As String, strDB As String 

'Getting workbook path 

Path = Application.ActiveWorkbook.Path 

'Finding complete address of the database 

filepath = Path & "\TBS.accdb" 

sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 

          "Data Source=" & filepath & ";" & _ 

          "Jet OLEDB:Engine Type=5;" & _ 

          "Persist Security Info=False;" 

'Open a connection. 

Set oConn = New ADODB.Connection 

oConn.Open sConn 

ssql = Range("query ") & Sheets("backened").Range("F3") 

'query is a named range containing sql query 

MsgBox (Sheets("backened").Range("F3")) 

Set RS = New ADODB.Recordset 

      Set RS.ActiveConnection = oConn 

      RS.Open ssql, oConn, adOpenStatic, adLockReadOnly, adCmdText 

With RS 

       Sheets("sheet3").Select 

       Sheets("Sheet3").Range("F10").CopyFromRecordset RS 

       .Close 

End With 

End Sub 

В приведенном выше коде FilePath вместе с именем базы данных хранится в «FilePath»Я пытаюсь получить данные из Databse доступа через VBA через SQL-запрос

Всякий раз, когда запрос «select * from» это работает нормально, но когда я выбираю определенные столбцы или выполнить какую-либо группу при работе он выдает ошибку - время выполнения ошибки «-2147467259 (8000405)» метода «открытый» объект «_recordset» не удалось

+0

Помимо некоторых косметологических проблем, нет ничего плохого в вашем vba-коде ... предоставлен 'ssql = Range (" query ") & Sheets (" backened "). Range (" F3 ")' фактически возвращает то, что вы хотите , Скорее всего, в вашем объединенном 'ssql' отсутствует' Blank'/'vbCrLf'. 'Debug.Print ssql' и опубликовать полученную SQL-строку. –

+0

@martin dreher Я получаю следующий результат. Выберите зону из Cardiology_Pradaxa, а затем при повторении той же ошибки отладки, упомянутой выше. –

ответ

0

Вашего имя_поль zone является зарезервированное слово в sql-92 standard. Для вашего SQL вместо этого используйте [zone]. См. microsoft error description.

В общем, рекомендуется использовать полевые имена внутри квадратных скобок [ ] в вашем SQL-запросе. Это позволяет использовать зарезервированные слова, даты и строки, включая пробелы, как имена полей.

+0

Спасибо, сработало. –

+0

рад, что это сработало для вас. обязательно отметьте сообщение, как ответили на сообщение, закрыто –