CDaoQueryDef对象表示了一个查询定义(querydef),查询定义通常保存在数据库中。查询定义是一个包含了说明查询的SQL语句极其属性(如创建日期、ODBC超时设置等)的数据存取对象,也可以创建临时的不存储在数据库中的临时查询定义对象,但把那些经常用到的查询定义保存在数据库中能够提高效率。CDaoDatabase对象维护了一个称为QueryDefs的集合,其中就记录了保存下来的查询定义。
DAO数据库类和MFC中基于ODBC的数据库类是截然不同的。所有的DAO数据库类的命名中都包括CDao前缀。但仍可以采用DAO数据库类存取
ODBC数据源。一般说来,在MFC中,基于DAO的类的处理能力比基于ODBC的类的处理能力要强;基于DAO的类可以通过ODBC数据源对应的数据库引擎存取ODBC数据源。基于DAO的类也支持
数据定义语言(DDL)一类的操作,如通过类在数据库中建表,而勿须直接调用DAO。
查询定义对象可用于多种类型的查询,包括选择、动作查询、
交叉表(crosstab)、删除、更新、添加、造表、数据定义、SQL直通查询和批量查询等。查询的类型是由SQL语句的内容决定的。有关查询类型的内容,请参阅成员函数Execute和GetType。
记录集通常用于返回行的查询,一般是那些使用了SELECT匜ROM的查询。Execute一般用于批量操作。要了解更详细的信息,请参阅Execute和CDaoRecordset的说明。
使用查询定义对象创建CDaoRecordset对象时,一般都是象上面介绍的那样创建和打开一个查询定义对象。然后构造一个
记录集对象,在调用CDaoRecordset:: Open时传一个指向查询定义对象的
指针。传递的查询定义必须是处于打开状态的。调用Open或Create都会使查询定义对象处于打开状态。
查询定义对象是使用外部
数据库引擎本地SQL方言的最好方法。例如,可以创建一个Transact SQL(Microsoft SQL Server中采用了)查询并存在查询定义对象中。在使用一个不是基于Microsoft
Jet数据库引擎的SQL查询时,必须提供一个指明
外部数据源的连接串。具有有效连接串的查询忽略本地数据库引擎,而直接把查询发送到外部
数据库服务器进行处理。