前面接手一个项目,需要用VC访问已经存在的PARADOX数据库。在接手这个项目前,对于PARADOX的理解少之又少,只知道有这么一种数据库,并不了解它的结构是什么。真正对它进行操作的时候,才发现是如此之难。有几次差点都放弃了,但最后一咬牙,总算坚持过来了。在这期间,我走了不少的弯路,也有了一些心得,下面写下来,做为一个总结,也为其他同道少走一点弯路起一点提示作用吧。
1、PARADOX数据库结构
PARADOX数据库是Boland以前在DELPHI下利用BDE进行操作的桌面数据库,目前已经很少使用,以致ADO都不提供它的引擎了(也害得我吃了不少苦头)。PARADOX数据库本身以独立的表存在的,一个表就可以看成是一个库,或者也可以说是一个文件夹就是一个库,文件夹里的PARADOX数据表就是该库的各个表。PARADOX数据表的扩展名是db,此外还有一些其他的文件类型,作为数据表的辅助,但用ADO对其进行处理时,使用*.DB的文件就已经足够。
2、连接到PARADOX数据库
前面已经提到过,ADO没有PARADOX数据库的引擎,要用ADO访问PARADOX数据库,我试过三种方式来进行操作:用Microsoft.Jet.OLEDB.4.0来替代PARADOX数据库引擎;用仿ODBC的连接语句操作;建立ODBC数据源,然后用ADO来访问ODBC。还有一种是用VC来封装BDE API,在ww.codeproject.com上可以找到相关的内容。对于最后一种方法,用他的例子却实效果不错,但真正移直到我的程序上时却费了很大劲,并且效果不好,主要是我对于BDE操作方式太不理解了,花了好多时间,最终以放弃告终。
下面我就说明用前三种方式来进行连接到数据库的操作。其实这三种方式都没有太大的差别,只是连接语句不同而已。
(1)用Microsoft.Jet.OLEDB.4.0引擎。这种方式访问时跟连接到其他数据库没什么差别:
_ConnectionPtr m_pDb;
CString connectsource;
connectsource.Format(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s//shared;Extended Properties=Paradox 5.x;Persist Security Info=False",strCTRSRoute);
try //检查数据库连接是否正常
{
m_pDb.CreateInstance(__uuidof(Connection));
m_pDb->ConnectionTimeout=10;
m_pDb->CommandTimeout=20;
if(m_pDb->State!=adStateClosed)
{
m_pDb->Close();
m_pDb->Open((_bstr_t)connectsource,"","",adModeUnknown);
}
else
{
hr=m_pDb->Open((_bstr_t)connectsource,"","",adModeUnknown);
}
}
catch(_com_error e) //捕捉异常
{
LogAdoErrorImport(m_pDb);
}
说明:connectsource变量保存了连接信息,由此我们可以看到,所谓数据库的数据源,仅指是连接到PARADOX数据表放的位置Data Source=%s//shared,“shared”为一文件夹名,在该文件夹下面有PARADOX数据表,而不是具体指向哪一个数据表。同理,在下面的两种方式中,数据源也仅指向包含PARADOX数据表的文件夹。除了异常处理外在后面要详细说明外,其他的操作与其他ADO操作没有差别,在此不再冗续。
ÿ
痛苦的历程:Ado访问PARADOX数据库
最新推荐文章于 2024-08-20 11:53:45 发布
本文详述了在使用VC通过ADO访问Paradox数据库时遇到的困难,包括ADO缺乏Paradox引擎、数据库结构理解、连接方式选择等。作者尝试了Microsoft.Jet.OLEDB.4.0引擎、仿ODBC连接和通过ODBC数据源访问,并提供了相关代码示例。在数据表操作中,由于Paradox对BDE的依赖,导致在某些环境下出现错误。最后,作者分享了错误处理方法及对C/S架构改进的设想,以提高数据库操作效率。
摘要由CSDN通过智能技术生成