Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 如何将RECORDSET的..
  • 重新定位链接表二步走
  • 如何防止ADP在使用过程中..
  • SQL Server日期格..
  • 各个版本 MDAC 所包括..
  • 在Recordset对象中..

最新文章

  • 实验报告 --DAO与AD..
  • 用代码创建mdb格式的Ac..
  • 连接后台数据库提示 无法启..
  • 64位windows系统如..
  • Access的DAO准确获..
  • 利用代码自动创建ODBC源

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > DAO/链接表/ADO/ADP
DAO/链接表/ADO/ADP

在Recordset对象中查询记录的方法

    无论是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 Files\Microsoft Office\Office\Samples\Northwind.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 Files\Microsoft Office\Office\Samples\Northwind.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 Files\Microsoft Office\Office\Samples\Northwind.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 Files\Microsoft Office\Office\Samples\Northwind.mdb”, _

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

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

发布人:zhengjia…-Access中国  
分享到:
点击次数:  更新时间:2004-01-08 08:31:00  【打印此页】  【关闭】
上一条:如何定制自己的MSI安装文件  下一条:在VBA中使用代码打开设有工作组的MDB文件



相关文章

  • • 实验报告 --DAO与ADO效率之比较
  • • 用代码创建mdb格式的Access文件
  • • 连接后台数据库提示 无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开 的解决办法
  • • 64位windows系统如何使用64位的ADO连接Accesss accdb数据库(ACE.OLEDB)
  • • Access的DAO准确获取记录集Recordset的记录数Recordcount
  • • 利用代码自动创建ODBC源
  • • 在打开Ado记录集之前尽量先判断记录集有否打开,如打开则先关闭之
  • • 快速获取Excel文件所有工作表表名

热门文章

  • [2004-01-04] Access使用代码刷新链接表access数据库
  • [2003-12-13] Access几种注册ODBC数据源的方法access数据库
  • [2005-02-06] 如何更改Access表的字段名access数据库
  • [2017-05-28] 64位windows系统如何使用64位的ADO连接Accesss accdb数据库(ACE.OLEDB)access数据库
  • [2003-12-20] 刷新链接表的函数access数据库
  • [2003-12-13] VB 6.0与ACCESS的比较access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn