您的位置:首页 >> 编程开发 >> Visual C++ >> ATL/COM/ActiveX >> 正文
RSS
 

VC中利用ATL OLE DB类开发Access数据库的技巧

http://www.rdxx.com 01年06月30日 12:12 Blog 我要投稿

关键词: OLE DB , , ATL , 开发 , VC , Access数据库 , 技巧 , CE , 数据 , OLE
 

                     VC中利用ATL OLE DB类开发Access数据库的技巧

 

       Microsoft公司提供的最新数据开发技术OLE DB,是建立在COM接口上。由于OLE DB开发数据库十分方便,并且对数据库访问速度很快,所以成为很多商业软件首选技术。作为一个程序员,我有幸参加成都天下视讯网络有限责任公司互动电视节目的开发。在开发“股票点播”系统中,我们选用了由ATL封装的OLE DB类来开发股票数据库,由于股票数据库往往上100MB,并且程序不断往数据库追加或修改数据,所以在开发过程有我们遇到不少难题,幸而能一一解决。现将我在开发中的一些经验和技巧与大家共同探讨:

一、OLE DB Jet 4.0不能使用

开发之初,由于我们选用了桌面数据库Access,本来打算用Access 2000数据库格式,但在插入OLE DB Jet 4.0时却不能通过。我们尝试用ADO技术和直接使用最底层的COM接口,程序能正常运行。这说明OLE DB 4.0引擎没有bug,问题一定出在ATL向导生成的文件上。

幸而我对COM技术还比较了解,经过艰苦摸索后,终发现了问题:关键在由ATL向导生成数据库的头文件中,在OpenDataSource()函数中,有下面一行语句:

 

dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);

 

如果我们将之删除,程序就能正常运行了。

查看DBPROPSET_DBINIT属性:DBPROP_AUTH_PERSIST_SENSITIVE_AUTHI

NFO表示意思:“true false表示数据库对象坚持需要加密形式的敏感认证信息如密码和其他加密信息”。但是我们将之设置为truefalse都不能通过,只有将之删除才行。这也许是微软ATL模板库的一个bug!

二、有时需要重新用向导生成头文件

在开发过程中我们还遇到:如果用ATL向导生成的数据库的头文件用久了,则程序操作数据库时就可能发生错误!但用ATL向导重新生成头文件后,程序就正常运行了。不过这发生在使用OLE DB Jet 3.5.1引擎中,用ADO和直接用底层COM接口均不存在上述问题,这可能也是ATL的一个bug!但这不是时常发生,用户一般不易发现。而我们开发的数据库比较大,并且程序不断往数据库追加或修改数据,所以在开发过程中发现了此问题。

三、如何判断移到数据库头或尾

因为ATL中没有提供判断数据库指针是否移到数据库头或尾的函数,所以只有根据移动函数来判断是否移到头或尾。

ATL类提供了两个函数MovePrevMoveNext来移动指针,其返回值为HRESULT类型,HRESULT是一个OLEDB调用返回的32位代码,其代码的位的作用和含义读者可查阅相关书籍。如果返回值为S_OK,表示指针没有移到数据库头或尾,否则就表示移到数据库头或尾了。如下例子将遍历数据库记录:(info代表数据库记录集对象)

HRESULT hr = Info.MoveFirst();

While( hr != S_OK )

{

       //处理该记录

hr = info.MoveNext()

}

四、如果改动了ATL向导生成的数据库的头文件,最好Rebuild All一次,因为您的改动可能影响一些OLE注册信息,而由于ATL的缘故,可能须重新全编译一次以更新所有文件信息,否则,可能会导致程序不正常运行。

五、处理大于255字符字段。

Access数据库中规定字符型字段最多存放255个字符,如果我们要处理大于255个字符的字段该怎么办呢?

       我们可以将字符字段改成备注字段,而在ATL向导生成的字段的绑定变量如下:

         TCHAR m_FileName[1024];  //多个文件名的组合

       可以看出ATL自动为我们绑定的数据库Mem型字段是一个字符串型变量

9 7 3 1 2 4 8 :

 
 
标签: OLE DB , , ATL , 开发 , VC , Access数据库 , 技巧 , CE , 数据 , OLE 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站