| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 178 人关注过本帖
标题:求各位大神,dbf文件打开时提示不是一张表
只看楼主 加入收藏
qq2045
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-11-7
结帖率:0
  已结贴   问题点数:20  回复次数:7   
求各位大神,dbf文件打开时提示不是一张表

求各位大神,用Visual FoxPro打开dbf文件打开时提示不是一张表,但是用第三软件(DBF Viewer 2000和DBF Reanimator)能打开是怎么回事
附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 打开 dbf 提示 软件 文件 
2019-11-07 09:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:197
帖 子:7858
专家分:19475
注 册:2012-2-5
  得分:5 
楼主用的VFP是什么版本
也可能DBF不是VFP创建的

坚守VFP最后的阵地
2019-11-07 12:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:215
帖 子:6779
专家分:30048
注 册:2014-5-20
  得分:5 
看表文件头是VFP的文件,可能是文件结构坏了或被修改。
手改取数看一下,不知有无数据丢失。

附件: 您没有浏览附件的权限,请 登录注册
2019-11-07 12:15
schtg
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:34
帖 子:784
专家分:1120
注 册:2012-2-29
  得分:5 
高!
2019-11-07 13:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:215
帖 子:6779
专家分:30048
注 册:2014-5-20
  得分:0 
表标记是0x01,还缺一个CDX的索引文件。
2019-11-07 15:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:215
帖 子:6779
专家分:30048
注 册:2014-5-20
  得分:0 
看了一下字段定义部份,从文件头偏移32--14623字节,每个字段占32字节,有456个字段了?
什么表这么强大





[此贴子已经被作者于2019-11-7 16:41编辑过]

附件: 您没有浏览附件的权限,请 登录注册
2019-11-07 16:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:215
帖 子:6779
专家分:30048
注 册:2014-5-20
  得分:0 
字段大多,只好分开两个表。


CREATE CURSOR 字段定义表 (字段名 C(10), 类型 C(1), 偏移 I, 宽度 I, 小数位 I)
cDBF = FILETOSTR("B1.dbf")
n记录数 = CTOBIN(SUBSTR(cDBF,5,4),"RS4")
n头记录偏移量 = CTOBIN(SUBSTR(cDBF,9,2),"RS2")
n记录长度 = CTOBIN(SUBSTR(cDBF,11,2),"RS2")
i = 33
c字段定义 = SUBSTR(cDBF,i,32)
DO WHILE LEFT(c字段定义,1) != 0h0D
    INSERT INTO 字段定义表 VALUES (;   
        LEFT(c字段定义,AT(0h00,c字段定义)-1),;    &&字段名
        SUBSTR(c字段定义,12,1),;    && 数据类型
        CTOBIN(SUBSTR(c字段定义,13,4),"RS4"),;    &&记录中偏移量
        CTOBIN(SUBSTR(c字段定义,17,1),"RS1"),;    && 字段宽度
        CTOBIN(SUBSTR(c字段定义,18,1),"RS1"))    && 数字型、浮点型、双精度型字段的小数位
    IF !INLIST(类型,"N","C")
        REPLACE 类型 WITH "Q"    && 原文件描述的_NullFlag字段类型是0(零)?,现作Q类型处理
    ENDIF
    i = i + 32
    c字段定义 = SUBSTR(cDBF,i,32)
ENDDO
cB1_1 = ""
cB1_2 = ""
SCAN
    cField = "," + TRIM(字段名) + " " + 类型 + "("+TRANSFORM(宽度) + IIF(小数位>0,","+TRANSFORM(小数位),"") + ")"
    IF RECNO()<255
        cB1_1 = cB1_1 + cField
    ELSE
        cB1_2 = cB1_2 + cField
    ENDIF
ENDSCAN
IF !EMPTY(cB1_1)
    cB1_1 = "CREATE TABLE B1_1 (" + SUBSTR(cB1_1,2) + ")"
    EXECSCRIPT(cB1_1)
ENDIF
IF !EMPTY(cB1_2)
    cB1_2 = "CREATE TABLE B1_2 (" + SUBSTR(cB1_2,2) + ")"
    EXECSCRIPT(cB1_2)
ENDIF
SELECT 字段定义表
j = n头记录偏移量+1
FOR i=1 TO n记录数
    c记录 = SUBSTR(cDBF, j, n记录长度)
    IF EMPTY(c记录) OR LEN(c记录)<n记录长度
        EXIT
    ENDIF
    APPEND BLANK IN "B1_1"
    IF USED("B1_2")
        APPEND BLANK IN "B1_2"
    ENDIF
    SCAN
        v = SUBSTR(c记录, 偏移+1, 宽度)
        v = IIF(类型=="N", VAL(v), ALLTRIM(v))
        c字段名 = TRIM(字段名)
        IF RECNO()<255
            REPLACE (c字段名) WITH v IN "B1_1"
        ELSE
            REPLACE (c字段名) WITH v IN "B1_2"
        ENDIF
    ENDSCAN
    j = j + n记录长度
ENDFOR
SELECT B1_1
BROWSE
SELECT B1_2
BROWSE
CLOSE DATABASES ALL
附件: 您没有浏览附件的权限,请 登录注册
2019-11-08 17:33
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:29
帖 子:347
专家分:629
注 册:2014-4-9
  得分:5 
吹版历害了,连这低端的汇编都用上了。保存学习。
2019-11-11 08:36
快速回复:求各位大神,dbf文件打开时提示不是一张表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069899 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved