【发布时间】:2017-11-13 20:59:34
【问题描述】:
我正在使用 Excel VBA,其中我位于不同工作表的不同位置,我需要在这些工作表上运行一些 SQL 查询。
首先,我拼凑了一些“简单”的功能来尝试概念验证,看看我是否可以让它工作。到目前为止,我有这个:
Private rstADO As ADODB.Recordset
Private Function StartEre()
Call SetupRecordset
Call Add("123", "ab", "ba")
Call Add("321", "ba", "ab")
Dim rs As ADODB.Recordset
Set rs = search("123", rstADO)
End Function
Private Function search(emp As String, oRecordset As ADODB.Recordset) As ADODB.Recordset
Dim strSQL As String
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes"";"
strSQL = "SELECT EmployeeID FROM oRecordset"
Set rs = cn.Execute(strSQL)
Set search = rs
End Function
Private Function Add(emp As String, first As String, last As String)
Dim fieldsArray(2) As Variant
Dim values(2) As Variant
fieldsArray(0) = "EmployeeID"
fieldsArray(1) = "FirstName"
fieldsArray(2) = "LastName"
values(0) = emp
values(1) = first
values(2) = last
Call rstADO.AddNew(fieldsArray, values)
End Function
Private Function SetupRecordset()
Dim fld As ADODB.Field
Set rstADO = New ADODB.Recordset
With rstADO
.Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
.Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
.Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
End Function
我的问题出在search 函数中,我有我的 SQL 字符串:
strSQL = "SELECT EmployeeID FROM oRecordset"
如何让FROM 子句指向提供给该函数的记录集?
这只是一个简单的函数,但最终会出现(如果我能让它工作的话)许多函数,它们具有执行不同操作的不同 SQL 查询。
编辑: 已被识别为来自 Performing SQL queries on an Excel Table within a Workbook with VBA Macro 的可能重复项,我想澄清一下。
提到的帖子查询工作表中的范围,而我想查询预填充的记录集。我的search 函数有一个参数 - oRecordset,其中包含我想使用 SQL 查询的所有数据。我不想像前面提到的链接那样直接查询工作表。
【问题讨论】:
-
Performing SQL queries on an Excel Table within a Workbook with VBA Macro 的可能重复项特别注意
strSQL中使用的符号。要引用任何特定工作表上的特定工作表或表格,您需要使用其名称引用工作表,后跟$,然后(理想情况下但非强制性)该工作表上的表格范围FROM [Sheet1$A1:G3]。更多选项:blog.learningtree.com/… -
这个问题不是你很多链接到的问题的重复。完全不同。