设为首页 加入收藏

TOP

c++辅导:VisualC++ADO数据库编程入门(5)
2014-11-20 04:18:38 】 浏览:6554
Tags:辅导 :VisualC ADO 数据库 编程 入门

  1. 使用书签( bookmark )


  书签可以唯一标识记录集中的一个记录,用于快速地将当前记录移回到已访问过的记录,以及进行过滤等等。Provider会自动为记录集中的每一条记录产生一个书签,我们只需要使用它就行了。我们不能试图显示、修改或比较书签。ADO用记录集的Bookmark属性表示当前记录的书签。


  用法步骤:


  (1). 建立一个VARIANT类型的变量


  _variant_t VarBookmark;


  (2). 将当前记录的书签值存入该变量


  也就是记录集的Bookmark属性的当前值。


  VarBookmark = rst->Bookmark;


  (3). 返回到先前的记录


  将保存的书签值设置到记录集的书签属性中:


  // Check for whether bookmark set for a record


  if (VarBookmark.vt == VT_EMPTY) printf("No Bookmark set!\n");


  else


  rst->Bookmark = VarBookmark;


  设置完后,当前记录即会移动到该书签指向的记录。


  2、设置过滤条件


  Recordset对象的Filter属性表示了当前的过滤条件。它的值可以是以AND或OR连接起来的条件表达式(不含WHERE关键字)、由书签组成的数组或ADO提供的FilterGroupEnum枚举值。为Filter属性设置新值后Recordset的当前记录指针会自动移动到满足过滤条件的第一个记录。例如:


  rst->Filter = _bstr_t ("姓名='赵薇' AND性别=‘女’");


  在使用条件表达式时应注意下列问题:


  (1)、可以用圆括号组成复杂的表达式


  例如:


  rst->Filter = _bstr_t ("(姓名='赵薇' AND性别=‘女’) OR AGE<25");


  但是微软不允许在括号内用OR,然后在括号外用AND,例如:


  rst->Filter = _bstr_t ("(姓名='赵薇' OR性别=‘女’) AND AGE<25");


  必须修改为:


  rst->Filter = _bstr_t ("(姓名='赵薇' AND AGE<25) OR (性别=‘女’AND AGE<25)");


  (2)、表达式中的比较运算符可以是LIKE


  LIKE后被比较的是一个含有通配符*的字符串,星号表示若干个任意的字符。


  字符串的首部和尾部可以同时带星号*


  rst->Filter = _bstr_t ("姓名LIKE '*赵*' ");


  也可以只是尾部带星号:


  rst->Filter = _bstr_t ("姓名LIKE '赵*' ");


  Filter属性值的类型是Variant,如果过滤条件是由书签组成的数组,则需将该数组转换为SafeArray,然后再封装到一个VARIANT或_variant_t型的变量中,再赋给Filter属性。


  3、索引与排序


  (1)、建立索引


  当以某个字段为关键字用Find方法查找时,为了加快速度可以以该字段为关键字在记录集内部临时建立索引。只要将该字段的Optimize属性设置为true即可,例如:


  pRst->Fields->GetItem("姓名")->Properties->


  GetItem("Optimize")->PutValue("True");


  pRst->Find("姓名 = '赵薇'",1,adSearchForward); ......


  pRst->Fields->GetItem("姓名")->Properties->


  GetItem("Optimize")->PutValue("False");


  pRst->Close();


  说明:Optimize属性是由Provider提供的属性(在ADO中称为动态属性),ADO本身没有此属性。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++辅导:VisualC++ADO数据库编程.. 下一篇编译器对内存填充长度之误解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目