我正在尝试使用ADODB从MySQL通过VBA(在Excel中)检索记录集。我可以通过网络成功连接到MySQL数据库,甚至可以使用ADOX返回表的列表,但是当我尝试返回记录集时,recordcount为-1并且它是空的。
当我在MySQL Workbench中输入相同的SQL语句时,结果将按预期返回。
我已成功使用ADO连接到Access数据库,现在想将该数据库移动到MySQL并遇到此问题。
需要注意的事项:
这是我正在使用的代码:
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那样访问每条记录?
答案 0 :(得分:3)
诀窍是使游标客户端。因此,请在Set rst = New ADODB.Recordset
之后添加以下行。
rst.CursorLocation = adUseClient
另外需要注意的是,根据Tim的评论(即SELECT Count(*) FROM tbl_Name
)直接从数据库中查询记录数将比MoveLast
,RecordCount
组合更快地覆盖大型数据集。