★★★超级郁闷的mysql取记录集为-1问题,居然被这样的问题困扰一下午,最可悲的是,现在还没解决。

yunok 2005-01-26 05:43:42
Private Sub myodbc_ado_Click_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String

'connect to MySQL server using MySQL ODBC 3.51 Driver
Set conn = New ADODB.Connection
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& " DATABASE=test;" _
& "UID=root;PWD=; OPTION=3"

conn.Open

'create table
conn.Execute "DROP TABLE IF EXISTS my_ado"
conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _
& "txt text, dt date, tm time, ts timestamp)"

'direct insert
conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')"
conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')"

Set rs = New ADODB.Recordset

'fetch the initial table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print

Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
rs.MoveNext
Debug.Print
Loop
rs.Close

'rs insert
rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs!Name = "Monty"
rs!txt = "Insert row"
rs.Update
rs.Close

'rs update
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-row"
rs.Update
rs.Close

'rs update second time..
rs.Open "SELECT * FROM my_ado"
rs!Name = "update"
rs!txt = "updated-second-time"
rs.Update
rs.Close

'rs delete
rs.Open "SELECT * FROM my_ado"
rs.MoveNext
rs.MoveNext
rs.Delete
rs.Close

'fetch the updated table ..
rs.Open "SELECT * FROM my_ado", conn
Debug.Print rs.RecordCount
rs.MoveFirst
Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-")
For Each fld In rs.Fields
Debug.Print fld.Name,
Next
Debug.Print

Do Until rs.EOF
For Each fld In rs.Fields
Debug.Print fld.Value,
Next
rs.MoveNext
Debug.Print
Loop
rs.Close
conn.Close

End Sub

哥哥们请问: Debug.Print rs.RecordCount 为什么得到的为-1呢?而实际上数据库中已经确实有数据存在了。而且能够打印出来。有哥哥说让我改变数据游标类型,我改为3,1,问题依旧。查找CSDN居然没有相关提问,再次超级郁闷。200分相赠。需要Mysql环境可以与我联系(数据库+管理工具+数据源=24M)
...全文
163 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
weesky 2005-01-26
  • 打赏
  • 举报
回复
我换ID结贴!:)
weesky 2005-01-26
  • 打赏
  • 举报
回复
非常感谢 viena(维也纳nn-实心木头人) 兄 creazyfish(梳分头的鱼) 兄

和以上各位高手!!!非常感谢!!!

结贴了!!

by the way: tmd007()你没分.
tmd007 2005-01-26
  • 打赏
  • 举报
回复
问题解决了,接分
viena 2005-01-26
  • 打赏
  • 举报
回复
客户端游标是把记录集整个读到本地,所以可以得到记录数;
服务器游标当移动记录指针时,要即时到服务器上去取的,记录数是不确定的
samwzhang 2005-01-26
  • 打赏
  • 举报
回复
adUseServer:服务器游标;
adUseClient:客户端游标;
weesky 2005-01-26
  • 打赏
  • 举报
回复
原来程序中的这句话:rs.CursorLocation = adUseServer 加上后取到的值仍然是-1。换为rs.CursorLocation = adUseClient就OK了。为什么呢?
weesky 2005-01-26
  • 打赏
  • 举报
回复
高手们,用rs.CursorLocation = adUseClient就可以取到值了。
原来程序中的确有句话是:rs.CursorLocation = adUseServer

请指教这句话是什么意思呢?
samwzhang 2005-01-26
  • 打赏
  • 举报
回复
rs.Open "SELECT * FROM my_ado", conn, adOpenStatic, adLockOptimistic
rst.filter=""'加这句肯定可以实现,不加这句说不定也能实现
Debug.Print rs.RecordCount
creazyfish 2005-01-26
  • 打赏
  • 举报
回复
conn.Open
conn.CursorLocation=adUseClient
viena 2005-01-26
  • 打赏
  • 举报
回复
不喜欢读长代码,但还是大概看了一下,确实没有
rs.CursorLocation = adUseClient
先加上这一句试试~
viena 2005-01-26
  • 打赏
  • 举报
回复
返回–1是无法确定记录数
一般情况当所有记录都已读到客户端时,才直接使用RecordCount属性,是一个现成可用的值;
否则的话,不如使用
set rs7=conn.Execute("select count(*) as recCount FROM my_ado")
rs7("recCount")
viena 2005-01-26
  • 打赏
  • 举报
回复
如果 Recordset 对象支持近似定位或书签(即 Supports (adApproxPosition) 或 Supports (adBookmark) 各自返回 True),不管是否完全填充该值,该值将为 Recordset 中记录的精确数目。如果 Recordset 对象不支持近似定位,该属性可能由于必须对所有记录进行检索和计数以返回精确 RecordCount 值而严重消耗资源
viena 2005-01-26
  • 打赏
  • 举报
回复

rs7=conn.Execute("select count(*) as recCount FROM my_ado")
rs7("recCount")就可以了
效率高
viena 2005-01-26
  • 打赏
  • 举报
回复
是客户端游标吗?
aiur2000 2005-01-26
  • 打赏
  • 举报
回复
rs.CursorLocation=adUseClient
另外换成1,3试试
aiur2000 2005-01-26
  • 打赏
  • 举报
回复
要使用用户游标吧

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧