设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2545|回复: 4
打印 上一主题 下一主题

难题!为何会走到第50条记录就结束?

[复制链接]
跳转到指定楼层
1#
发表于 2003-6-12 23:53:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这样的语句:
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
Set rst = Form_统计.RecordsetClone
Dim ss as integer
  If rst.RecordCount > 0 Then
  Dim aa As Integer '加的一个判断变量,用于调试程序
  aa = 1
  rst.MoveFirst
  Do While Not rst.EOF
    aa = aa + 1
    rst.MoveNext
  Loop
  end if
stop
刚开始时统计的数量总是不正确,无奈之下加下变量aa调试:
记录共有2000多条,可执行时到stop处一看aa=51.
不明白,这个问题困扰我好几天了,求各位高手帮忙!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
5#
 楼主| 发表于 2003-6-13 05:04:00 | 只看该作者
gnoy版主,谢谢!
我用的是adp+Sql server方式!
过程是写在VBA里!
您的文章确实给我了一个思路,我是不是应该换一种方法来处理问题!
好马上试一下!
4#
发表于 2003-6-13 01:59:00 | 只看该作者
VB5在处理数据库时的几个“BUG”
天宝光碟有限公司质检部
周峥嵘
---- VB5在处理数据库方面,提供了强大的功能,但是在笔者的使用过程中,发现了它也存在着一些“BUG”,现在介绍给大家,希望同志们在遇到相似的问题时做个参考。

---- 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即为正解结果,这种方法的思路是从表的开始处一直顺序走到结尾,就可以“数”出表中到底有多少条记录。这种方法看起来很笨,但是它却是一个相当准确的方法,大家不防可以试一下。
---- 另一个“BUG”是当VB在处理大型DBF库(笔者用的库均达到300M以上)时,会出现索引不成功的情况,请看下例:

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 = 1001
rs.Index = "BM"
rs.Seek "=", Num
Do While Not rs.Fields("BM") = Num
    rs.Edit
    rs.Fields("BM") = 1002
    rs.Update
    rs.MoveNext
Loop

---- 此例还是用的上面的例子中的一个表,并且又多做了一些假定:该表中有一个“部门”字段,字段名为:BM,并且在该字段上有一个名字相同的索引,并且是可以重复的(因为一个部门不只是一个人)。上面程序要做的就是找出所有部门为1001的人,并将1001改为1002,即部门调动。
---- 理论上,上述方法是完全行的通的,但是当遇到很大的库时,有时(必须强调是有些时候)就会出现修改不完全的情况,很多时候是只把第一条记录做了修改而已。我们在来换一种方法试一下(好在VB提供了多种方法以处理不同的情况),请看下例:

Dim db As Database
Dim rs As Recordset
Dim Num As Long
Dim SQL As String
Set db = OpenDatabase(App.Path & "\zzr.mdb")
Set rs = db.OpenRecordset("test")

SQL = "Update test set [bm]=1002 where [bm]=1001"
Db.Execute SQL

---- 此例用了一个SQL查询,它可以快速的实现上例的功能,而且只需要一句简单的命令,最主要的是,它不会漏下一条记录哟!
---- 以上是我在工作中的一点体会,曾经令我“百思不得其解”过一阵子,希望能对同志们有一定的帮助。



3#
 楼主| 发表于 2003-6-13 01:45:00 | 只看该作者
哪为什么会到第50条记录就停止呢,是不是ado有一个记录缓冲的问题,就是说ado认为到结尾了!还是rst.movefirst不起作用?
2#
发表于 2003-6-13 00:19:00 | 只看该作者
从这段代码中我看不出问题来!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-10 01:02 , Processed in 0.099759 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表