gpt4 book ai didi

excel - VBA - 从电子表格的内容创建 ADODB.Recordset

转载 作者:行者123 更新时间:2023-12-02 07:26:53 26 4
gpt4 key购买 nike

我正在开发一个查询 SQL 数据库的 Excel 应用程序。查询可能需要很长时间才能运行(20-40 分钟)。如果我错误编码了某些内容,可能需要很长时间才能出错或达到断点。我可以将结果保存到一张纸上,但当我处理记录集时,事情可能会崩溃。

当我调试以跳过查询数据库(第一次之后)时,有没有办法将数据加载到 ADODB.Recordset 中?

我会使用这样的东西吗?

Query Excel worksheet in MS-Access VBA (using ADODB recordset)

最佳答案

我必须安装 MDAC 才能获取 msado15.dll,一旦获得它,我就添加了对它的引用(在 Win7 64 位上):

C:\Program Files (x86)\Common Files\System\ado\msado15.dll

然后,我创建了一个函数,通过传入当前事件工作簿中存在的工作表名称来返回 ADODB.Recordset 对象。如果其他人需要的话,这里是代码,包括 Test() Sub 来查看它是否有效:

Public Function RecordSetFromSheet(sheetName As String)

Dim rst As New ADODB.Recordset
Dim cnx As New ADODB.Connection
Dim cmd As New ADODB.Command

'setup the connection
'[HDR=Yes] means the Field names are in the first row
With cnx
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source='" & ThisWorkbook.FullName & "'; " & "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
.Open
End With

'setup the command
Set cmd.ActiveConnection = cnx
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM [" & sheetName & "$]"
rst.CursorLocation = adUseClient
rst.CursorType = adOpenDynamic
rst.LockType = adLockOptimistic

'open the connection
rst.Open cmd

'disconnect the recordset
Set rst.ActiveConnection = Nothing

'cleanup
If CBool(cmd.State And adStateOpen) = True Then
Set cmd = Nothing
End If

If CBool(cnx.State And adStateOpen) = True Then cnx.Close
Set cnx = Nothing

'"return" the recordset object
Set RecordSetFromSheet = rst

End Function

Public Sub Test()

Dim rstData As ADODB.Recordset
Set rstData = RecordSetFromSheet("Sheet1")

Sheets("Sheet2").Range("A1").CopyFromRecordset rstData

End Sub

Sheet1 数据:字段 1 字段 2 字段 3红A 1蓝色B 2绿色C 3

应复制到 Sheet2 的内容:红A 1蓝色B 2绿色C 3

每次我想要进行更改并测试它时,这都为我节省了大量的 SQL 查询时间...

--罗伯特

关于excel - VBA - 从电子表格的内容创建 ADODB.Recordset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2484516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com