你把游标类型和游标位置改一下应该就可以了.
用静态的客户端游标.
DBRecordset.CursorType = adOpenStatic
DBRecordset.CursorLocation = adUseClient
用静态的客户端游标.
DBRecordset.CursorType = adOpenStatic
DBRecordset.CursorLocation = adUseClient
解决方案 »
- vb.net2008执行模块中动态添加控件程序并执行相关事件——陷入混乱中,请高人指点,高分求教,长标题求点击~~~
- VB与AVR单片机的串行通信
- 请教 New、CreateObject及GetObjectContext.CreateInstance的适用场合和主要区别,谢谢!!!
- vb当中的数据库问题
- 用VB自动操作Word的问题
- 大家帮忙了,让一个form上的几个submit分别调不同的页面怎么做啊?
- 有这个函数吗?
- 关于Shell 的问题
- 请问,用vb怎么获得局域网中主机名和IP地址?怎样知道一台计算机开着某一端口???
- 关于vb中的第三方控件actbar?
- MSHFlexGrid控件..难道没有人知道??
- 真想拥有自己的笔记本。
要不就直接是count 属性试试吧
如果返回-1又想知道记录数那只能把记录集遍历一下了.
如果是想判断有没有读到记录数那就这样写:
if( rs.bof and rs.bof) then
'记录集为空.
else
'记录集不为空.
endif
我已经改了光标位置和类型了。
shenme yisi ?
还没碰到过recordcount属性不能用的呢,可能在你引用recordcount时还未给recordset正确赋值吧,
要不试试movelast,再取AbsolutePosition试试?要不取book也行
RecordSet.Open 数据库名 Connection, adOpenKeyset, adLockOptimistic
不过到现在也不知道为什么?好象和所设的游标有关!
作者:深圳宝安原来电子有限公司
倪坚明 ---- ---- VB主要处理的是MDB格式的数据库,但就在这方面,它就偏偏出了差错,先看看下例: Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase(App.Path & "\zzr.mdb")
Set rs = db.OpenRecordset("test")
Debug.Print rs.RecordCount---- ---- 此例假设在应用程序目录下有一个名为"zzr.mdb"的数据库,而且它里边有一个名为"test"的表,此程序的目的就是求出该表中的记录的总数。此处用到的是"表"对象的RecordCount属性,这样用在一般性况下是正确的,但并不能保证在所有的情况下都能得出正确的结果,比如说表中的数据量很大,或者是数据库受到过什么损害等等。如果碰到这种情况,我们可以换一个角度来处理。请看下面的程序:
Dim db As Database
Dim rs As Recordset
Dim Num As Long
Set db = OpenDatabase(App.Path & "\zzr.mdb")
Set rs = db.OpenRecordset("test")
Num = 0
rs.MoveFirst
Do While Not rs.EOF()
Num = Num + 1
rs.MoveNext
Loop
Debug.Print Num---- ---- 这样,最后得到的Num即为正解结果,这种方法的思路是从表的开始处一直顺序走到结尾,就可以"数"出表中到底有多少条记录。这种方法看起来很笨,但是它却是一个相当准确的方法,大家不防可以试一下。
---- 再看笔者的说法: ---- 先看上面一行程序:Debug.Print rs.RecordCount,VB5在读取数据表时并非一次性将全部记录均读入内存(想想看如果有一个表,里面有一百万个记录甚至一亿个或更多,要想全部读入内存,你的机器能承受得了吗?),只是先读入一部分(在下认为这是VB的优异这处),recordset对象并非表的全部记录,只是已读入内存的部分,故用rs.recordcount得到的不是表的记录总数。 ---- 再看上面程序的改良部份:
Do While Not rs.EOF()
Num = Num + 1
rs.MoveNext
Loop
Debug.Print Num---- 在下用十万个记录的表对上面这段程序做了个测试,结果花了六分半钟(intel 166,32M内存),如此的等待,阁下有耐心无?请看在下的对策:
---- 假设数据表已打开,用 rs.Recordset.MoveLast '将指针移到表的最后一笔记录
debug.print rs.Recordset.RecordCount
即可得出正确结果。或者用下一种方法亦可rs.Recordset.MoveLast
debug.print rs.Recordset.AbsolutePosition+1
'调用绝对位置,因vb的第一笔记录是由零算起,故要+1。
rst.movelast
rst.movefirst
end if
count=rst.rowcount
The record count is maintained as a “high water ” — the highest-numbered record yet seen as the user moves through the records. The total number of records is only known after the user has moved beyond the last record. For performance reasons, the count is not updated when you call MoveLast. To count the records yourself, call MoveNext repeatedly until IsEOF returns nonzero. Adding a record via CRecordset:AddNew and Update increases the count; deleting a record via CRecordset::Delete decreases the count.
example:
dim a int
a=0
while not recordset.eof do
a=a+1
最终的a的数值就是记录数
我的语法也许有问题,但思路不错
1、Set rs = db.OpenRecordset("select * from test order by lngtestid")
关健是sql语句中用order by排序。
2、Set rs = db.OpenRecordset("test")
rs.movelast
我记得RecordCount返回的好像是移动过的记录数
如:用静态的客户端游标.
Recordset.CursorType = adOpenStatic
Recordset.CursorLocation = adUseClient 第二,移动指针到最后一条
rs.Recordset.MoveLast '将指针移到表的最后一笔记录,确保得到正确的结果
debug.print rs.Recordset.RecordCount 有人问为什么要移动指针到最后一条?
因为,用recordset访问到的是一个内存中的备份,不是所有的该纪录集的数目
这时得到的数量是recordset在内存部分的纪录数
使用movelast后,就能得到该纪录集中的所有记录数
care the cursor loctionthere many gays give u a wrong way