ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: autumnalRain

[讨论] 探讨如何获得RECORDSET正确记录数

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 16:16 | 显示全部楼层
本帖最后由 autumnalRain 于 2015-8-12 16:24 编辑
lbpp 发表于 2015-8-12 14:40
想获得RecordCount属性的值与ADO的两个属性有关

属性1:CursorLocation属性,该属性设置查询结果的存储 ...

十分感谢,看了您的贴子后,很多象我这样的新手,会学会如何解决这个问题。

TA的精华主题

TA的得分主题

发表于 2015-8-12 16:22 | 显示全部楼层
autumnalRain 发表于 2015-8-12 16:13
感谢。
也有老师说:
“……要想使用recordcount 得到记录个数好像一定得设置引用才行,即使你采用了  ...

设置引用应该指的就是前期绑定,recordcount应该和前期绑定和后期绑定没有什么关系。
捕获.JPG

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 16:26 | 显示全部楼层
lbpp 发表于 2015-8-12 16:22
设置引用应该指的就是前期绑定,recordcount应该和前期绑定和后期绑定没有什么关系。

是的,我一直疑惑,我的代码并没有设置前期引用,但测试结果是正确的。但解答的老师我也经常看他的贴子,所以我想再求证下老师究竟是怎么回事儿?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 16:26 | 显示全部楼层
本帖最后由 autumnalRain 于 2015-8-12 18:04 编辑
lbpp 发表于 2015-8-12 16:22
设置引用应该指的就是前期绑定,recordcount应该和前期绑定和后期绑定没有什么关系。

引用老师的帖子内容:                                                                  
“属性1:CursorLocation属性,该属性设置查询结果的存储位置
该属性有两个值,
1、AdUseServer(值为2),默认值,表示使用OLEDB提供程序或数据库来管理查询结果。
2、AdUseClient(值为3),表示使用ADO临时表引擎来管理查询结果
如需获得RecordCount属性值,该项应选择AdUseClient(值为3)。
在一个recordset对象没有打开之前,可以设置该值,如果不设置该值,则会继承connect对象中的该属性值。因此也可以直接设置connection对象的该值。”

我自己写的代码中哪个部分是设置这个?
ADORst.Open SQL, ADOConn, 3, 3     等价于  ADORst.Open SQL, ADOConn, adOpenStatic, adLockOptimistic


但是adOpenStatic, adLockOptimistic都是设置CursorType参数,一个是光标一个是锁定,那么在我的代码中应该在什么地方设置CursorLocation属性参数为AdUseClient?请老师指导!



TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-12 16:27 | 显示全部楼层
本帖最后由 autumnalRain 于 2015-8-12 16:30 编辑
lbpp 发表于 2015-8-12 16:22
设置引用应该指的就是前期绑定,recordcount应该和前期绑定和后期绑定没有什么关系。

具体见这个贴子,http://club.excelhome.net/thread-174745-1-1.html是离任版主爱歌学习这么解释的

TA的精华主题

TA的得分主题

发表于 2015-8-13 09:11 | 显示全部楼层
autumnalRain 发表于 2015-8-12 16:26
引用老师的帖子内容:                                                                  
“属性1: ...

  CursorLocation属性只能在recordset没有打开之前可以设置,打开以后该属性为只读。
因此可以用下面的方法来设置

Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
   
    With rs
        .CursorLocation = adUseClient     '设置CursorLocation
        .CursorType = adOpenStatic      '设置CursorType
        .LockType = AdLockBatchOptimistic    '设置LockType    该属性默认值为AdLockReadOnly(只读)
        .Open Sql, cn                          '打开recordset对象
    End With

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-13 09:49 | 显示全部楼层
autumnalRain 发表于 2015-8-12 16:27
具体见这个贴子,http://club.excelhome.net/thread-174745-1-1.html是离任版主爱歌学习这么解释的

这个应该是没有关系的,先期绑定和后期绑定我的理解有点类似于VBA中变量声明的情况,先期绑定类似于变量强制声明,在变量使用前已经确定了变量的类型并且按变量的类型分配了内存,后期绑定类似于不声明变量直接使用,因此在变量使用时才去分配内存,而且我估计分配的也是类似variant类型的变量。

就类似于截图中的情况,在变量声明的情况下,数据类型是确定的,但在没有声明的情况下,数据类型是不确定的,但VB会根据实际判断出一个数据类型。

要获得RecordCount属性只与CursorType属性有关,只要该属性为adOpenStatic(静态临时表,客户机端默认并且唯一可能的值)和adOpenKeyset(键集临时表)这两种类型时,就可以获得有效的recordcount值(具体原因参见前面回复的贴子中的链接,那里有详细的解释)。
按我的理解整理了一张表,供参考。这表中大的地方应该没有什么问题,具体细节未做过过多测试,只是按照我的理解来写的。供参考。
捕获.JPG
捕获2.JPG

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-13 09:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
属性名打错了,把CursorLocation打成了CursorType,重贴一下。
捕获2.JPG

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-13 11:24 | 显示全部楼层
lbpp 发表于 2015-8-13 09:56
属性名打错了,把CursorLocation打成了CursorType,重贴一下。

感谢!我再认真体会体会!

TA的精华主题

TA的得分主题

发表于 2015-8-13 14:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我一般都是设1,3
rs.open sql,conn,1,3
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-5 10:32 , Processed in 0.056187 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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