建好且设置好索引就行了
batchmove发布时需一个专用的.dll而令人厌

解决方案 »

  1.   

    当创建一个DBF表时,如果使用了MDX格式的索引文件,那么DBF表的表头中的某个字节就自动被设置了一个标志,当下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX文件,当相应的MDX文件不存在时,错误就产生了。知道了问题产生的原因,解决方案也就有了:我们只需将那个标志字节(其实就是第28个字节)设为零就行了。下面为示范代码
    unit Fixit;interfaceuses SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,
    Controls,Forms,Dialogs,StdCtrls,DB,DBTables,Grids,DBGrids;type
    TForm1=class(TForm)
    Table1:TTable;
    Button1:TButton;
    procedureButton1Click(Sender:TObject);
    private
    {Privatedeclarations}
    public
    {Publicdeclarations}
    end;var
    Form1:TForm1;implementation{$R*.DFM}const
    TheTableDir='c:\demo\';
    TheTableName='animals.dbf';
    //这是Delphi4/5自带的一个数据表,在..\Borland\Delphi5\Borland Shared\Data下,将它拷贝到Demo别名下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;procedureTForm1.Button1Click(Sender:TObject);
    //此procedure将试图打开一个表,如果相应的.MDX文件不存在将对表文件进行处理并尝试再次打开
    begin
    try
    //为表设置路径
    Table1.DatabaseName:=TheTableDir;
    //设置表的名字
    Table1.TableName:=TheTableName;
    //尝试打开表
    Table1.Open;
    except
    on E:EDBEngineError do
    //如果MDX文件未发现,将返回以下错误信息
    if Pos('Indexdoesnotexist.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.