说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

为VB5辩解: VB处理数据库时求数据表记录总数的最佳方法

HTML文档下载 WORD文档下载 PDF文档下载
为VB5辩解: VB处理数据库时求数据表记录总数的最佳方法
作者:深圳宝安原来电子有限公司
倪坚明
---- ---- 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。

监视程序的运行情况 -VB资料 交换鼠标按钮 -VB资料 交换鼠标左右键 -VB资料 禁止使用 Alt-Tab 或 Ctrl-Alt-Del -VB资料 控制光驱门的开关 -VB资料 VB利用 窗口函数监视系统的运行情况(VB类) VB判断是否在VB5环境下运行 VB判断一个32位程序是否结束 VB判断一个程序启动完成(不是结束) 屏蔽TextBox的系统菜单 -VB资料 启动时禁止装入 Add-Ins -VB资料 让Timer控件每5分钟触发一次事件 -VB资料 让程序启动快一点 -VB资料 VB如何调用系統的【查找】、【替换】的对话框? VB如何动态新增、移除 ODBC DSN? VB如何读取 Picture 内任何一点的颜色值? VB如何获取硬盘卷标、序列号和文件系统类型? VB如何判别程序是在Win95或NT下执行? VB如何启动控制面板? VB如何取得磁盘序列号? VB如何让Window不接受键盘输入及Mouse Click VB如何让程序拥有多个热键? VB如何让用户自行输入方程式,并计算其结果? VB如何使程序不在Ctrl+Alt+Del弹出的对话框内? VB如何使用 VB 编写自动反安装的程序? VB如何用VB建立快捷方式 VB如何用VB在桌面建立快捷方式 VB如何在 VB 中控制 Modem 行为? VB如何在VB中判断Windows9x的运行模式 VB如何在Visual Basic中实现异步执行程序 VB如何在开机时自动更换墙纸? 有需要函数库的!superruntimerlibary包含258个函数。图标菜单。。。。。 WindowsMediaPlayer怎么用? 请问我下载的fastreport v2.5中的fr_class.pas怎么用,在哪里可找到fr v2.5的注册版? 初学者又问 dxImageEdit的问题(DevExpress) 问一个关于richtext控件的简单问题,有分 在线求:光纤网络方案,最好有价格! 大家快帮帮忙,急!!分不够可以再加 当选中datagrid的某行时,怎样让这一行获得焦点(改变颜色)? 多少钱可以把我们给买了! “WGE”团队诚邀英才 怎样将IPAddress类型转换成Int64整型? 只放frreport1到form上運行都會出現問題。 统计项目咨询? 能否在ASP中做个导出到EXCEL的 请问高手:document.all.item起什么作用啊??? 如何调试J2ME程序哟 ????????高分问题??????????? 请问在对话框的edit框输入完成后,输入回车键如何把回车处理成对应的按牛单击? 客户机程序怎么读取服务器上的SQL数据库呢? 求下拉列表联动的jsp源码 前辈请推荐几本关于Delphi数据库开发的好书 我要在wsda5.0下使用jdk1.4,怎么办? aspx页面滚动如何实现 第二届深圳Delphi爱好者聚会通知 我的InterBase7为何登录不了? 两个窗体问题,希望今晚能结贴。谢谢了!!! Microsoft.Web.UI.WebControls --- Treeview的应用(请大家帮帮忙) 请为一个界面问题 在9i中为什么提示这个表或视图不存在? 在线等…… 为何在邮箱定则中建了规则,还是收到满足该定则的垃圾邮件,急急! ASP如何调用进程外组件,在线等待,急!!! 帮个忙吧! html中 文本框失去焦点的事件 函数名是什么?? 谢谢 高分求助--关闭进程问题 关于在窗体上画线的问题。 大家讨论一下,做一个游戏修改器应该如何下手? 分不多,只是希望能解决问题!!!!还望各位帮助 一个简单的问题:无线网关是否要和无线网关配套? 问一个Swing做界面算是设计模式方面的问题,语言上应如何去实现 关于xslt的两个问题,各位高手帮忙。。。 怎样获得一个IP地址的整数值? 左连接(left join) 速度很慢,如何解决? “WGE”团队诚邀英才 访问这个页面试试看,能不能跟踪到文件的下载地址? 一个简单的问题 @Command([RefreshHideFormulas]) 有什么作用? 怎么找不到我的mapping 和formbean??? 菜鸟初学问题,两个表之间导入数据时候,一个表比另外一个表多一个字段的时候…… 我的软件在发布一周之后,终于有破解版了,悲喜交加中! 广义等于宏观吗?广义=宏观?狭义=微观?具体! 0.25厚的不锈钢铁皮每平方米重多少千克? 广义上讲,什么是法律? 一小球在长为8m的斜面上从静止开始匀加速滚下,经过t(s)到达斜面底端,那么他到达中点经过的时间是? 盲孩子和他的影子 采用什么描写 想想生活中还有哪些看似简单的事情也蕴含着比较深刻的道理的 从静止做匀加速运动的物体,运动到T时速度为v,当速度为v/2时,时间为多少 好死不如赖活 生存与生活的差别?就详细点回答啊. 物体从光滑斜面顶端由静止开始下滑,当它滑到终点时速度为v,经历时间是t,顶端滑到底端的总时间是______滑到一半时速度为V 勿以善小而不为的以的意思 教皇方济各电话被曝长期遭美国国安局监ABC主持人就辱华言论双手合十鞠躬道港媒:中国将会从美国国家安全局丑闻中菲律宾万圣节举行“重口味”游行(高清日舰强闯我演习区滞留70小时军事专家:极易致误判误撞和擦枪走火“死亡线”上的护路铁军亚航如此对待它的全球第二大市场美潜入雅虎谷歌狂盗数据澳使馆为美国搜集亚太情报斯诺登谋得俄网站工作牛油果pasta股市“补血”成功 龙头股要“龙抬头”少年年方18,却能一手“掌握”太空中宝宝急救大全!关键时刻能救宝宝一命!“多头”再下狠手 “空头”要倒霉科颜氏 (Kiehl\\\'s) 举A股保卫战:在这场胜利中,也许我们都紫菜虾皮燕麦粥大盘强势 农业股更强势?今生不想错过的旅行清单,谁愿陪我去完481亿悄悄流出 股票持有还是卖出?无限杀路蓝茵纪事唐朝小地主苍狼大地嗜血的拳头底牌办公室来了个极品女同事觉醒迷途重生之箭伤创世记恩怨江湖之侠骨柔情秦岭旅游昌平旅游龙胜旅游五大连池旅游罗布泊旅游榆林旅游广安旅游普洱旅游遂昌旅游曲靖旅游大兴安岭旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘