Вы ошибочно пропустили ключевое слово FROM
в своем запросе.
Поскольку вы запрашиваете книгу Excel, лучше всего убедиться, что она закрыта;если вы используете OLE DB, вы должны знать о страшной ошибке утечки памяти .Также следует помнить, как Excel определяет типы данных, что может стать немного странным, если NULL
неожиданно появляется;подробности на Блог Дика .
Вы не указали рабочий лист, поэтому я предположил, что он называется Sheet1
.
Большая часть вашей строки подключения выполненадо значений по умолчанию и могут быть удалены.
Поскольку это сайт программирования, и вы спрашиваете об Excel, как насчет VBA:
Sub ExcelExample()
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Mode=Share Deny Write;Extended Properties=""HDR=YES;"";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" & _
"Jet OLEDB:Global Partial Bulk Ops=2;" & _
"Jet OLEDB:Global Bulk Transactions=1;" & _
"Jet OLEDB:New Database Password="""";" & _
"Jet OLEDB:Create System Database=False;" & _
"Jet OLEDB:Encrypt Database=False;" & _
"Jet OLEDB:Don't Copy Locale on Compact=False;" & _
"Jet OLEDB:Compact Without Replica Repair=False;" & _
"Jet OLEDB:SFP=False"""
Const SQL_TEXT As String = _
"SELECT * FROM ['Master List$'] WHERE [Name] Like ?;"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = CONN_STRING
.CommandText = SQL_TEXT
Dim param
Set param = CreateObject("ADODB.Parameter")
With param
.Direction = 1 ' adParamInput
.Type = 202 ' adVarWChar
.Size = 255
.Attributes = 64 ' adParamNullable
.Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value & "%"
End With
.Parameters.Append param
End With
Dim rs
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .Source = cmd
.Open
' Do stuff with recordset...
End With
End Sub
ОБНОВЛЕНИЕ
Какие части строки подключения бесполезны?Большинство из этого!Например, пользователь по умолчанию - Admin, но файл рабочей группы Jet - пустая строка, поскольку Excel не использует безопасность Jet.Я думаю строка подключения может быть уменьшена следующим образом без изменения поведения:
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Extended Properties=""HDR=YES;"";"