CDaoRecordset::Seek

BOOL Seek(LPCTSTR lpszComparison, COleVariant* pKey1, COleVariant* pKey2 = NULL, COleVariant* pKey3=NULL);
  throw(CDaoException, CMemoryException);
BOOL Seek(LPCTSTR lpszComparison, COleVariant* pKeyArray, WORD nKeys);
  throw(CDaoException, CMemoryException);

返回值:
如果找到匹配记录,则返回非零值,否则为0。

参数:
lpszComparison下列字符串表达式之一:“<”、“<=”、“=”、“>=”或“>”。
pKey1指向COleVariant的一个指针,它的值对应于索引中的第一条记录。它是必需的。
pKey2指向COleVariant的一个指针,它的值对应于索引中的第二条记录。
pKey3指向COleVariant的一个指针,如果存在,它的值对应于索引中的第三条记录。缺省为NULL。
pKeyArray指向变量数组的一个指针。数组大小对应于索引中的字段数。
nKeys对应于数组大小的一个整数,其值是索引中的字段数。
注意:不要在键中指定通配符。通配符会使Seek返回没有匹配的记录。

说明:
调用这个成员函数,可以在索引表型记录集对象中定位满足当前索引指定条件的记录,并使它成为当前记录。使用Seek的第二个版本(数组)处理四个或更多字段。
Seek使在表型记录集上高性能索引搜索成为有效。调用Seek之前必须通过调用SetCurrentIndex设置当前索引。如果索引标识非唯一码字段,Seek定位于满足条件的第一条记录。如果不设置索引将产生一个异常。
注意到如果没有创建一个UNICODE记录集,COleVariant对象必须明确声明为ANSI。通过vtSrc设置为VT_BSTRT(ANSI)构造程序的COleVariant::ColeVariant(lpszSrc,vtSrc)格式,或者使用vtSrc设置为VT_BSTRT的COleVariant函数SetString(lpszSrc,vtSrc)可以做到这一点。调用Seek时,传递了一个或多个关键值和比较操作符(“<”,“<=”,“=”,“>=”或“>”)。Seek在指定码字段搜索,并定位于满足由lpszComparison和pKey1指定的条件的第一条记录。如果在定位匹配中Seek失败,Seek返回0,并且未定义当前记录。直接使用DAO时,必须明确检查NoMatch特性。
如果lpszComparison是“=”,“>=”或“>”,Seek从索引头开始。如果lpszComparison是“<”或“<=”,Seek从索引尾开始并向后搜索,除非末尾存在双重索引入口。这时Seek在索引末尾的双重索引入口之间的特定入口处开始。
使用Seek时不需有当前记录。
要在动态集型或快照型记录集中定位满足指定条件的记录,使用Find操作。为包括所有记录而不只是满足某个指定条件的记录,使用Move操作在记录之间移动。
在任何类型的附加表上均不能调用Seek,原因是附加表必须作为动态集型或快照型记录集打开。但是,如果调用CDaoDatabase::Open直接打开一个可安装ISAM数据库,可以在那个数据库的表上调用Seek,不过性能可能较低。
有关查找记录的更多信息,请参阅联机文档“Visual C++程序员指南”中的“DAO记录集:记录集导航”。有关信息,请参阅DAO帮助中的“Seek方法”。

请参阅:
CDaoRecordset::FindFirst, CDaoRecordset::FindLast, CDaoRecordset::FindNext, CDaoRecordset::FindPrev, CDaoRecordset::Move, CDaoRecordset::MoveFirst, CDaoRecordset::MoveLast, CDaoRecordset::MoveNext, CDaoRecordset::MovePrev, COleVariant::COleVariant, COleVariant::SetString