在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”

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

时间: 2024-10-01 19:26:20

在Recordset对象中查询记录的方法的相关文章

属性查询-hql中自动生成的通过一个属性和属性值查询记录的方法怎么改成通过一个属性和该属性的多个值查?

问题描述 hql中自动生成的通过一个属性和属性值查询记录的方法怎么改成通过一个属性和该属性的多个值查? 解决方案 hql中用and来合并条件

使用JDBC从数据库中查询数据的方法_Mysql

* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回的实际上就是一张数据表,有一个指针指向数据表的第一行的前面, * 可以调用next()方法检测下一行是否有效,若有效,返回true,且指针下移, * 相当于iterator 对象的 hasNext() 和 next()方法的结合体 * 3. 当指针定位到一行时,可以通过调用getXxx(index)

python删除列表中重复记录的方法

  这篇文章主要介绍了python删除列表中重复记录的方法,涉及Python操作列表的相关技巧,需要的朋友可以参考下 ? 1 2 3 4 def removeListDuplicates(seq): seen = set() seen_add = seen.add return [ x for x in seq if x not in seen and not seen_add(x) ] 希望本文所述对大家的Python程序设计有所帮助.

sql server 解密-请问Microsoft SQL Server 2005数据库中加密记录解密方法

问题描述 请问Microsoft SQL Server 2005数据库中加密记录解密方法 请问Microsoft SQL Server 2005数据库中类似 0MHCkgK7c4E= 的记录(共12位)是使用什么算法加密得到的?能否提供解密的方式或网址,谢谢! 解决方案 有些用到了base64来加密

关于访问对象中的类和方法

问题描述 关于访问对象中的类和方法 package com.sz; class Persion{ String name; int age; public void tell(){ System.out.println("姓名:"+name+",年龄"+age); } } public class Tell { @SuppressWarnings("null") public static void main(String[] args) { P

关于innodb中查询的定位方法

原创转载请注明出处 源码版本 5.7.14 涉及源码文件 page0cur.cc page0page.h page0page.cc rem0cmp.cc 为什么谈及定位方法,因为在innodb中,比如一个插入语句我们需要定位在哪里插入(PAGE_CUR_LE),比如一个查询语句我们需要定位到其第一个需要读取数据的位置,因此定位方法是查询的根本.而找到这个记录位置后实际上是用一个叫做page_cur_t结构体进行存储,暂且叫他cursor游标 struct page_cur_t{ const di

确定Oracle数据库表中重复记录的方法

作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录. 下面我们以表code_ref为例来讨论这个问题及其解决办法. ERROR位于第1行: ORA-01452: 无法 CREATE UNIQUE INDEX:找到重复的关键字 Oracle系统提示不能对表code_ref创建一个唯一索引,因为系统发现表中存在重复的记录.我们必须首先找到表中的重复记录并删除该记录,才可以创

asp.net GridView 中增加记录的方法_实用技巧

大多数人建议用 FormView 来完成增加记录的功能,但是 FormView 和 GridView 不是同一个表格,所以无法在同一个页面的同一个表格中显示.如果故意将 FormView 或自己的一堆于用新增功能的控件使用普通的表格组装起来,那么会碰到一个很麻烦的问题,即两个表格的列宽如何协调一致,大多数情况下,大家在做表格的时候,表格中各列的宽度都是自动调整的,所以强行指定宽度在很多情况下并不适用. 通过实践,想出了一种办法,主要步骤如下所示: 1) 在 GridView 的 EmptyDat

SQL查询日志 查看数据库历史查询记录的方法_mssql2005

好吧,到数据库日志中去找找,通过时间.关键字批配..能想到的全用上吧. 首先假定你执行过它.没有?好吧,要么它太过简单,要么你太过不简单.. 复制代码 代码如下: SELECT TOP 1000 --创建时间 QS.creation_time, --查询语句 SUBSTRING(ST.text,(QS.statement_start_offset/2)+1, ((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE