分享
 
 
 

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

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

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

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

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

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

ATL类提供了两个函数MovePrev和MoveNext来移动指针,其返回值为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型字段是一个字符串型变量 ,但字符的长度限定为1024个字符。那么,我们可不可以处理大于1024个字符的变量呢?答案是肯定的,我们只须将1024改成您需要的值即可,如:TCHAR m_FileName[10000],程序照样能正常运行。但建议用户谨慎使用,否则将造成不必要的内存开销,这在大型商业数据库的开发中尤其重要。

另外需要说明:在调试版本中,变量使用字符大小不能超过255个,如果程序使用了大于255个字符的变量,在调试版本中可能得不到正确结果,这是正常的。如果改成发行版本,便会一切正常。

本文仅肤浅介绍了在用ATL OLE DB类开发数据库技术中遇到的问题,及解决办法,希望能对读者有所帮助。VC6集成的ATL3.0版本还存在一些Bug,相信在以后的版本中会得到解决。同时欢迎编程爱好者与我共同探讨VC6编程技巧。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有