说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

怎样解决打开一个DBF表时的Index not found..错误-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
怎样解决打开一个DBF表时的Index not found..错误-Delphi资料

当 你 创 建 一 个 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.

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘