Ошибка автоматизации при попытке запросить базу данных Access с помощью VBA

#sql #excel #vba #ms-access #adodb

#sql #excel #vba #ms-access #adodb

Вопрос:

Я сделал следующие объявления объекта ADODB в коде.

 Dim OConn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Set OConn = New ADODB.Connection
Set rs = New ADODB.Recordset
  

Я хотел бы использовать следующий код для чтения из таблицы в файле базы данных MS Access и создания набора записей rs.

 'Get the table name from the search results.
tableName = ThisWorkbook.Sheets("PLC Module Data").Cells(2, 9).Value

'Set the SQL string.
strSql = "SELECT Code, Points, Type, Description, Rating " amp; _
"FROM " amp; tableName

'Set the connection string and open the connection to the Access DB.
OConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" amp; _
"Data Source=Q:AutoCAD ImprovementsPLC IO Utility DocsPLC IO Spreadsheet     
AppPLC IO Appace_plc.mdb"

OConn.Open

'Open the recordset and error out if nothing is returned
Set rs = OConn.Execute(strSql)
If rs.EOF Then
    MsgBox "No matching records found."
    rs.Close
    OConn.Close
    Exit Sub
End If
  

Я проверил инструкцию запроса в самом файле Access, и она работает нормально. Я всегда получаю ошибку

Ошибка времени выполнения’-2147217900 (80040e14)’: Ошибка автоматизации

в строке,

 Set rs = OConn.Execute(strSql)
  

Если бы кто-нибудь мог взглянуть на мой код и определить, почему это происходит, это было бы очень ценно. Я просмотрел похожие примеры онлайн, и кажется, что это должно быть правильно.

Комментарии:

1. Вы проверили, что tableName = ThisWorkbook.Sheets("PLC Module Data").Cells(2, 9).Value это правильное имя таблицы? Что это возвращает?

2. Что решает SQL? Кроме того, вы пробовали, rs.open strSQL,oconn.connection

3. На всякий случай я бы поместил имена полей в []: "SELECT [Code], [Points], [Type], [Description], [Rating] "

4. Попробуйте это для вашей строки SQL: strSql = "SELECT a.Code, a.Points, a.Type, a.Description, a.Rating FROM [" amp; tableName amp; "] AS a" Затем добавьте Debug.Print strSql в следующей строке. Если вы все еще получаете ошибку, используя эту версию, пожалуйста, покажите нам, что Debug.Print вам показывает.

5. проверьте, действительно ли oConn открыт, используя, если Oconn.state <> adstateopen, то msgbox «Не открыт»

Ответ №1:

Я добавил скобки вокруг строки tableName, и теперь это работает. Спасибо за все отзывы.

 'Set the SQL string.
strSql = "SELECT Code, Points, Type, Description, Rating " amp; _
"FROM [" amp; tableName amp; "]"