朱金灿
前言:
dbf文件是一种著名的数据库文件,其特点是可以记录单个数据表的数据。Maozefa大侠曾经写过两篇文章论述如何操作dbf文件:《C++老代码 -- DBF数据文件操作类DBFile》(http://blog.youkuaiyun.com/maozefa/archive/2007/09/16/1787074.aspx)和C语言版的DBF本地数据库文件操作函数(http://blog.youkuaiyun.com/maozefa/archive/2008/01/11/2034688.aspx)。首先非常感谢Maozefa大侠把他的成果无私奉献出来。同时我也看到其中一些不足之处。一是代码的不兼容性,比如在《C++老代码 -- DBF数据文件操作类DBFile》一文的代码是在Borland C++ 3.1编译器下编译下,移植到VS环境下有一定的难度。二是创建的dbf文件的标准性有待检验。我曾经将《C++老代码 -- DBF数据文件操作类DBFile》一文的代码移植到VC 6.0环境下,顺利创建了dbf文件,但是用Microsoft Visual Foxpro 6.0打开只能看到字段名,看不到数据(可能这涉及到
dbf文件的版本问题)。据此我另想了一种操作
dbf文件的方法(有点投机取巧,大家不要派我板砖!呵呵)。
我看到
dbf文件结构其实是比较复杂的。我想直接创建肯定有一定困难,能不能换一个思路呢?我的一个思路就是:先创建一个空的dbf文件,然后使用ado连接它对它进行修改,这样就达到了创建dbf文件的目的。具体步骤如下:
1.使用
Microsoft Visual Foxpro 6.0创建一个空的dbf文件,取名为:table1.dbf里面有一个字段,取名为field1,把这个文件放在exe文件的输出文件下,如VS工程的debug文件夹下
2.使用
Windows API函数::GetModuleFileName获取exe文件输出路径,进而获取table1.dbf的路径。
3.使用
ado连接table1.dbf,连接成功后你就可以实现对dbf文件进行操作了,如修改字段、插入记录等等。
在使用
ado连接dbf文件之前你也可以使用Windows API函数对这个dbf文件进行拷贝、重命名之类的操作。
//
附ado连接dbf文件的代码:
_ConnectionPtrm_pConn;
//
连接数据库接口
CStringstrSRC;
//
strSRC为数据库连接字符串

if
(FAILED(m_pConn.CreateInstance(
"
ADODB.Connection
"
)))
...
{
AfxMessageBox("创建连接对象失败!");
returnFALSE;
}
//
获得连接字符串,csPath为dbf文件所在的文件夹
strSRC
=
GetVFFreeTableSRCString(csPath);
_bstr_tbstrSRC(strSRC);
//
把连接字符串转换为接口识别格式*

if
(FAILED(m_pConn
->
Open(bstrSRC,
""
,
""
,
-
1
)))
...
{
AfxMessageBox("打开数据库失败!");
returnFALSE;
}

//
上面用到的GetVFFreeTableSRCString函数代码如下:
CStringGetVFFreeTableSRCString(CStringstrFolderName)
...
{
CStringstrSRC;
strSRC="Provider=MSDASQL.1;DRIVER=MicrosoftVisualFoxProDriver;";
strSRC+="SourceType=DBF;";
strSRC+="SourceDB=";
strSRC+=strFolderName;
strSRC+="/";
strSRC+=";UID=SA;PWD=";
returnstrSRC;
}
本文介绍了一种通过先创建空DBF文件再利用ADO进行数据操作的方法,解决了直接创建DBF文件时遇到的问题,并提供了具体的实现步骤及代码示例。

907

被折叠的 条评论
为什么被折叠?



