收 藏 投 稿 繁 体 RSS 
站长吧-中国站长学习与交流的网站
首 页 运 营 学 院 建 站 论 坛
Web master8.net  
 网站运营  
  欢迎在本站发布信息,在线投递稿件请点这里。编辑QQ:4908220,欢迎联系交流。
业界动态 创业故事 推广研究 策划盈利 电子商务 企业平台
  站长工具
SEO查询 Whois查询 Pr查询 域名查询 IP查询 网页编辑器
 建站服务  
  如有建站意向,请尽快联系我们,以便安排时间... 建站服务 QQ4908220 QQ:4908220
作品展示 服务范围 服务流程 服务报价 联系方式 付款方式
文章正文  » 您的当前位置: 首页 >> 学院 >> 数据库 >> Access
在Recordset对象中查询记录的方法
  来源:互联网 | 时间:2005-10-04 | 浏览:   相关评论 | 报告错误 | 发布文章
【字号: | | 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)

无论是 DAO 还是 ADO 都有两种从 Recordset 对象中查询记录的方法: Find 方法和 Seek 方法。在这两种方法中可以让你指定条件进行查询与其相应的记录 , 一般而言,在相同条件下, Seek 方法提供了比 Find 方法更好的性能,因为 Seek 方法是基于索引的。因为这个原因基本提供者必须支持 Recordset 对象上的索引,可以用 Supports ( adSeek ) 方法确定基本提供者是否支持 Seek ,用 Supports ( adIndex ) 方法确定提供者是否支持索引。(例如, OLE DB Provider for Microsoft Jet 支持 Seek Index 。),请将 Seek 方法和 Index 属性结合使用。如果 Seek 没有找到所需的行,将不会产生错误,该行将被放在 Recordset 的结尾处。执行此方法前,请先将 Index 属性设置为所需的索引。此方法只受服务器端游标支持。如果 Recordset 对象的 CursorLocation 属性值为 adUseClient ,将不支持 Seek 。只有当 CommandTypeEnum 值为 adCmdTableDirect 时打开 Recordset 对象,才可以使用此方法。

ADO Find 方法

DAO 包含了四个“ Find ”方法: FindFirst,FindLast,FindNext FindPrevious .

DAO 方法 ADO Find 方法

下面的一个例子示范了如何用 ADO Find 方法查询记录:

Sub FindRecord(strDBPath As String, _

strTable As String, _

strCriteria As String, _

strDisplayField As String)

" This procedure finds a record in the specified table by

" using the specified criteria.

" For example, to use this procedure to find records

" in the Customers table in the Northwind database

" that have " USA " in the Country field, you can

" use a line of code like this:

" FindRecord _

" "c:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb", _

" "Customers", "Country=" USA "", "CustomerID"

Dim cnn As ADODB.Connection

Dim rst As ADODB.Recordset

" Open the Connection object.

Set cnn = New ADODB.Connection

With cnn

.Provider = "Microsoft.Jet.OLEDB.4.0"

.Open strDBPath

End With

Set rst = New ADODB.Recordset

With rst

" Open the table by using a scrolling

" Recordset object.

.Open Source:=strTable, _

ActiveConnection:=cnn, _

CursorType:=adOpenKeyset, _

LockType:=adLockOptimistic

" Find the first record that meets the criteria.

.Find Criteria:=strCriteria, SearchDirection:=adSearchForward

" Make sure record was found (not at end of file).

If Not .EOF Then

" Print the first record and all remaining

" records that meet the criteria.

Do While Not .EOF

Debug.Print .Fields(strDisplayField).Value

" Skip the current record and find next match.

.Find Criteria:=strCriteria, SkipRecords:=1

Loop

Else

MsgBox "Record not found"

End If

" Close the Recordset object.

.Close

End With

" Close connection and destroy object variables.

cnn.Close

Set rst = Nothing

Set cnn = Nothing

End Sub

例如,用用这个过程查询“罗期文商贸”示例数据库中“客户”表的“国家”等于 USA 的记录,可以使用下面的代码:

FindRecord “c:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb”, _

“Customers”, “Country=" USA "”, ”CustomerID”

( 译者注:如果你安装的是简体中文版要将相应的字段名改成中文 )

ADO Seek 方法

因为 ADO Seek 方法使用 Index ,最好是在用这个方法之前指定一个索引,可是,如果你没有指定索引, Jet database engine 将用主键。

如果你需要从多个字段中指定值做为搜索条件,可以用 VBA 中的 Array 函数传递这些值到参数 KeyValues 中去。如果你只需要从一个字段中指定值做为搜索条件,则不需要用 Array 函数传递。

Find 方法一样,你可以用 BOF 或者 EOF 属性测试是否查询到记录。

下面的一个例子显示了如何用 ADO Seek 方法查询记录:

Sub SeekRecord(strDBPath As String, _

strIndex As String, _

strTable As String, _

varKeyValues As Variant, _

strDisplayField As String)

" This procedure finds a record by using

" the specified index and key values.

" For example, to use the PrimaryKey index to

" find records in the Order Details table in the

" Northwind database where the OrderID field is

" 10255 and ProductID is 16, and then display the

" value in the Quantity field, you can use a line

" of code like this:

" SeekRecord _

" "c:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb", _

" "PrimaryKey", "Order Details", Array(10255, 16), "Quantity"

Dim cnn As ADODB.Connection

Dim rst As ADODB.Recordset

" Open the Connection object.

Set cnn = New ADODB.Connection

With cnn

.Provider = "Microsoft.Jet.OLEDB.4.0"

.Open strDBPath

End With

Set rst = New ADODB.Recordset

With rst

" Select the index used to order the

" data in the recordset.

.Index = strIndex

" Open the table by using a scrolling

" Recordset object.

.Open Source:=strTable, _

ActiveConnection:=cnn, _

CursorType:=adOpenKeyset, _

LockType:=adLockOptimistic, _

Options:=adCmdTableDirect

" Find the order where OrderId = 10255 and

" ProductId = 16.

.Seek KeyValues:=varKeyValues, SeekOption:=adSeekFirstEQ

" If a match is found, print the value of

" the specified field.

If Not .EOF Then

Debug.Print .Fields(strDisplayField).Value

End If

" Close the Recordset object.

.Close

End With

" Close connection and destroy object variables.

cnn.Close

Set rst = Nothing

Set cnn = Nothing

End Sub

例如,用主键索引查询“罗期文商贸”示例数据库中“订单明细”表的“订单编号”等于 10255 并且产品编号等于 16 的 ” 数量 ” 的值,可以使用下面的代码:

SeekRecord “c:Program FilesMicrosoft OfficeOfficeSamplesNorthwind.mdb”, _

“PrimaryKey”, “Order Details”, Array(10255,16), ”Quantity”

( 译者注:如果你安装的是简体中文版要将示例中引用的相应的字段名改成中文 )

master8
  • 上一篇:Access数据库和项目之间的数据类型的比较或映射
  • 下一篇:万维网创始人博客处女秀

  • 我要投稿  打印本文  推荐本文  加入收藏  返回顶部  关闭窗口
    搜模板(www.somoban.com) 原创网站模板交易平台
    阿里妈妈再掀疯狂采购风,网站广告位严重告急,急召天下站长
    基于PHP+MySQL的整站、模块、插件开发等或者按需求实现相应功能;
基于各PHP主流建站系统CMS,BBS,BLOG等的模板定制,完全手写代码;
整站数据迁移或备份恢复;网页代码优化、重构;整站常规SEO优化;网站技术支持;
点击了解详情...
    站长论坛
    • 验证码: