dbase的*.dbt的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 muyirenyan
  • 开始时间 开始时间
M

muyirenyan

Unregistered / Unconfirmed
GUEST, unregistred user!
哪位仁兄能告诉小弟dbase的*.dbt的数据怎么读出来呀?它存的是不是图形数据?给我的时间快到了
先谢谢了
 
哪位仁兄能告诉小弟dbase的*.dbt的数据怎么读出来呀?它存的是不是图形数据?给我的时间快到了
先谢谢了
 
我有个C描述的读取foxpro表的程序,没有delphi版的
大概思路是:先得到表的存储结构,比如说分为数据库说明区和数据记录区,而数据库说明区又包括数据库整体参数区和各字段的参数区,各有几字节。。。。
我也没试过,你可以去官方的资料中看能否找到这些资料,据说用Utredit打开表后也能找出这些规率
 
我有关于此问题的C和delphi的源代码,是我当前花300人民币买来的
 
plink仁兄,谢谢。
 
dbase的 .dbt文件是用来存 二进制(binary)和文本(memo)字段资料的
要读出来则需要知道你要读的是哪个字段,可以用一般的显示图和文本的控件来显示,
如果只有dbt则不知道要怎么读出,要和DBF文件一起才行.
 
这是用C读取foxpro表的的程序,参考一下吧

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXFIELDS 40

struct{
char name[10];
char type;
int wide;
int dec;
}f[MAXFIELDS];

void main(int argc,char *argv[])
{
char k,year,month,date,fname[12];
int i,j,n,recnum1,recnum2,reclen,fields;
long recnum,fheadlen;
FILE *fp;
if(argc > 2) exit(0);
if(argc == 1)
{
printf("/n/r请输入要浏览的数据库名(可不包括扩展名):");
scanf("%12s",fname);
getchar();

}
else strcpy(fname,argv[1]);
if(strchr(fname,46)==0) strcat(fname,".dbf");
if((fp = fopen(fname,"rb")) == NULL) exit(0);
getc(fp);
year = getc(fp);
month = getc(fp);
date = getc(fp);
recnum1 = getw(fp);
recnum2 = getw(fp);
recnum = recnum2*256+recnum1;
fheadlen = getw(fp);
reclen = getw(fp);
fseek(fp,32,0);
fields = (fheadlen - 33)/32;
if(fheadlen%32 == 1)/*FOXBASE库结构长度减1为32的倍数*/
printf("%s是FOXBASE数据库/n",fname);
else printf("%s是DBASEIII数据库/n",fname);
printf("最后修改日期:%d年%d月%d日/n",year,month,date);
printf("记录数:%ld/n库头长:%ld/n",recnum,fheadlen);
printf("记录长:%d/n字段数:%d/n",reclen,fields);
printf("/n以下是库结构,按回车键继续:");
getchar();
for(i = 1;i <= fields;i ++)
{
fread(&f.name,10,1,fp);/*字段名*/
fseek(fp,1,1);
fread(&f.type,1,1,fp);/*类型*/
fseek(fp,4,1);
fread(&f.wide,1,1,fp);/*宽度*/
fread(&f.dec,1,1,fp);/*小数位*/
fseek(fp,14,1);
printf("%s %c %d %d/n",f.name,f.type,f.wide,f.dec);
}
fseek(fp,fheadlen,0);
printf("/n以下是各记录的内容,按回车继续!");
getchar();
for(i = 1;i <= recnum;i ++)
{
printf("#%d:",i);
getc(fp);
for(j = 1;j <= fields;j++)
{
for(n = 0;n < f[j].wide;n++)
{
k = getc(fp);
printf("%c",k);
}
printf(" ");
}
printf("/n");

}
fclose(fp);
printf("按回车返回!");
getchar();
}
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
930
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部