表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。  
记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。  
1.表头记录的结构:  
字节偏移 说明  
0 文件类型  
0x02FoxBASE  
0x03FoxBASE+/dBASE III PLUS,无备注  
0x30Visual FoxPro  
0x43dBASE IV SQL 表文件,无备注  
0x63dBASE IV SQL 系统文件,无备注  
0x83FoxBASE+/dBASE III PLUS,有备注  
0x8BdBASE IV 有备注  
0xCBdBASE IV SQL 表文件,有备注  
0xF5FoxPro 2.x(或更早版本)有备注  
0xFBFoxBASE  
1 - 3 最近一次更新的时间(YYMMDD)  
4 - 7 文件中的记录数目  
8 - 9 第一个数据记录的位置  
10 - 11 每个数据记录的长度(包括删除标记)  
12 - 27 保留  
28 表的标记  
0x01具有 .cdx 结构的文件  
0x02文件包含备注。  
0x04文件是数据库(.dbc)  
请注意,这个字节可以包含任何上面值的和。例如,0x03 表明表具有结构化.cdx和一个备注字段。 
29 代码页标记 
30 - 31 保留,包含 0x00  
32 - n 字段子记录  
字段的数目决定了字段子记录的数目。表中每个字段都对应一个字段子记录。  
n+1 头记录终止符(0x0D),n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。  
1 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。数据记录从 除标记字节开始。如果此字节为 ASCII 空格 (0x20),该记录没有删除标记, 如果第一字节为星号 (0x2A),该记录有删除标记。在标记之后是字段记录中所命名各字段中的数据 
2.字段子记录结构 
字节偏移 说明 
0 - 10 字段名(最多 10 个字符 -若少于 10 则用空字符 (0x00) 填充) 
11 字段类型  
C-字符型  
Y-货币型  
N-数值型  
F-浮点型  
D-日期型  
T-日期时间型  
B-双精度型  
I-整型  
L-逻辑型 
M-备注型  
G-通用型  
C-字符型(二进制) 
M-备注型(二进制) 
P-图片型  
12 - 15 记录中该字段的偏移量  
16 字段长度(以字节为单位)  
17 小数位数  
18 字段标记 
0x01系统列(用户不可见) 
0x02可存储 null 值的列  
0x04二进制列(只适于字符型和备注型) 
19 - 32 保留  
格式保存的文件标头: 
支持 null 值  
日期时间型、货币型及双精度型数据 
字符字段和备注字段标记为二进制 
在数据库 (.dbc) 文件中添加表 
提示 可以使用下面的公式求出表文件中字段的数目:(x - 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。 
因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录,dbf文件头结构和字段类型描述结构用C语言表示如下: 
struct dbf_head { /* DBF文件头结构 */ 
char vers; /* 版本标志*/ 
unsigned char yy,mm,dd; /* 最后更新年、月、日 */ 
unsigned long no_recs; /* 文件包含的总记录数 */ 
unsigned short head_len,rec_len; /* 文件头长度,记录长度 */ 
char reserved[20]; /* 保留 */ 
}; 
struct field_element{ /* 字段描述结构 */ 
char field_name[11]; /* 字段名称 */ 
char field_type; /* 字段类型 */ 
unsigned long offset; /* 偏移量 */ 
unsigned char field_length; /* 字段长度 */ 
unsigned char field_decimal; /* 浮点数整数部分长度 */ 
char reserved1[2]; /* 保留 */ 
char dbaseiv_id; /* dBASE IV work area id */ 
char reserved2[10]; /* 
char production_index;  
}; 

解决方案 »

  1.   

    或者在ACCESS2000中将DBF文件转化为MDB文件再进行访问。
      

  2.   

    要求不准使用ado,也不准使用sql语句来实现create table 参数1,参数2...和alter table ...功能.
    这是我们的一道作业题!!
    以前没做过file方面的东西,不知道该怎么样读取dbf文件的内容啊.
      

  3.   

    不会吧,SQL语句也不让用?
    那FOX的语句可以使用吗?
      

  4.   

    DBF文件转为MDB文件的方法 _作者:[email protected].用手动的话,Access 97 做比较轻松,工具也较完整。合成以后一样可以供 Vb 利
    用。
    2.如果你坚持要自动,那么原则是
    a.用 Access 做个同结构的 Mdb 空档。
    b.用一个 FileListBox 指向 *.dbf 的目录。
    c.用 Dao 物件读入 mdb 空档。
    d.用 for next 回圈一一读入各 Dbf,如:
    for i=0 to FileListBox.listcount
    开启 FileListBox.list(i) 的 dbf
    for j=0 to FileListBox.list(i).recordcount
    mdb空档.addnew FileListBox.list(i).record(j)
    next
    next
      

  5.   

    使用odbc,从控制面板中建立个dbf数据库的odbc连接,从vb中用dao或者ado打开。
      

  6.   

    VB读取DBF数据库设置98:http://soft.qhdedu.com/EDUSOFT/TEST.zip2000/me/xp: http://soft.qhdedu.com/EDUSOFT/TEST.zip
      

  7.   

    没有要求必须用2进制读取。但是不能用vb中的数据库功能。
    因为这是数据库课上的一道课程设计题。
    就是用vb的基本语句来实现对dbf文件中的数据操作
    完成SQL语句create tabel和alter table的功能。即用vb来解释create 和alter命令。
    我现在的困难是不知该怎么访问dbf文件中的数据。
    因为不能用vb中的数据库功能,所以只能通过dbf文件结构来获取数据。
      

  8.   

    这个可以用BASIC中的对随机文件操作语句就很容易实现,先用随机文件方法打开数据库文件,取出8、9字节记录的数据文件起始位置,减去文件头长度剩下的数除以32 可以得到有多少个字段,然后得到每个字段的类型,把数据库重新打开,二次打开要安装上次得到的每条记录长度来打开。
    这样可以实现快速读取一条记录。
      我以前做了一个vb类 用来实现打开foxpro的数据库
    这个实现是不难的详细信息请通过MSN或者QQ联系我
    海梅网络
    http;//fzwang.com
    MSN:[email protected]
    QQ:56447239