ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 版主救命!关于ADO中FILTER属性使用DATEDIFF函数的问题[未解决]

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-11-20 22:45 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位版主及前辈和大师们,请救救我!
在写DateDiff函数时,用以下select方法得到的结果是正确的.

strSQL = "select 编号_领用时间 from 编号暂存表 where DateDiff(n, 编号_领用时间, Convert(varchar(100), GETDATE(), 20)) > 30"
If cnn.State = 0 Then
cnn.Open "Provider=sqloledb;Server=ddddddd;Database=ddddd;Uid=ddddd;Pwd=ddddd;"
End If
rs.Open strSQL, cnn
arr = rs.GetRows

但是以下用rs.filter属性就得不到正确的结果了,为什么啊!

strSQL = "select 编号_领用时间 from 编号暂存表"
If cnn.State = 0 Then
cnn.Open "Provider=sqloledb;Server=ddddddd;Database=ddddd;Uid=ddddd;Pwd=ddddd;"
End If
rs.Open strSQL, cnn
rs.filter="DateDiff(n, 编号_领用时间, Convert(varchar(100), GETDATE(), 20)) > 30"
arr = rs.GetRows

我想,这应该是一样的啊,但是不行啊,请各位帮帮我,谢谢了!

TA的精华主题

TA的得分主题

发表于 2008-11-21 10:00 | 显示全部楼层
DateDiff(n, 编号_领用时间, Convert(varchar(100), GETDATE(), 20))
Convert只在SQL中支持,在ADO中不支持,具体使用..你可以参考以下说明

Filter 属性
指示 Recordset 中的数据的过滤器。

设置和返回值
设置或返回 Variant 值,该值包含下列内容之一:

条件字符串 — 由一个或多个用 AND 或 OR 操作符连接的单个子句组成的字符串。
书签数组 — 指向 Recordset 对象中的记录的唯一书签值数组。
FilterGroupEnum 值。
说明
用 Filter 属性选择性地屏蔽 Recordset 对象中的记录。已过滤的 Recordset 成为当前游标。基于当前游标返回值的其他属性将受到影响,如 AbsolutePosition、AbsolutePage、RecordCount 及 PageCount。这是因为将 Filter 属性设置为特定值可将当前记录移动到满足新值的第一个记录。

条件字符串由 FieldName-Operator-Value 格式(如“LastName = 'Smith'”)子句组成。通过连接单独的 AND(如“LastName = 'Smith' AND FirstName = 'John'”)或 OR(如“LastName = 'Smith' OR LastName = 'Jones'”)子句可以创建复合子句。关于条件字符串,请遵循以下规则:

FieldName 必须是 Recordset 中有效的字段名。如果字段名包含空格,必须将字段名括在方括号中。
Operator 必须是下列字符串之一:<、>、<=、>=、<>、= 或 LIKE。
Value 是用于与字段值进行比较的值(如 'Smith'、#8/24/95#、12.345 或 $50.00)。字符串使用单引号,日期使用磅符号 (#)。数字可以使用小数点、美元符号和科学符号。如果 Operator 为 LIKE,则 Value 可以使用通配符。只允许使用星号 (*) 和百分号 (%) 通配符,而且必须是字符串的尾字符。Value 不能为 Null。
注意   若要在过滤 Value 中包括单引号 ('),请用两个单引号表示一个引号。例如,若要过滤 O'Malley,则条件字符串应为“col1 = 'O''Malley'”。若要在过滤值的开始和结尾处都包括单引号,请用磅符号 (#) 将字符串括起来。例如,若要过滤“'1'”,则条件字符串应为“col1 = #'1'#”。
AND 和 OR 在级别上没有先后之分。可用括号将子句分组。但不能象下例所示那样先将由 OR 连接的子句分组,然后再用 AND 将该组连接到其他子句:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
与之相反,可将此过滤构造为
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
在 LIKE 子句中,可在模式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在模式的结尾使用通配符(如 LastName Like 'Smit*')。
通过仅允许查看诸如上次调用 UpdateBatch 方法时受到影响的记录,过滤常量可以更容易地解决在批更新模式中发生的单个记录冲突。

由于与基本数据冲突(例如,记录已被另一用户删除),设置 Filter 属性本身可能会失败。在这种情况下,提供者向 Errors 集合返回警告但并不终止程序执行。只有在所有提出请求的记录上都发生冲突时才会发生运行时错误。用 Status 属性定位有冲突的记录。

将 Filter 属性设置为零长度字符串 ("") 与使用 adFilterNone 常量具有相同效果。

只要设置了 Filter 属性,当前记录位置都将移动到 Recordset 中已过滤记录子集的第一个记录处。同样,当 Filter 属性被清空时,当前记录位置都将移动到 Recordset 的第一个记录处。

通过书签值可以构造一个与 Filter 属性配合使用的数组,有关书签值的解释,请参阅 Bookmark 属性。

仅条件字符串形式的 Filters(例如 OrderDate > '12/31/1999')影响持久保留的 Recordset 的内容。使用 Bookmarks 数组或使用 FilterGroupEnum 中的值创建的 Filters 对持久保留的 Recordset 的内容没有影响。这些值适用于使用客户端或服务器端游标创建的 Recordset。

注意  在批更新模式下将 adFilterPendingRecords 标志应用到已过滤和已修改的 Recordset 时,如果过滤是基于单键表中的键字段进行的,并且修改是针对键字段的值进行的,那么所得到的 Recordset 将是空的。如果下列任一条件为 True,那么所得到的 Recordset 将是非空的:
过滤是基于单键表中的非键字段进行的。
过滤是基于多键表中的任意字段进行的。
修改是针对单键表中的非键字段进行的。
修改是针对多键表中的任意字段进行的。
下表总结了在不同的过滤和修改组合情况下 adFilterPendingRecords 产生的结果。左列所示为可能的修改情况;修改可以是针对非键字段中的任何字段、单键表中的键字段或多键表中的任何键字段进行的。顶行所示为过滤条件;修改可以是针对非键字段中的任何字段、单键表中的键字段或多键表中的任何键字段进行的。交叉的单元格中所示为结果:+ 表示在非空的 Recordset 中应用 adFilterPendingRecords 结果;- 表示空的 Recordset。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 07:40 , Processed in 0.017017 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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