VC编程实现创建dbf文件

前言:dbf文件是一种著名的数据库文件,其特点是可以记录单个数据表的数据。Maozefa大侠曾经写过两篇文章论述如何操作dbf文件:《C++老代码 -- DBF数据文件操作类DBFile》(http://blog.csdn.net/maozefa/archive/2007/09/16/1787074.aspx)和C语言版的DBF本地数据库文件操作函数(http://blog.csdn.net/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文件的代码:
_ConnectionPtr m_pConn;   //连接数据库接口
CString strSRC;//strSRC为数据库连接字符串

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

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

// 上面用到的GetVFFreeTableSRCString函数代码如下:
CString GetVFFreeTableSRCString(CString strFolderName)
...{
    CString strSRC;
    strSRC="Provider=MSDASQL.1;DRIVER=Microsoft Visual FoxPro Driver;";
    strSRC+="SourceType=DBF;";
    strSRC+="SourceDB=";
    strSRC+=strFolderName;
    strSRC+="\";
    strSRC+=";UID=SA;PWD=";
    return strSRC;
}   
posted on 2010-06-01 16:41  carekee  阅读(1467)  评论(0编辑  收藏  举报