急!!如何解决dbc数据库文件破坏问题?

fengyeng 2004-11-10 03:42:56
我用的是VPF6.0,打开数据dbc文件时就出现,索引与表不匹配,请删除索引文件重新建立!
我将所有的索引都删了,终于可以打开dbc文件了,可是在项目管理器中一看数据库内的表名有的是空白的,可是那个小加号还在,一点那个的空白的数据表,就出现数据库错误的对话框,关也关不掉,只有ctrl+alt+del了。

我现在正在痛苦中。。。请高手指点。
分不够再加。
...全文
652 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyeng 2004-11-12
  • 打赏
  • 举报
回复
谢谢大家的帮助我来结贴了!
十豆三 2004-11-12
  • 打赏
  • 举报
回复
解决就好!

你和版主的方法我会整理到我的解决方法中,做为以后朋友类似问题用上!
fengyeng 2004-11-12
  • 打赏
  • 举报
回复
谢谢各位!问题已经解决!
我的解决方法是,将所有的dbf,cdx,dbc文件都删除了。然后用它们的备分件,bak,dcx,bdc分别改名,然后,在项目里打开数据库,将里面的所有表移除,删除数据库,再新新建数据库,再将表加入,有两表加不进来,其它的都正常了。
上面的方法:
apple_8180(十豆三)
我用过没有解决!
其它的我会马上试!
改日结贴,谢谢大家帮助!
LAIYANGPJ 2004-11-10
  • 打赏
  • 举报
回复
你把所有的文件COPY到另一个路径下,把当前文件夹文件清空后,再把你想要的数据库及表COPY到当前文件夹中,注意不要COPY项目文件(.PJX)试一下.
JohnShen 2004-11-10
  • 打赏
  • 举报
回复
执行
VALIDATE DATABASE RECOVER
命令看看有什么效果,如果还是不行,
就只好:
1、删除dbc文件
2、去掉所有dbf文件对数据库的引用
3、再新建一个dbc
4、然后加入所有dbf文件
十豆三 2004-11-10
  • 打赏
  • 举报
回复
请参考:
http://community.csdn.net/Expert/topic/3375/3375085.xml?temp=.7830927
十豆三 2004-11-10
  • 打赏
  • 举报
回复
上面的
B:恢复无法打开的数据库文件(*.dbc)是针对DBC数据库的
fengyeng 2004-11-10
  • 打赏
  • 举报
回复
楼上:我问是的dbc数据库
不是dbf表!

谢谢!
十豆三 2004-11-10
  • 打赏
  • 举报
回复
请参考:
http://community.csdn.net/Expert/topic/3311/3311295.xml?temp=3.721255E-02
十豆三 2004-11-10
  • 打赏
  • 举报
回复
A:如何修复被破坏的VFP表(*.dbf)

----目前在我国,有相当一部分正在运行应用程序是用VFP 编写的,由于突然断电、程序非法关闭等原因,经常会导致VFP数据库.DBF文件被破坏,如果数据库被破坏了,用VFP打开数据库.DBF时,会出现"notatable/dbf"错误提示,导致无法用VFP打开。
----首先介绍一下VFP数据库.DBF的文件结构:
----VFP数据库*.DBF的文件结构由头记录和数据记录组成,头记录定义该DBF的结构并包含与该库相关的其它信息。头记录由文件位置0字节开始。
----数据库头部几个关键字节含义如下:(注:库文件中存储整数时低位字节在前)
----字节偏移说明
----0 库文件的版本类型
----1-3 最近更新的日期(YYMMDD)
----4-7 库文件中记录的个数
----8-9 第一条记录的起始位置
----10-11 一条记录的长度(包括删除标记)
----其它字节的具体描述不在此赘述,可以参考有关部门书籍或者程序开头注释部分。
----在实际工作中发现,许多情况下数据库错误都是由于记录个数比实际记录个数大1个,以至于数据库无法用打开。
----主要通过以下两种办法来对数据库进行修复。

一、用Pctools、NU的Diskedit等工具软件进行恢复:

----运行Pctools,选中无法打开的数据库,按E文件进入编辑功能,按F1切换显示模式。
----按F3进行编辑,将开始的第5个字节值减1,按F5存储,然后退出Pctools,启动VFP, 发现被破坏的数据库可以打开使用了。
----由于许多操作者并不一定熟悉如何使用Pctools,因此我建议大家可以用比较熟悉的Excel程序根据下面的步骤来进行数据库的恢复。

二、用Excel进行恢复。

----启动Excel,选择"打开"按钮,出现打开对话框,在打开文件类型中选择Dbase/VFP(*.DBF)文件类型,再选中被破坏的数据库打开,这时不要做更改,只选择"保存"按钮,会出现"另存为"对话框,仍选择以原来文件名保存,会提示"文件已经存在,是否替换已有文件?",选择"是"。
----然后选择"文件"菜单上的"关闭",会出现提示"数据库文件不是Excel格式,要保留修改吗?
----要保存为Excel格式,单击'是',然后在'保存类型'下拉列表框选'Excel工作簿';
----要用现有格式保存并替换原来的文件,单击'是',然后单击'保存';
----要在关闭文件时维持现有格式并不作保存,单击'否'。"
----由于我们并没有对数据库的记录进行改动,只是为了恢复数据库,所以选择最后一项"在关闭文件时维持现有格式并不作保存",因此单击"否",退出Excel。
----启动VFP,再次打开数据库文件,发现数据库文件已可以被打开了,但是观察数据库的结构,会发现数据库结构中的索引不见了,不过数据库的索引文件还存在。我们只需要给数据库Add索引,并选择原来的索引文件Open即可。
----添加索引文件后退出数据库结构设置,并对数据库重新索引一下,就可以继续使用原 来被破坏的数据库了。

三、如果是VFP6的DBF,那么用VFP8打开试一试。如果是VFP8的DBF,那么用VFP6打开试一试


B:恢复无法打开的数据库文件(*.dbc)

在使用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;
vf6.0,要考二级没系统的下哈 Microsoft Visual FoxPro 6.0 for Windows 的常见问题 这些是有关 Microsoft Visual FoxPro 最常见的问题。在您求助 Microsoft 产品支持服务之前,请先查阅这张列表。 若想打印这些附注,请从“文件”菜单中选择“打印”命令。此文档分为以下四部分: --------------------------------------------------------------------- 部分 1. 技术支持与市场 部分 2. Visual FoxPro 6.0 新增功能 部分 3. 从其他版本的 FoxPro 和 Visual FoxPro 中移植 部分 4. Visual FoxPro 常见问题 --------------------------------------------------------------------- 部分 1. 技术支持与市场 问题 1-1: 从何处可以获得产品的更新版本? 答案: 在 Visual FoxPro 的 Web 站点上即可获得产品的更新信息,其中包括有关 Service Pack 和更新的示例、向导及其他代码的信息,该站点的网址为: www.microsoft.com/vfoxpro 请定期查看该网站,以便下载产品的最新版本。 问题 1-2: 从何处可以得到有关 Visual FoxPro 的详细资料? 答案: 通过 Microsoft Visual FoxPro Web 站点是随时获得各种最新产品发布信息的最佳途径。在此站点上不仅有新的产品公告,而且还提供了产品的更新信息、技术文章、白皮书、专业开发人员设计的优秀示例、会议公告、以及与其他许多 FoxPro web 站点的各种链接。 问题 1-3: 如何获得技术支持,以及如何报告软件错误? 答案: Microsoft Visual FoxPro Web 站点已经链接到了多种联机支持选项,其中包括覆盖面广阔的有关所有产品 Microsoft Knowledge Base(Microsoft 知识库)。您还可以阅读一份有关常见问题的清单。除联机支持之外,还可以直接通过电话获得技术支持。“帮助”菜单中的选项可列出技术支持的电话号码。这些电话号码也可用于报告产品中的错误。 问题 1-4. 什么是 Knowledge Base?如何使用它? 答案: Knowledge Base 是内容广泛的论文集,覆盖了如何使用产品的各种特性、已知的软件错误及其解决方案或回避的方法、以及其他有助于使用各种 Microsoft 产品的有用信息。通过以下站点可访问整个 Knowledge Base: support.microsoft.com 问题 1-5: 是否会有 Visual FoxPro 6.0a? 答案: Microsoft 公司一向承诺为用户提供高质量的产品。如果确实需要,我们将提供 Visual FoxPro 6.0 的错误修订版。但是,修订版不会使用 6.0a 版的形式。Visual FoxPro 6.0 中任何错误的修正都将包含在 Visual Studio Service Pack 中。同时还会在 Visual FoxPro 的 www.microsoft.com/vfoxpro 或 Visual Studio 的www.microsoft.com/vstudio 的 Web 站点上发布修订公告。 问题 1-6: Microsoft 公司为应用程序的开发提供了一些优秀的解决方案。怎样才能知道应该向客户推荐和使用哪种产品? 答案: 在选择适用某项任务的产品时,需要考虑多方面的因素。Microsoft Visual FoxPro web 站点上有一份优秀的策略背景论文,它比较了 Visual FoxPro、Visual Basic、SQL Server 和 Access 等 Microsoft 产品之间的不同。 问题 1-7: 哪里可以找到 Visual FoxPro 的使用示例? 答案: Visual FoxPro 6.0 产品中带有丰富的示例,其中有一些是针对 6.0 版特有功能的新示例。与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的位置。 除了产品中所自带的示例外,Microsoft Visual FoxPro web 站点还将经常提供新的示例。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧