一个关于recordset的简单问题

smallsnig 2003-03-25 01:41:00
比如这样一条语句rst.Open "select * from sysusers", conn, adOpenDynamic, adLockOptimistic
是不是说语句执行完后就生成一个临时表表中存放着查询数据库所得的内容,但是我怎么样才能对这个临时表操作呢?
而且是不是查询完成后又要生成一个表?
要是我的datagrid已经与recordset绑定了,并且显示在datagrid中,那么如何使得datagrid中的指针指向我所要查询的结果?
麻烦大家了,我刚接触ado访问数据库。
...全文
70 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chenyu5188 2003-03-25
比如这样一条语句rst.Open "select * from sysusers", conn, adOpenDynamic, adLockOptimistic
是不是说语句执行完后就生成一个临时表表中存放着查询数据库所得的内容,但是我怎么样才能对这个临时表操作呢?
而且是不是查询完成后又要生成一个表?
要是我的datagrid已经与recordset绑定了,并且显示在datagrid中,那么如何使得datagrid中的指针指向我所要查询的结果?

答:不是产生临时表。rst是记录集对象变量。查询所产生的记录保存在它中。它就像一个维表格,记录就存储在它中。
不是每一次查询就产生一个表,记录集对象可以重复使用,即可以将多次查询后的记录返回给它。
至于如何使得datagrid中的指针指向我所要查询的结果?
建义直接使用SQL语句进行查询,将满足条件的记录显示在控件中。

例如:
rst.Open "select * from sysusers where 字段名=条件", conn, adOpenDynamic, adLockOptimistic
set datagrid1.datasource=rst
datagrid1.refresh

回复
chenyu5188 2003-03-25
Filter的用法:
为 Recordset 中的数据指定筛选条件。
设置和返回值
设置或返回变体型值,该值包含以下某项内容:
条件字符串 — 由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。
书签数组 — 指向 Recordset 对象中记录的唯一书签值数组。
以下某个 FilterGroupEnum 值。
常数 说明
AdFilterNone 删除当前筛选条件并恢复查看的所有记录。
AdFilterPendingRecords 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。
AdFilterAffectedRecords 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。
AdFilterFetchedRecords 允许查看当前缓冲区中的记录,即上一次从数据库中检索记录的调用结果。
AdFilterConflictingRecords 允许查看在上一次批更新中失败的记录。
说明
使用 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。
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 的第一个记录。

find用法:
搜索 Recordset 中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。
语法
Find (criteria, SkipRows, searchDirection, start)
参数
criteria 字符串,包含指定用于搜索的列名、比较操作符和值的语句。
SkipRows 可选,长整型值,其默认值为零,它指定当前行或 start 书签的位移以开始搜索。
searchDirection 可选的 SearchDirectionEnum 值,指定搜索应从当前行还是下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索是在记录集的开始还是末尾结束由 searchDirection 值决定。
start 可选,变体型书签,用作搜索的开始位置。
说明
criteria 中的“比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)。
criteria 中的值可以是字符串、浮点数或者日期。字符串值以单引号分界(如“state = 'WA'”)。日期值以“#”(数字记号)分界(如“start_date > #7/22/97#”)。
如“比较操作符”为“like”,则字符串“值”可以包含“*”(某字符可出现一次或多次)或者“_”(某字符只出现一次)。(如“state like M_*”与 Maine 和 Massachusetts 匹配。)
回复
smallsnig 2003-03-25
那么我上面的问题怎么解决啊!!!!急
回复
limit 2003-03-25
1.filter的功能没那么强大吧。
2.filter列出的结果就是查询的结果,recordset在move时不会找到不符合条件的记录。
回复
smallsnig 2003-03-25
而且filter只是把需要的东西列出来而已,而我要实现的是在原表中指针指示所需要的查询结果
回复
smallsnig 2003-03-25
不知道filter的功能如何,是不是只能对本表进行筛选?要是要执行复杂的sql查询行吗?比如说先和其他表进行联结再查询这样的,是不是说要实现这样的功能只能重新rst.open一下?
回复
limit 2003-03-25
rst.Filter = field & "like '"& value & "%'"
回复
limit 2003-03-25
绑定的话查询后结果就会在datagrid控件上显示。而且在datagrid控件上单击某行时rst也会自动指到该行记录。
回复
smallsnig 2003-03-25
那我想问一下rst.find这个方法是怎么用的
还有碰到一个字符串中使用变量的问题
Dim field As String
Dim value As String
field = Text1.Text
value = Text2.Text
rst.Filter = " '& field &' like '& value & '"
上面是错误的方法
不知道正确的方法是什么?
回复
minajo21 2003-03-25
不是,是打开一个ADO的记录集rst,你可以对这个记录集进行操作rst.addnew,rst.update
或取值rst.fields("123").value 等等
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2003-03-25 01:41
社区公告
暂无公告