C语言直接操作DBF数据库的方法与实现
C语言直接操作DBF数据库的方法与实现
C语言直接操作DBF数据库的方法与实现
石家庄军械_x,ll学院谷蕾桥马英忱冯勋欣
捕要本文在对DBAsEI数据库进行剖析的基础上.提出了一种用c语言直接对DBF数据进行数
据读取和记录处理的方法.并结合实佣,说明了C语言编程的步骤和技巧.
1寻l言
C语言不仅具有很强的通用程序设计功
能,而且还有很强的可移植性.对于图像图
形等较复杂的问题,C语言确实都是一种强
有力的工具.但它对于大量数据信息的处
理.不如DBASEI语言.如将C语言和D—
BASEI语言相互调用,取长朴短.一个关
键的问题就是用C语言对DBF数据文件进行
识别和数据处理.因此,建立一套C语言对D—
BF数据库直接读取和处理的方法是十分重
要的.
2DBAS噩数据库文件的结构
剖析
DBF数据库磁盘文件是以二进制数字
和ASCII字符相结合的形式夺储的表1和表
2列出-fDBF数据库文件结构说明部分的内
容.其中,表1包括了文件的标识符.建库
时间,记录个数,结构说明部分的总字节
数等,长度共为32字节.表2进一步说明每
个字段的有关信息,包括字段名称,类型,
长度和小数位个数等.每个字段占32个字节.
在字段描述之后,有一字节(0DH)表示了
文件数据结构说明部分的结束和第一个记录
数据的开始.数据按记录和字段依次排列,
中问无分疆符.每个记录的开始字节是记录
删除标识.当该字节为(2oH)时,表示不删
除.当该字节为(2AH)时.表示有删除.
数据之后为一个字节的文尾标识(1AH)
裹l数据库文件结构说明
位置(字节)长度
O
1—3
4--?
8--9
10--11
12--31
32一(n—1)
1字节
3字节
4字节
2字节
2字节
2O字节
每32字节
1字节
裹2字段描述
位簧(字节)长度
1--1O11
l1l
说明
前两位为版本号
建库日期(年月日)
记录个数
结构部分字节效
记录字节个数
保留
字段描述部分(表2)
说明部分结束标志
0DH
说明
字段名.ASCI字符
字段类型.ASCⅡ
字符
保留
=进制表示字段长度
=进制表示小数位数
保留
工作区标识ID
保留
从表中可以看出,DBF数据库文件主要
包括两部分内容.第一部分是从开始到(32
+32?字段数+1)个字节.第二部分是数据
部分,它是按照第一部分的数据结构说明依
次有序排列的.选样可以通过读取第一部分
微小越计算机开发与应用】帅2.123
坫n
卜¨”∞ll2
的结构信息.在第=部分找到所需的数据位
置和内容.
3语言直接读取DBF
数据库文件的方法
j.打开DBF数据库由于DBF数据库是以
数字和ASCI字符相结合的方式存储文件
的,而且需要对数据库进行读写操作,因此
应采用以读写二进制方式打开文件,耶
fp=fopen(“filename.dbf”,
“r+),
5.2j奏取结构说明倌息首先按表1和表2的
结构说明来定义两个结构用以存放数据库结
构描述信息.
Structdbf1{
charflag~
chardateIs];
uDsignedlongrecord-hum
unsignednl-long;
llnsignedrecord~ong;
charunse[2o],
):
Strucfdbf2~
unsignedcbar
char
cbar
char
char
cbar
char
char
),
利用fread函数,将文件的数据结构说明
部分的全部信息读入结构之中.
fread(结构1指针,32,1fp)}
fread(结构2指针,32,字段个数,
fp)’
3.j读取数据在读取数据之前冼用fse~k
函数确定要读取数据指针的位置,再用fread
函数将数据读到内存.其中字段个数为,
(数据结构说明部分字节数一32—1)/32
24囊小型计算机开蹙与应甩tgg2.
4C语言对DBF数据库的
修改,删除和插入
4.1修改DBF数墨库对于DBF文件的某记
录或记录中的某字段内容,可以采用如下步
骤进行修改.首先.用fseek函数确定记录指
针位置,然后利用fwrire函数写入新的内
容.注意当要写入的内容少于记录所规定的
字节长度时,需加空格填满.
4.2■除DBF数据库的记录首先定义一块
内存空闯,把要删除的内容后面的全部数据
读入该内存空间,再将指针移到删除的开始
位置,将上述的内容写回文件之中,并将文
件的记录个数减1.
4.3插ADBF数据库记录首先定义一块内
存空间,将要插入的位置后面的全部数据放
入内存.然后在此位置上写入新的记录内容,
再将指针移至下一个记录开始处,把内存的
数据写回文件中,最后修改记录数.
完成上述修改,删除和插入等功能需要
注意以下几个问题;
a.对数据库进行操作的最后一步,要修改建
库日期