vb精彩教程:数据异步加载
异步加载是ado的一种数据加载方式,主要由记录集的options参数来控制!
ado210.chm中的格式:
recordset.open source, activeconnection, cursortype, locktype, options
options
可选。long 值,指示提供者计算 source 参数的方式(如果该参数表示除 command 对象之外的某些内容),或者指示 recordset 应该从以前保存过的文件中恢复。可以是一个或多个 commandtypeenum 或 executeoptionenum 值,这些值可以用位 and 操作符组合。
executeoptionenum
指定提供者执行命令的方式。
常量 值 说明
adasyncexecute 0x10 指示命令将异步执行。
该值不能与 commandtypeenum 的值 adcmdtabledirect 组合。
adasyncfetch 0x20 指示在 cachesize 属性中指定的初始数量以后的剩余行将被异步检索。
adasyncfetchnonblocking 0x40 指示检索时主线程从不会阻塞。如果未检索到所请求的行,当前行将自行移动到文件结尾。
如果从包含持久存储 recordset 的 stream 中打开 recordset,那么 adasyncfetchnonblocking 将不起作用;该操作将同步进行并发生阻塞。
当 adcmdtabledirect 选项被用于打开 recordset 时,adasynchfetchnonblocking 不起作用。
adexecutenorecords 0x80 指示命令文本是不返回行的命令或存储过程(例如,仅插入数据的命令)。如果检索到任何行,它们将被放弃且不返回。
adexecutenorecords 只能作为可选参数传递给 command 或 connection 的 execute 方法。
adexecutestream 0x400 指示命令执行的结果应当作为流返回。
adexecutestream 只能作为可选参数传递给 command 的 execute 方法。
adexecuterecord 指示 commandtext 是一个命令或存储过程,它返回应当被作为 record 对象返回的单一行。
adoptionunspecified -1 指示未指定命令。
commandtypeenum
指定解释命令参数的方法。
常量 值 说明
adcmdunspecified -1 不指定命令类型的参数。
adcmdtext 1 按命令或存储过程调用的文本定义计算 commandtext。
adcmdtable 2 按表名计算 commandtext,该表的列全部是由内部生成的 sql 查询返回的。
adcmdstoredproc 4 按存储过程名计算 commandtext
adcmdunknown 8 默认值。指示 commandtext 属性中命令的类型未知。
adcmdfile 256 按持久存储的 recordset 的文件名计算 commandtext。只与 recordset.open 或 requery 一起使用。
adcmdtabledirect 512 按表名计算 commandtext,该表的列被全部返回。只与 recordset.open 或 requery 一起使用。若要使用 seek 方法,必须通过 adcmdtabledirect 打开 recordset。
该值不能与 executeoptionenum 的值 adasyncexecute 组合。
一般用这个参数adasyncfetch来控制,另外需要
.properties("inital fetch size")=50
另外可以参考《msce的vb分布式应用的开发》
举例,vb6.0的代码:
dim adors as adodb.recordset
set adors =new adodb.recordset
with adors
.cursorlocation = aduseclient
.properties("initial fetch size") = 50
.open mstrsql, adocn, adopenstatic, adlockoptimistic, adasyncfetch
if .bof = false or .eof = false then
--------------
else
end if
end with
总结:很多的网友都问大数量加载的问题,现在这种方式可以较快的返回数据。一般100万数据,前面50条只需要5~6秒就返回来!这个方式需要注意的是:
1。如果返数据量太大,而中途要取消,需要用adocn.cancel来取消查询,否则数据会继续返回数据。
2。如果数据量太大,记录集的释放会有问题。如果数据量在200m~300m时,set adors=nothing 不会快速释放高速缓存。希望有其它网友能够提供自己的见解。
3。对大数据量时,c/s开发中提供翻页/网格的滚动条结合的方式,对用户来话是极为方便。有的网友提供用存储过程来实现。本人在开发过程用分页控件与异步加载的数据源结合,实现了很好的数据浏览。
开发环境:vb6.0+ms sql server 2k +windows ads 2k通过
()
- · 在C#中调用VBScript等脚本的实现(下)
- · 在C#中调用VBScript等脚本的实现(上)
- · 设计模式之代理模式(Proxy)
- · 如何给DataGrid添加双题头分类显示
- · ASP漏洞全接触-高级篇
- · 轻松玩转弹出窗口
- · ASP漏洞全接触-入门篇
- · IIS服务器组建攻略
- · 其实做小偷是很容易的
- · XMLHTTP下载远程数据输出到浏览器
- · Jave基础学习:jdbc小技巧
- · 一棵php的类树(支持无限分类)
- · 用asp.net 实现九连环小游戏
- · MySQL数据导入导出方法与工具介绍(1)
- · 轻松弹出无边框网页的Javscrpt代码
- · ASP初学者参考
- · Java新手学习:IIS6和Tomcat5的整合
- · asp常用函数
- · W3 Jmail中文使用说明
- · 无组件上传图片到数据库中,最完整解决方案
- · 二级域名原理以及程序,申请即可开通
- · Java学习过程的一些重点
- · Oracle9i中如何建立不同字符集的数据库
- · 修复SQL Server 2000数据库之实战经验
- · 使用ASP生成HTML文件
- · 编写安全的ASP代码
- · 十天学会ASP.net(2)
- · 十天学会ASP.net(1)
- · 十天学会php(2)
- · 十天学会php(1)
- · 三天学好ADO
- · 在数据库中存取文件
- · 解决大字段在Form中Post出错的方法
- · 利用ASP+JMAIL进行邮件群发的新思路
- · 关于处理GET方式提交的含有特殊字符的参数
- · 关于Adodb.Stream 的使用说明
- · 多文件多文本框上传程序
- · 让妙客家标准版使用 SQL Server 数据库后台
