?? 如何打開一個dbf文件而避免“mdx文件未發現”之錯.txt
字號:
如何打開一個DBF文件而避免“MDX文件未發現”之錯誤 (2000年11月21日)
本站更新 分類: 作者:a 推薦: 閱讀次數:414
(http://www.codesky.net)
--------------------------------------------------------------------------------
為 什 么 我 打 開 一 個 DBF 表 的 時 候 會 得 到 “ Index not found.. ” 這 樣 的 錯 誤 ?
答 : 當 你 創 建 一 個 DBF 表 時 , 如 果 使 用 了 MDX 格 式 的 索 引 文 件 ,
那 么 DBF 表 的 表 頭 中 的 某 個 字 節 就 自 動 被 設 置 了 一 個 標 志 , 當 你 下 次 試
圖 重 新 打 開 這 個 DBF 表 的 時 候 , 數 據 引 擎 會 自 動 識 別 這 個 標 志 , 如 果 此
標 志 為 真 , 則 數 據 引 擎 將 試 圖 打 開 相 應 的 MDX 文 件 , 當 相 應 的 MDX 文 件 不
存 在 時 , 錯 誤 就 產 生 了 。 知 道 了 問 題 產 生 的 原 因 , 解 決 方 案 也 就 有 了 :
我 們 只 需 將 那 個 標 志 字 節 ( 其 實 就 是 第 28 個 字 節 ) 設 為 零 就 行 了 。 下
面 為 示 范 代 碼 :
unit Fixit;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
Table1: TTable;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const
TheTableDir = 'c:\temp\';
TheTableName = 'animals.dbf';
procedure RemoveMDXByte(dbFile: String);
{ 這 個 procedure 的 參 數 是 一 個 文 件 名 , 它 將 對 這 個 文 件 的 文 件 頭 }
{ 進 行 處 理 , 以 確 保 它 不 在 需 要 MDX }
const
Value: Byte = 0;
var
F: File of byte;
begin
AssignFile(F, dbFile);
Reset(F);
Seek(F, 28);
Write(F, Value);
CloseFile(F);
end;
procedure TForm1.Button1Click(Sender: TObject);
{ 此 procedure 將 試 圖 打 開 一 個 表 , 如 果 相 應 的 .MDX 文 件 不 存 在 }
{ 將 對 表 文 件 進 行 處 理 并 嘗 試 再 次 打 開 }
begin
try
{ 為 表 設 置 路 徑 }
Table1.DatabaseName := TheTableDir;
{ 設 置 表 的 名 字 }
Table1.TableName := TheTableName;
{ 嘗 試 打 開 表 }
Table1.Open;
except
on E:EDBEngineError do
{ 如 果 MDX 文 件 未 發 現 , 將 返 回 以 下 錯 誤 信 息 }
if Pos('Index does not exist. File', E.Message)>0 then begin
{ 詢 問 用 戶 是 否 繼 續 }
MessageDlg('MDX file not found. Attempting to open
without index.', mtWarning, [mbOk], 0);
{ 從 表 頭 中 移 去 相 應 標 志 }
RemoveMDXByte(TheTableDir + TheTableName);
{ 再 次 向 Button1 發 送 被 按 下 的 消 息 , 本 procedure 再 次 被 執 行 }
PostMessage(Button1.Handle, cn_Command, bn_Clicked, 0);
end;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -