用该dbf做一个odbc的数据源,然后用odbc jdbc桥来读数据。别说dbf,就是text也可以。

解决方案 »

  1.   

    读取excel,text,dbf我都用这种方法做过。不过你要注意的是,每一个dbf是看成一张表,而对于excel中,每一个sheet看成一张表
      

  2.   

    lhz_9712(晃晃悠悠) :
    能不能详细一点,最好给点源代码!
      

  3.   

    在pb里存储成dbase2就读不出来,dbase3就能读出来,这是怎么回事啊??
      

  4.   

    湘潭有个公司开发有DBF驱动,能够把DBF文件当作数据库中的一个表来使用的,啥公司,忘了,不过他们的开发包好像叫COM.HXTT....
      

  5.   

    这是C语言实现的读取DBF文件的方法#define MAXFIELD 255 /*字段的最大个数*/
    unsigned long recordnum;/*记录号*/
    unsigned long recordlen,structlen,filednum;/*记录长度,库结构长,字段数*/
    FILE *fp;struct
    {
    char name[50];/*字段名称*/
    char type;/*字段类型*/
    int length;/*字段长度*/
    int decim;/*小数位数*/
    }filed[MAXFIELD];union
    {
    long i;/*存整形字段*/
    double f;/*存实型字段*/
    char s[255];/*存字符型字段*/
    }f_value[MAXFIELD];void clear();/*设置屏幕为图形方式*/
    void get_head();/*读取数据库的结构信息*/
    void go();/*移动记录指针*/
    void duse();/*打开数据库*/
    void readdata();/*读取记录*/
    void dispdata();/*显示数据*/
    void closedata();/*关闭数据库*/#include <stdio.h>main()
    {
    char *filename;
    unsigned long i;
    *filename = "YXDM.dbf"; duse(filename); get_head(fp); for(i = 0;i++;i < recordnum)
    {
    dispdata(fp,i);
    }
    closedata(fp);
    }#include<graphics.h>void clear()
    {
    int graphdriver = DETECT;
    int graphmode;
    initgraph(&graphdriver,&graphmode,"");
    }void get_head(FILE *fp)
    {
    unsigned char ch[9];
    int i;
    fseek(fp,4,0);
    fgets(ch,9,fp);
    recordnum = ch[0] + 256 * ch[1] + 4096 * ch[2] + 65535 * ch[3];/*记录数*/
    recordlen = ch[6] + 256 * ch[7];/*记录长度*/
    structlen = ch[4] + 256 * ch[5];/*库说明的长度*/
    filednum = (structlen - 32 -1 ) / 32;/*字段的个数*/
    for(i = 0;i < filednum;i++)
    {
    fseek(fp,(i + 1) * 32,0);
    fgets(filed[i].name,11,fp);/*取得字段名称*/
    fseek(fp,(i + 1) * 32 + 11,0);
    filed[i].type = fgetc(fp);/*取字段类型*/
    fseek(fp,(i + 1) * 32 + 16,0);
    ch[0] = fgec(fp);
    filed[i].length = ch[0];/*取字段长度*/
    fseek(fp,(i + 1) * 32 + 17,0);
    fgets(ch,2,fp);
    filed[i].decim = ch[0];/*取小数位数*/
    }
    }void go(FILE *fp,unsigned long i)
    {
    if(fp == NULL)
    {
    printf("file not open\n");
    getch();
    return ;
    }
    fseek(fp,structlen + (i - 1) * recordlen,0);
    }
    void duse(char *filename)
    {
    if((fp = fopen(filename,"rwb")) == NULL)
    {
    printf("file can not open\n");
    getch();
    exit(1);
    }
    }void readdata(FILE *fp,unsigned long rnum)
    {
    int j;
    unsigned int lim;
    char ch;
    double ftemp;
    if(rnum > recordnum)
    {
    printf("parameter error\n");
    getch();
    return ;
    }
    go(fp,rnum);
    ch = fgetc(fp);
    if(ch == '*')
    {
    printf("record had been delete");
    return ;
    }
    j = 0;
    lim = filednum;
    while(j < lim)
    {
    fgets(f_value[j].s,filed[j].length + 1,fp);
    if(filed[j].type == 'N')
    {
    ftemp = atof(f_value[j].s);
    if(filed[j].decim > 0)
    {
    f_value[j].f = ftemp;
    }
    else
    {
    f_value[j].i = ftemp;
    }
    }
    j++;
    }
    }void dispdata(FILE *fp,unsigned long rnum)
    {
    int j;
    unsigned int lim;
    lim = filednum;
    readdata(fp,rnum);
    clear();
    j = 0;
    while(j < lim)
    {
    printf("%-20s:",filed[j].name);
    if(filed[j].type == 'N')
    {
    if(filed[j].decim > 0)
    printf("%f\n",f_value[j].f);
    else
    printf("%d\n",f_value[j].i);
    }
    else
    printf("%s\n",f_value[j].s);
    j++;
    }
    void closedata(FILE *fp)
    {
    if(fclose(fp))
    {
    printf("database close error\n");
    exit(1)
    }
    }
    }
      

  6.   

    dbf文件好象有专门的格式,前面有人说用ODBC不一定行的,因为它不是一个Database,所以不一定可以生成一个数据源,你先找到他的格式,然后以读文件的方式读,就可以把数据取出来。以前有一个这样的贴子,你找一下,可以找到的。