我正在尝试使用 ADODB 通过 VBA(在 Excel 中)从 MySQL 检索记录集。我可以通过网络成功连接到 MySQL 数据库,甚至可以使用 ADOX 返回表列表,但是当我尝试返回记录集时,记录计数为 -1 并且为空。
当我在 MySQL Workbench 中输入相同的 SQL 语句时,结果按预期返回。
我已经使用 ADO 成功连接到 Access 数据库,现在想将该数据库移动到 MySQL 并遇到此问题。
注意事项:
- 我在 Windows 7 64 位上使用 Office 2007 32 位。MySQL 服务器 (5.6) 在 Windows 8 64Bit 上。
- 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 那样遍历记录集并访问每条记录?