我是一位自学的Excel VBA和SQL用户。在添加复杂性之前,我正在测试一些简单的查询。我必须在这里忽略一些非常明显的...EXCEL SQL SELECT将无法识别ThisWorkBook中的字段名称
我正在使用ADO连接在ActiveWorkbook(ThisWorkBook)中的表上运行SQL SELECT语句。 Excel表名为“tbl_QDB”,位于工作表“MyQDB”上。该表从单元格A1开始,因此表HeaderRowRange上方没有空白或已填充的单元格。
我已经建立了一个ADO连接到ThisWorkBook,这工作正常。下面的代码:
Sub ConnectionOpen2()
'### UNDER DEVELOPMENT
Dim sconnect As String
Const adUseClient = 3
Const adUseServer = 2
Const adLockOptimistic = 3
Const adOpenKeyset = 1
Const adOpenDynamic = 2
'used to connect to this workbook for SQL runs
On Error GoTo err_OpenConnection2
Set cn2 = CreateObject("ADODB.Connection")
Set rec2 = CreateObject("ADODB.Recordset")
rec2.CursorLocation = adUseClient
rec2.CursorType = adOpenStatic
rec2.LockType = adLockOptimistic
datasource = ThisWorkbook.FullName
sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & datasource & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES;ReadOnly=False;Imex=0"";"
cn2.Open sconnect
'etc, etc...
End Sub
我可以运行这个简单的基本的SELECT查询:
SQLSTR="SELECT * FROM [MYQDB$]"
rec2.open SQLSTR, cn2
这工作,并产生10条即rec2.recordcount = 10。
不过,如果我试试这个,它的错误:
SQLSTR="SELECT QID_1 FROM [MYQDB$]"
QID_1是在工作表 “MyQDB” 有效的字段。 如果我将QID_1放在()或[]或者`` 中,我甚至可以用构成字段来替换字段名称,例如,唐纳德杜克和我得到了同样的错误。
为什么SELECT语句在我使用“*”的情况下工作,但如果我使用表中的任何字段名称,则不会有效?这似乎非常基本,我觉得我一定错过了一个简单而重要的点。
如果有人能指出错误,我真的很感激!
你为什么要从* Excel *里面查询Excel表?只需加载工作表并读取单元格 –
'QID_1'不是字段名称。 Excel没有字段,它有* cells *。单元地址是例如'$ A $ 1'。错误本身意味着查询包含参数说明符,但没有传递参数值。很可能Excel会混淆意外的参数“QID_1”值 –
为什么你称'QID_1'为一个字段? Excel具有行和列,而不是字段。您可以*命名特定范围,并将它们视为SQL查询中的表格。命名单元格仍然是一个范围,只有1行和1列。表格仍然是命名的范围。您的*查询*虽然是针对整个工作表,而不是特定的表。 –