修复因断电而损坏的 DBF 文件






1.67/5 (3投票s)
2007年8月21日

55840

2020
修复因任何原因损坏的 DBF 文件。

引言
修复因任何原因损坏的 DBF 文件,例如电源故障或电脑异常关机。
背景
通常,当电源故障时,并且 DBF 文件正在使用中,DBF 文件就会损坏,当你尝试打开文件时,会显示“不是数据库文件”的消息。
使用代码
在开始之前,将 OpenFileDialog 组件和 Activex Data Component 引用添加到你的项目中。并在窗体级别分配以下局部变量。
Dim byteArray As Variant Dim dblNoOfRecords As Double Dim dblHeaderLength As Double Dim dblRecordLength As Double Dim dblActualRecords As Double
在 OpenDialog 的 Open 点击事件中编写以下代码。代码将首先检查 DBF 文件是否损坏。如果损坏,则“修复 DBF”按钮将设置为 True。否则,屏幕上将显示“数据库没有错误”消息。
Private Sub cmdOpen_Click() DialogBox.DialogTitle = "Select DBF File" DialogBox.Filter = "DBF Files|*.dbf" DialogBox.DefaultExt = "dbf" DialogBox.ShowOpen If Trim(DialogBox.FileName) <> "" Then txtFileName.Text = DialogBox.FileName Dim objStream As New ADODB.Stream objStream.Type = adTypeBinary objStream.Open objStream.LoadFromFile Trim(DialogBox.FileName) byteArray = objStream.Read() dblNoOfRecords = byteArray(4) + byteArray(5) * 256 + byteArray(6) * 256 ^ 2 + byteArray(7) * 256 ^ 3 dblHeaderLength = byteArray(8) + byteArray(9) * 256 dblRecordLength = byteArray(10) + byteArray(11) * 256 dblActualRecords = Int((objStream.Size - dblHeaderLength) / dblRecordLength) If dblNoOfRecords > dblActualRecords Then cmdRepair.Visible = True Label2.Caption = "Error Found... Click on Repair Database" Else 'cmdRepair.Enabled = False 'cmdRepair.Caption = "No Error in Database" Label2.Caption = "No Error in Database" End If Set objStream = Nothing End If 'showerror: ' MsgBox "Error Description : " & Err.Description & Chr(13) & _ ' "Error Number : " & Err.Number End Sub
将以下代码复制到“修复”点击事件中。
Private Sub cmdRepair_Click() Dim objStream As New ADODB.Stream objStream.Type = adTypeBinary objStream.Open byteArray(4) = dblActualRecords Mod 256 byteArray(5) = Int(dblActualRecords / 256) Mod 256 byteArray(6) = Int(dblActualRecords / 256 ^ 2) Mod 256 byteArray(7) = Int(dblActualRecords / 256 ^ 3) Mod 256 objStream.Write byteArray objStream.SaveToFile Trim(DialogBox.FileName), adSaveCreateOverWrite objStream.Close cmdRepair.Visible = False Set objStream = Nothing Label2.Caption = "Repair Succesfully Completed" End Sub
摘要
一个非常有用的工具,可以在任何时候恢复你的数据。
关于 Bhaskar Shetty
计算机应用学士 (BCA),拥有超过 8 年的软件开发/分析/实施经验。