我是一位自學的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列。表格仍然是命名的範圍。您的*查詢*雖然是針對整個工作表,而不是特定的表。 –