DAO树型控件的数据库访问

DAO树型控件的数据库访问,第1张

DAO树型控件的数据库访问,第2张

一、实施方法

DAO(数据库访问对象)使用微软Jet数据库引擎访问数据库。Microsoft Jet为Access和Visual Basic等产品提供了这种数据引擎。像ODBC一样,DAO提供了一组用于编程的API。MFC还提供了一组封装底层API的DAO类,从而大大简化了程序的开发。使用MFC的DAO类,用户可以编写与DBMS无关的应用程序。

DAO是从Visual c++ 4.0版引入的。一般来说,DAO类比ODBC类提供了更广泛的支持。一方面,只要有ODBC驱动,使用微软Jet的DAO就可以访问ODBC数据源。另一方面,由于DAO是基于微软Jet engine的,所以在访问Access数据库时有很好的性能(即*。MDB文件)。与ODBC类相比,DAO类有很多相似之处,主要包括以下几点:(1)两者都支持对各种ODBC数据源的访问。虽然它们使用不同的数据引擎,但两者都能满足用户编写与DBMS无关的应用程序的要求。(2)DAO提供了与ODBC功能相似的MFC类。比如DAO的CDaoDatabase类对应ODBC的CDatabase类,CDaoRecordset对应CRecordset,CDaoRecordView对应CRecordView,CDaoException对应CDBException。这些对应的类具有相似的函数,并且它们的大多数成员函数是相同的。(3)AppWizard和ClassWizard为使用DAO和ODBC对象的应用程序提供了类似的支持。

由于DAO和ODBC类的许多方面是相似的,所以一旦用户掌握了ODBC,就很容易学会使用DAO。事实上,用户可以很容易地将数据库应用程序从ODBC迁移到DAO。注意,DAO和ODBC的参数化是不同的。DAO记录集的m_strFilter和m _ strstart中的参数不是“?”不是,而是一个有意义的参数名。例如,下面的过滤器中有一个名为CourseIDParam的参数。

m _ pSet-> m _ str filter = " CourseID = CourseID param ";

在DoFieldExchange函数中,有以下两行:

pFX-> setfield type(CDaoFieldExchange::param);
DFX_Text(pFX,_T("CourseIDParam "),m _ strCourseIDParam);

dffunction的第二个参数也是CourseIDParam。

除了上面的区别,AppWizard和ClassWizard还隐藏了一些微妙的区别。比如DAO记录集用DFX代替RFX,DAO记录集的DoFieldExchange中用DFX函数代替RFX函数。

DAO可以通过ODBC驱动程序访问ODBC数据源。但DAO是基于微软Jet engine的,通过它DAO可以直接访问Access、FoxPro、dBASE、Paradox、Excel、Lotus WK等数据库。CDaoDatabase类可以直接与这些数据库连接,无需在ODBC管理器中注册DSN。例如,下面的代码用于打开FoxPro数据库:

CDaoDatabase daoDb
daoDb。打开(",假,假," FoxPro 2.5DATABASE = c:\ \ zyf ");
CDaoDatabase::Open函数用于连接数据库,其声明为:
Virtual void Open(lpctstr lpszname,bool b exclusive = false,
bool bread only = false,lpctstr lpszconnect = _ t(" ");
throw( CDaoException,cmemory exception);

如果参数bExclusive为TRUE,函数将以独占方式打开数据库,否则将共享数据库。如果bReadOnly为TRUE,数据库将以只读方式打开。如果要打开Access数据库,可以在lpszName参数中指定MDB文件名。如果要访问非Access数据库,应该将此参数设为" ",并在lpszConnect中指定一个连接字符串。连接字符串的形式通常是“数据库类型;数据库=路径(文件)”,例如“dBASE IIIDATABASE=c:\MYDIR "

Open()函数也可以打开一个ODBC数据源,但是它需要相应的ODBC驱动程序和在ODBC管理器中注册DSN。此时,lpszConnect以“ODBCDSN=MyDataSource .显然,当用DAO访问FoxPro这样的数据库时,直接打开比作为ODBC数据源打开更容易。

支持DDL是DAO对数据库编程良好支持的重要体现。DDL(数据定义语言)在SQL术语中称为“数据定义语言”,它用来完成数据库结构的生成、修改、删除等操作。ODBC类只支持DML(数据操作语言),不支持DDL,所以ODBC类只能完成数据操作,不能涉及数据库的结构。要执行DDL操作,只能通过ODBC API。DAO类同时提供了对DML和DDL的支持,这意味着程序可以使用DAO类方便地创建数据库和修改数据库的结构。

与ODBC相比,DAO提供了一些新的类来加强它的功能。这些新类包括:CDaoTableDef类提供了表结构的定义。调用CDaoTableDef::Open()函数获取表的结构定义。调用CDaoTableDef::Create()函数创建新表,调用CDaoTableDef:: CreateField()函数向表中添加字段,调用CDaoTableDef::CreateIndex()函数向表中添加索引。调用CDaoTableDef::Append()函数将新创建的表保存到数据库中。

CDaoQueryDef类表示一个查询定义,它可以存储在数据库中。CDaoWorkspace提供了数据工作空间。一个工作区可以包含几个数据库,这些数据库可以处理所有或单个事务,它还负责数据库的安全性。如果需要,程序可以打开多个工作空间。

DAO的另一个重要特性是它提供了对Access数据库的强大支持。因为DAO是基于微软Jet引擎的,所以DAO必须在Access数据库上多做文章。比如调用CDaoDatabase::Create()函数可以直接创建一个MDB文件,代码如下:

m_db。Create("C:\MYDIR\MYDB。MDB”);

使用AppWizard和ClassWizard,用户可以轻松开发性能卓越的基于DAO的Access数据库应用程序。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » DAO树型控件的数据库访问

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情