QTP连接数据库-rst.recordcount返回-1(ZT)

上一篇 / 下一篇  2009-11-05 12:25:28 / 个人分类:QTP

今天,在一个asp技术群里一个朋友问了这么一个问题:rs.recordcount为什么返回值总是-1呢?以前在asp编程的过程中也碰到过相同的问题,于是就告诉他方法,但是,无论怎么改总是不可以。最后发现,他连接的是mysql数据库,而我做过的那些是access数据库。因此,问题也就出来了。怎么解决呢?

他的原本语句:rs.open "select A_name from area where A_state='1' order by A_id asc",conn,1,1。然后输出rs.recordcount的值是-1.怎么改?

1).为了书写简便,我写成这样:rs.open sql,conn,3,1.我让他改成这样,结果还是返回-1.纳闷,曾经在access数据库编程中,只要改了这个参数,一切ok.看来,还有问题。难道是数据库问题?

2).在rs.open sql,conn,1,1之前添加一句:rs.cursorlocation = 3。结果,还是不可以。

3).改成:rs.cursorlocation = 3    rs.open sql,conn,3,1.ok.成功!

下面解释一下:rs.open sql,conn,3,1。这句中两个参数分别表示游标类型和锁定类型。什么是游标类型

游标类型:

Const adOpenForwardOnly = 0
前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。

Const adOpenKeyset = 1
静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。

Const adOpenDynamic = 2
键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。

Const adOpenStatic = 3
动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。

什么是锁定类型?

Const adLockReadOnly = 1
缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。

Const adLockPessimistic = 2
以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。

Const adLockOptimistic = 3
以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。

Const adLockBatchOptimistic = 4
执行多行批处理更新时使用这种类型

那么rs.cursorlocation = 3又是什么意思呢?就是代表使用客户端光标,也就是rs.CursorLocation = adUseClient。对应的是 rs.CursorLocation = adUseServer 服务端光标。

看看下面更详细的解释:

CursorLocation 属性

    设置或返回游标服务的位置。

     设置和返回值

     设置或返回可设置为以下某个常量的长整型值。

常量 说明
adUseNone 没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。
adUseClient 使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有 好处的。AdUseClient 具有向后兼容性,也支持同义的 adUseClientBatch。
adUseServer 默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。


说明


该属性允许在可用于提供者的各种游标库中进行选择。通常,可以选择使用客户端游标库或位于服务器上的某个游标库。

该属性设置仅对属性已经设置后才建立的连接有影响。更改 CursorLocation 属性不会影响现有的连接。

对于 Connection 或关闭的 Recordset 该属性为读/写,而对打开的 Recordset 该属性为只读。

由 Execute 方法返回的游标继承该设置。Recordset 将自动从与之关联的连接中继承该设置。

远程数据服务用法 当用于客户端 (ADOR) Recordset 或 Connection 对象时,只能将 CursorLocation 属性设置为 adUseClient。


TAG:

 

评分:0

我来说两句

Open Toolbar