CDaoQueryDef

CObject
 └CDaoQueryDef

CDaoQueryDef对象表示了一个查询定义(querydef),查询定义通常保存在数据库中。查询定义是一个包含了说明查询的SQL语句极其属性(如创建日期、ODBC超时设置等)的数据存取对象,也可以创建临时的不存储在数据库中的临时查询定义对象,但把那些经常用到的查询定义保存在数据库中能够提高效率。CDaoDatabase对象维护了一个称为QueryDefs的集合,其中就记录了保存下来的查询定义。
注意:
DAO数据库类和MFC中基于ODBC的数据库类是截然不同的。所有的DAO数据库类的命名中都包括CDao前缀。但仍可以采用DAO数据库类存取ODBC数据源。一般说来,在MFC中,基于DAO的类的处理能力比基于ODBC的类的处理能力要强;基于DAO的类可以通过ODBC数据源对应的数据库引擎存取ODBC数据源。基于DAO的类也支持数据定义语言(DDL)一类的操作,如通过类在数据库中建表,而勿须直接调用DAO。

用法
查询定义对象可用来存取当前保存的查询或者创建一个将保存的查询或临时查询。
1.无论怎么使用,都需要提供一个指向查询所属的数据库对象的指针,并构造一个CDaoQueryDef对象;
2.然后:
·如果是使用一个现存的查询,则根据保存的查询的名字调用查询定义对象的成员函数Open。
·如果是创建一个新的将保存的查询,则提供新查询的名字,调用查询定义对象的成员函数Create。
·如果是创建一个临时查询对象,也要调用Create,不过传递的查询名是一个空字符串。
在使用完查询对象之后,需要调用它的成员函数Close关闭它,然后销毁该对象。
提示:
创建待保存的查询的最简单的办法是采用Microsoft Access创建并把他们保存在数据库中。以后就可以在MFC代码中打开并使用它们了。

目的
查询定义对象可用于以下目的:
·创建CDaoResordset对象。
·调用该对象的成员函数Execute直接执行动作查询或SQL直通查询。
查询定义对象可用于多种类型的查询,包括选择、动作查询、交叉表(crosstab)、删除、更新、添加、造表、数据定义、SQL直通查询和批量查询等。查询的类型是由SQL语句的内容决定的。有关查询类型的内容,请参阅成员函数Execute和GetType。记录集通常用于返回行的查询,一般是那些使用了SELECT匜ROM的查询。Execute一般用于批量操作。要了解更详细的信息,请参阅Execute和CDaoRecordset的说明。

查询定义和记录集
使用查询定义对象创建CDaoRecordset对象时,一般都是象上面介绍的那样创建和打开一个查询定义对象。然后构造一个记录集对象,在调用CDaoRecordset:: Open时传一个指向查询定义对象的指针。传递的查询定义必须是处于打开状态的。调用Open或Create都会使查询定义对象处于打开状态。

外部数据库
查询定义对象是使用外部数据库引擎本地SQL方言的最好方法。例如,可以创建一个Transact SQL(Microsoft SQL Server中采用了)查询并存在查询定义对象中。在使用一个不是基于Microsoft Jet数据库引擎的SQL查询时,必须提供一个指明外部数据源的连接串。具有有效连接串的查询忽略本地数据库引擎,而直接把查询发送到外部数据库服务器进行处理。
提示:
使用ODBC表时最好的方式是把它们与一个Microsoft Jet数据库联系起来。要了解更详细的信息,请参阅联机文档“Visual C++程序员指南”中的“DAO扩展:使用外部数据源”。
要了解有关查询定义的更详细的信息,请参阅联机文档“Visual C++程序员指南”中的“DAO查询定义”。相关信息,请参阅DAO帮助中的“查询定义对象”、“查询定义集合”和“使用DAO存取外部数据库”。
#include <afxdao.h>
请参阅:CDaoRecordset, CDaoDatabase, CDaoTableDef, CDaoException


CDaoQueryDef类的成员

数据成员
m_pDatabase指向查询定义相联系的CDatabase对象的指针。查询定义可以存在该数据库中,也可以不存在其中
m_pDaoQueryDef指向DAO查询定义对象的OLE接口

构造函数
CDaoQueryDef构造一个CDaoQueryDef对象。随后可以调用Open或Create
Create创建CDaoQueryDef对象。要么把查询定义对象作为临时查询,要么调用
Append把它保存到数据库中Append把查询定义添加到数据库的QueryDefs集合中保存该查询
Open打开数据库的QueryDefs集合中保存的一个查询定义
Close关闭查询定义对象。在使用完之后销毁该C++对象

属性
CanUpdate如果查询可以更新数据库,则返回非零值
GetConnect返回与查询定义相关的连接串。连接串标志了数据源(仅用于SQL直通查询,否则返回一个空串)
GetDateCreated返回创建该查询的日期
GetDateLastUpdated返回最后一次修改该查询的日期
GetName返回查询定义的名字
GetODBCTimeout返回在执行该查询定义时所用的ODBC超时设置(适用于ODBC查询)超时设置设定了查询执行响应的最长允许时间
GetRecordsAffected返回动作查询所影响的记录数
GetReturnsRecords返回查询所返回的记录数
GetSQL返回查询定义中指定的SQL命令字符串
GetType返回查询的类型:删除、更新、添加、造表等等
IsOpen如果查询定义已经打开并可以执行,则返回非零值
SetConnect设置ODBC数据源上的SQL直通查询的连接串
SetName设置保存的查询的名字,替换创建时指定的名字
SetODBCTimeout设置ODBC查询的超时时间
SetReturnsRecords指定查询定义是否返回记录。把它设置为TRUE只对SQL传输型的查询有效
SetSQL设置查询定义中指明查询的SQL语句

操作
Execute执行查询定义对象中定义的查询
GetFieldCount返回查询定义对象定义的字段数
GetFieldInfo返回查询中指定字段的信息
GetParameterCount返回为该查询定义的参数个数
GetParameterInfo返回查询的指定参数的信息
GetParamValue返回查询的指定参数的值
SetParamValue设置查询的指定参数的值