社区
VFP
帖子详情
打开一个.dbc文件,系统显示该数据库is not a database,怎么办,急求!!!
qianyi19730513
2005-12-08 04:19:52
如题
...全文
2798
2
打赏
收藏
打开一个.dbc文件,系统显示该数据库is not a database,怎么办,急求!!!
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
十豆三
2005-12-08
打赏
举报
回复
恢复无法打开的数据库文件(*.dbc)
-----方法一:
执行
VALIDATE DATABASE RECOVER
命令看看有什么效果,语法如下:
*---------------------------------
保证当前数据库中表和索引位置的正确性。
Validate Database [RECOVER] [NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]
参数
RECOVER
显示一个对话框,该对话框允许您定位表和索引,这些表和索引不在被检查的数据库中。必须在命令窗口中发出 Validate Database RECOVER 命令,在程序中发布该命令会产生错误信息。
NOCONSOLE
不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出错误信息。
TO PRINTER [PROMPT]
将 VALIDATE DATABASE 命令的错误信息定向输出到打印机。
PROMPT 在打印前显示“打印”对话框,该关键字应紧跟在 TO PRINTER 之后。
TO FILE FileName
将错误信息定向输出到由 FileName 参数指定的文件,如果该文件已经存在,并且 SET SAFETY 值为 ON,系统会询问是否要覆盖该文件。
备注
VALIDATE DATABASE 命令确保数据库包含的表和索引处于正确位置,确保数据库中的表包含正确的字段,以及确定数据库中索引标识是否存在。
VALIDATE DATABASE 命令在当前数据库上操作。在发布 OPEN DATABASE 命令打开此数据库时,必须包含 EXCLUSIVE 关键字,以独占方式打开。
示例
下面的示例打开 testdata 数据库并使用 VALIDATE DATABASE 命令,以确定表和索引的位置在数据库中是正确的。
CLOSE DATABASES
SET PATH TO (HOME(2) + 'Data\') && 设置数据库路径
OPEN DATABASE testdata EXCLUSIVE && 打开 testdata 数据库
Validate Database
*------------------------------
如果还是不行,
就只好:
1、删除dbc文件
2、去掉所有dbf文件对数据库的引用
3、再新建一个dbc
4、然后加入所有dbf文件
------方法二:
在使用VFP数据库软件时,有时会发生数据库文件无法打开的错误,如:(1) not a database file(不是数据库文件) 。(2) memo file is missing/invalid(备注文件丢失/无效)等。若无法打开的数据库文件不能恢复,将给用户带来损失。那么如何恢复无法打开的数据库文件呢?首先须清楚数据库文件的结构。VFP中的数据库文件由文件描述部分和文件的数据内容两部分组成。文件的描述部分在文件前部,描述部分结束后是文件中存储的数据记录。文件描述又分成两部分:文件的整体结构的描述和每个字段的描述。整体结构描述由文件的第一个字节开始,共需32个字节。其中:
第1字节:备注文件标志位;
第2~4字节:文件的最后修改日期(年,月,日);
第5~8字节:文件记录数,低位在前高位在后;
第9~10字节:数据计录内容存储的开始位置,即字段描述结束后的下一个字节位置,低位在前高位在后;
第11~12字节:记录长度(全部字段长之和),低位在前高位在后;
第29字节:组合索引文件存在标记。
从第33个字节开始,每32个字节描述一个字段。
第1字节为“f5”表示数据库文件应有备注文件,若无备注文件欲打开该数据库文件就会出现本文开头的错误信息(2),此时只须将“f5”改成“03”即可(用pctool),“03”表示数据库文件无备注文件。
第29字节为“01”,表示数据库文件打开的同时打开组合索引文件。若无组合索引文件,也会出现错误提示信息,将“01”改成“00”即可,“00”表示数据库文件无组合索引文件。
欲打开数据库文件,屏幕报告“not a database file”(不是数据库文件)错误,是由于第5~8字节表示的文件记录数大于数据库文件实际记录数(若小于等于数据库文件实际记录数则不会报告错误),此时恢复该数据库文件只要获得文件的实际记录数,用手工方法修改文件的第5~8字节。数据库文件实际记录数可以通过下面的公式计算:
记录数=(文件长度-文件描述部分长度-文件结束标志长度)/记录长度式中,文件长度可通过“dir”命令获得;
文件描述部分长度=(第10字节)10 *256+(第9字节)10 ;
文件结束标志长度=1;
记录长度=(第12字节)10 *256+(第11字节)10;
若是数据库文件上述公式一定能整除,由公式计算出的记录数再换算成16进制填入文件的第5~8字节,注意低位在前高位在后。
根据上述过程笔者用c语言编写了恢复该数据库文件的程序modi.cpp(该程序在bc31 for dos下编译通过):
#include
#include
#include
int main(int argc,char *argv[])
{
file *fp;
unsigned int c[4],i;
long int total,records;
if(argc!=2){
printf("no file name!\n");
exit(1);
}
if( (fp=fopen(argv[1],"r+b"))==null){
printf("not find %s!\n",argv[1]);
exit(1);
}
total=filelength(fileno(fp));//获得文件长度
rewind(fp);
i=fgetc(fp); //读取第1个字节的值
if (i!=0xf3&&i!=0x03){
fseek(fp,-1l,1);
fputc(0x03,fp); //第1个字节的值若不为“f3”或“03”
} //则强迫为“03”
rewind(fp);
fseek(fp,8l,1); //指针指向第9字节
c[0]=fgetc(fp); //读取第9~12字节的值
c[1]=fgetc(fp);
c[2]=fgetc(fp);
c[3]=fgetc(fp);
records=(total-c[1]*256+c[0]-1)/(c[2]+c[3]*256);//计算记录数
c[0]=records%256; //c[0]~c[3]计算第5~8字节的值
c[1]=(records-c[3]*256*256*256-c[2]*256*256)/256;
c[2]=(records-c[3]*256*256*256)/65536;
c[3]=records/256/256/256;
fseek(fp,-8l,1); //指针指向第5字节
fputc(c[0],fp); //将c[0]~c[3]写入第5~8字节
fputc(c[1],fp);
fputc(c[2],fp);
fputc(c[3],fp);
printf("modify the database file successfully!\n");
fclose(fp);
return 1;
--------方法三:
将所有的dbf,cdx,dbc文件都删除了。然后用它们的备分文件件,bak,dcx,bdc分别改名,然后,在项目里打开数据库,将里面的所有表移除,删除数据库,再新新建数据库,再将表加入。
十豆三
2005-12-08
打赏
举报
回复
恢复无法打开的数据库文件(*.dbc)
-----方法一:
执行
VALIDATE DATABASE RECOVER
命令看看有什么效果,语法如下:
*---------------------------------
保证当前数据库中表和索引位置的正确性。
Validate Database [RECOVER] [NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE FileName]
参数
RECOVER
显示一个对话框,该对话框允许您定位表和索引,这些表和索引不在被检查的数据库中。必须在命令窗口中发出 Validate Database RECOVER 命令,在程序中发布该命令会产生错误信息。
NOCONSOLE
不向 Visual FoxPro 主窗口或活动的用户自定义窗口输出错误信息。
TO PRINTER [PROMPT]
将 VALIDATE DATABASE 命令的错误信息定向输出到打印机。
PROMPT 在打印前显示“打印”对话框,该关键字应紧跟在 TO PRINTER 之后。
TO FILE FileName
将错误信息定向输出到由 FileName 参数指定的文件,如果该文件已经存在,并且 SET SAFETY 值为 ON,系统会询问是否要覆盖该文件。
备注
VALIDATE DATABASE 命令确保数据库包含的表和索引处于正确位置,确保数据库中的表包含正确的字段,以及确定数据库中索引标识是否存在。
VALIDATE DATABASE 命令在当前数据库上操作。在发布 OPEN DATABASE 命令打开此数据库时,必须包含 EXCLUSIVE 关键字,以独占方式打开。
示例
下面的示例打开 testdata 数据库并使用 VALIDATE DATABASE 命令,以确定表和索引的位置在数据库中是正确的。
CLOSE DATABASES
SET PATH TO (HOME(2) + 'Data\') && 设置数据库路径
OPEN DATABASE testdata EXCLUSIVE && 打开 testdata 数据库
Validate Database
*------------------------------
如果还是不行,
就只好:
1、删除dbc文件
2、去掉所有dbf文件对数据库的引用
3、再新建一个dbc
4、然后加入所有dbf文件
------方法二:
在使用VFP数据库软件时,有时会发生数据库文件无法打开的错误,如:(1) not a database file(不是数据库文件) 。(2) memo file is missing/invalid(备注文件丢失/无效)等。若无法打开的数据库文件不能恢复,将给用户带来损失。那么如何恢复无法打开的数据库文件呢?首先须清楚数据库文件的结构。VFP中的数据库文件由文件描述部分和文件的数据内容两部分组成。文件的描述部分在文件前部,描述部分结束后是文件中存储的数据记录。文件描述又分成两部分:文件的整体结构的描述和每个字段的描述。整体结构描述由文件的第一个字节开始,共需32个字节。其中:
第1字节:备注文件标志位;
第2~4字节:文件的最后修改日期(年,月,日);
第5~8字节:文件记录数,低位在前高位在后;
第9~10字节:数据计录内容存储的开始位置,即字段描述结束后的下一个字节位置,低位在前高位在后;
第11~12字节:记录长度(全部字段长之和),低位在前高位在后;
第29字节:组合索引文件存在标记。
从第33个字节开始,每32个字节描述一个字段。
第1字节为“f5”表示数据库文件应有备注文件,若无备注文件欲打开该数据库文件就会出现本文开头的错误信息(2),此时只须将“f5”改成“03”即可(用pctool),“03”表示数据库文件无备注文件。
第29字节为“01”,表示数据库文件打开的同时打开组合索引文件。若无组合索引文件,也会出现错误提示信息,将“01”改成“00”即可,“00”表示数据库文件无组合索引文件。
欲打开数据库文件,屏幕报告“not a database file”(不是数据库文件)错误,是由于第5~8字节表示的文件记录数大于数据库文件实际记录数(若小于等于数据库文件实际记录数则不会报告错误),此时恢复该数据库文件只要获得文件的实际记录数,用手工方法修改文件的第5~8字节。数据库文件实际记录数可以通过下面的公式计算:
记录数=(文件长度-文件描述部分长度-文件结束标志长度)/记录长度式中,文件长度可通过“dir”命令获得;
文件描述部分长度=(第10字节)10 *256+(第9字节)10 ;
文件结束标志长度=1;
记录长度=(第12字节)10 *256+(第11字节)10;
若是数据库文件上述公式一定能整除,由公式计算出的记录数再换算成16进制填入文件的第5~8字节,注意低位在前高位在后。
根据上述过程笔者用c语言编写了恢复该数据库文件的程序modi.cpp(该程序在bc31 for dos下编译通过):
#include
#include
#include
int main(int argc,char *argv[])
{
file *fp;
unsigned int c[4],i;
long int total,records;
if(argc!=2){
printf("no file name!\n");
exit(1);
}
if( (fp=fopen(argv[1],"r+b"))==null){
printf("not find %s!\n",argv[1]);
exit(1);
}
total=filelength(fileno(fp));//获得文件长度
rewind(fp);
i=fgetc(fp); //读取第1个字节的值
if (i!=0xf3&&i!=0x03){
fseek(fp,-1l,1);
fputc(0x03,fp); //第1个字节的值若不为“f3”或“03”
} //则强迫为“03”
rewind(fp);
fseek(fp,8l,1); //指针指向第9字节
c[0]=fgetc(fp); //读取第9~12字节的值
c[1]=fgetc(fp);
c[2]=fgetc(fp);
c[3]=fgetc(fp);
records=(total-c[1]*256+c[0]-1)/(c[2]+c[3]*256);//计算记录数
c[0]=records%256; //c[0]~c[3]计算第5~8字节的值
c[1]=(records-c[3]*256*256*256-c[2]*256*256)/256;
c[2]=(records-c[3]*256*256*256)/65536;
c[3]=records/256/256/256;
fseek(fp,-8l,1); //指针指向第5字节
fputc(c[0],fp); //将c[0]~c[3]写入第5~8字节
fputc(c[1],fp);
fputc(c[2],fp);
fputc(c[3],fp);
printf("modify the database file successfully!\n");
fclose(fp);
return 1;
--------方法三:
将所有的dbf,cdx,dbc文件都删除了。然后用它们的备分文件件,bak,dcx,bdc分别改名,然后,在项目里打开数据库,将里面的所有表移除,删除数据库,再新新建数据库,再将表加入。
深入理解CAN
数据库
文件
(
DBC
文件
)
DBC
文件
通常具有“.
dbc
”扩展名,它包含了一系列的条目,每个条目都定义了CAN总线上的
一个
特定消息。
DBC
文件
是理解和操作CAN网络的关键工具。通过精确定义CAN消息和信号,
DBC
文件
确保了数据的正确解析和有效通信。...
安装好
数据库
提示计算机无法启动,
DBC
数据库
异常无法启动!!!HERODB配置错误怎么解决呢?...
今天站长在测试
一个
GOM引擎的服务端,
打开
GameOfMir引擎控制器.exe就提示:
DBC
数据库
异常无法启动的错误提示,最后解决了,把方法通过图文的方式分享出来希望可以帮助到更多的人,如果你在架设传奇的时候,正好也...
基于Python的对 汽车电子ECU的通信矩阵
数据库
文件
(.
dbc
)的解析
基于Python的对 汽车电子ECU的通信矩阵
数据库
文件
(.
dbc
)的解析
matlab的
dbc
解析,解析.
DBC
文件
, 读懂CAN通信矩阵,实现车内信号仿真
通常我们拿到某个ECU的通信矩阵
数据库
文件
,.
dbc
后缀名的
文件
。 直接使用CANdb++ Editor
打开
,可以很直观的读懂信号矩阵的信息,例如下图:现在要把上图呈现的信号从.
dbc
文件
中解析出来,供实现自动化仿真总线信号...
解析.
DBC
文件
, 读懂CAN通信矩阵,实现车内信号仿真
通常我们拿到某个ECU的通信矩阵
数据库
文件
,.
dbc
后缀名的
文件
。 直接使用CANdb++ Editor
打开
,可以很直观的读懂信号矩阵的信息,例如下图: 现在要把上图呈现的信号从.
dbc
文件
中解析出来,供实现自动化仿真总线...
VFP
2,749
社区成员
29,138
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章