gpt4 book ai didi

MySQL Recordset 在应该返回值时不返回值

转载 作者:行者123 更新时间:2023-11-29 05:29:09 26 4
gpt4 key购买 nike

我正在尝试使用 ADODB 通过 VBA(在 Excel 中)从 MySQL 检索记录集。我可以通过网络成功连接到 MySQL 数据库,甚至可以使用 ADOX 返回表的列表,但是当我尝试返回记录集时,记录数为 -1 且为空。

当我在 MySQL Workbench 中输入相同的 SQL 语句时,结果按预期返回。

我已经使用 ADO 成功连接到 Access 数据库,现在想将该数据库移动到 MySQL,但遇到了这个问题。

注意事项:

  • 我在 Windows 7 64 位上使用 Office 2007 32 位。 MySQL 服务器 (5.6) 在 Windows 8 64 位上。
  • ODBC 驱动程序安装来自 Oracle 安装 mysql-connector-odbc-5.2.5-win32.msi。在 ODBC 管理器中,驱动程序名称根据代码显示(还有一个 ANSI 驱动程序也不起作用。64 位 ODBC 驱动程序不适用于 32 位办公室安装。
  • 我试过引用 Microsoft ActiveX 数据对象 2.8 和 6.1。

这是我使用的代码:

Sub TestMySQL()
Dim cnn As ADODB.Connection, rst As ADODB.Recordset

'Set up the connection
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={MySQL ODBC 5.2 Unicode Driver};" & _
"SERVER=192.168.99.5;" & _
"PORT=3307;" & _
"DATABASE=MySQLDatabase;" & _
"USER=username;" & _
"PASSWORD=password;" & _
"OPTION=3;"


'Set up the recordset
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tbl_Test", cnn, adOpenDynamic, adLockReadOnly

'Check the recordcount
rst.MoveLast
rst.MoveFirst
If rst.RecordCount > 0 Then MsgBox "Success!"

Cleanup:
On Error Resume Next
If rst.State = adStateOpen Then rst.Close: Set rst = Nothing
If cnn.State = adStateOpen Then cnn.Close: Set cnn = Nothing
End Sub

记录一下,使用上述连接成功返回数据库中所有表的代码。

Sub DisplayDBTables(cnn As Object)
Dim ct As Object: Set ct = CreateObject("adox.Catalog")
Dim tb As Object: Set tb = CreateObject("adox.Table")

Set ct.ActiveConnection = cnn

For Each tb In ct.Tables
If tb.Type = "TABLE" Then Debug.Print tb.Name
Next tb

Set ct = Nothing: Set tb = Nothing
End Sub

任何人都可以提供有关为什么我不能返回记录集的线索吗?

编辑:因此,使用 rst.GetRows() 方法可以将结果返回到数组。所以我想我现在的问题是为什么我不能像通常使用 ADODB 那样遍历记录集并访问每条记录?

最佳答案

Tim 的评论让我开始思考,在搜索非 MySQL 特定问题后,我找到了这个 SO 答案:https://stackoverflow.com/a/2032618/1733206

诀窍是让游标成为客户端。因此,在 Set rst = New ADODB.Recordset 之后添加以下行。

rst.CursorLocation = adUseClient

作为进一步说明,根据 Tim 的评论(即 SELECT Count(*) FROM tbl_Name)直接从数据库查询记录计数将比 MoveLast 在更大的数据集上更快, RecordCount 组合。

关于MySQL Recordset 在应该返回值时不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579216/

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