回 帖 发 新 帖 刷新版面

主题:如何解决数据库备注文件的损坏

各位大侠:我在单位用vf编个小程序,由于经常突然断电,频繁的造成数据库备注文件损坏,请问各位大侠是否可以用编程的方式自动的解决这个问题

回复列表 (共2个回复)

沙发

(从中创梦网复制,我没试过)
                        如何修复被破坏的Foxpro数据库


   目 前 在 我 国, 有 相 当 一 部 分 正 在 运 行 应 用 程 序 是 用Foxpro 编 写 的, 由 于 突 然 断 电、 程 序 非 法 关 闭 等 原 因, 经 常 会 导 致Foxpro 数 据 库.DBF 文 件 被 破 坏, 如 果 数 据 库 被 破 坏 了, 用Foxpro 打 开 数 据 库.DBF 时, 会 出 现"not a table/dbf" 错 误 提 示, 导 致 无 法 用Foxpro 打 开。
   首 先 介 绍 一 下Foxpro 数 据 库.DBF 的 文 件 结 构:

   Foxpro 数 据 库*.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, 启 动Foxpro, 发 现 被 破 坏 的 数 据 库 可 以 打 开 使 用 了。
   由 于 许 多 操 作 者 并 不 一 定 熟 悉 如 何 使 ? tools, 因 此 我 建 议 大 家 可 以 用 比 较 熟 悉 的Excel 程 序 根 据 下 面 的 步 骤 来 进 行 数 据 库 的 恢 复。
二、 用Excel 进 行 恢 复。
启 动Excel, 选 择" 打 开" 按 钮, 出 现 打 开 对 话 框, 在 打 开 文 件 类 型 中 选 择Dbase/Foxpro(*.DBF) 文 件 类 型, 再 选 中 被 破 坏 的 数 据 库 打 开, 这 时 不 要 做 更 改, 只 选 择" 保 存" 按 钮, 会 出 现" 另 存 为" 对 话 框, 仍 选 择 以 原 来 文 件 名 保 存, 会 提 示" 文 件 已 经 存 在, 是 否 替 换 已 有 文 件 ?", 选 择" 是"。

然 后 选 择" 文 件" 菜 单 上 的" 关 闭", 会 出 现 提 示" 数 据 库 文 件 不 是Excel 格 式, 要 保 留 修 改 吗 ?
要 保 存 为Excel 格 式, 单 击 是, 然 后 在 保 存 类 型 下 拉 列 表 框 选Excel 工 作 簿;

要 用 现 有 格 式 保 存 并 替 换 原 来 的 文 件, 单 击 是, 然 后 单 击 保 存;

要 在 关 闭 文 件 时 维 持 现 有 格 式 并 不 作 保 存, 单 击 否。"
   由 于 我 们 并 没 有 对 数 据 库 的 记 录 进 行 改 动, 只 是 为 了 恢 复 数 据 库, 所 以 选 择 最 后 一 项" 在 关 闭 文 件 时 维 持 现 有 格 式 并 不 作 保 存", 因 此 单 击" 否", 退 出Excel。
启 动Foxpro, 再 次 打 开 数 据 库 文 件, 发 现 数 据 库 文 件 已 可 以 被 打 开 了, 但 是 观 察 数 据 库 的 结 构, 会 发 现 数 据 库 结 构 中 的 索 引 不 见 了, 不 过 数 据 库 的 索 引 文 件 还 存 在。 我 们 只 需 要 给 数 据 库Add 索 引, 并 选 择 原 来 的 索 引 文 件Open 即 可。

添 加 索 引 文 件 后 退 出 数 据 库 结 构 设 置, 并 对 数 据 库 重 新 索 引 一 下, 就 可 以 继 续 使 用 原 来 被 破 坏 的 数 据 库 了。

板凳

(同上)
恢复丢失了的FPT文件


用户在进行vfp6.0数据库操作时,由于操作不慎,可能将含有备注型字段或通用型字段的某自由表的.fpt文件丢失,只保留了.dbf文件,由于.fpt文件是用于存放备注型字段或通用型字段数据的,自由表一旦丢失了.fpt文件,用户就不能打开该自由表,更谈不上对该自由表进行操作,能否打开此自由表,对表中其余字段的数据进行操作,是许多用户所关心的问题。本人在教学实践中找到了下述方法,可立即解决这个问题。
1.用create命令临时创建一个库文件,只需定义一个字段,且类型设为memo,不必输入任何记录,关闭文件后,再将其备注文件改名或复制成已丢失的备注文件,就可立即打开该自由表。
2.利用vfp6.0的低级文件操作直接修复丢失了的.fpt文件,为方便用户操作,作者用vfp6.0编写了一段通用程序,用户运行此程序修复自由表时,只要根据提示输入丢失了.fpt文件的自由表的表名(不带扩展名)即可。
程序清单如下:
accept 请输入丢失了.fpt文件的自由表的名称(不带扩展名): to namef
namef=allt(namef)+.fpt
hand=fcreate(namef)
abc=repl(chr(0),3)+chr(8)+repl(chr(0),3)+@+repl(chr(0),504)
=fwrite(hand,abc)
=fclose(hand)
return
以上方法已在vfp5.0、vfp6.0上通过,在foxprow中也同样适用。



我来回复

您尚未登录,请登录后再回复。点此登录或注册