如题!

解决方案 »

  1.   

    在Delphi程序中真正删除记录, 需要调用BDE函数,函数名为DbiPackTable,函数原型为:functionDbiPackTable(hDb:hDBIDb;hCursor :hDBICur;pszTableName:PChar;pszDriverType:PChar;bRegenIdxs :Bool):DBIResult;其中:hDb为数据库TDatabse的句柄,
       hCursor为数据表TTable的句柄,
       pszTableName为要删除记录的数据表的名称,
       pszDriverType为要删除记录的数据表的类型,
       bRegenIdxs表示是否在删除记录后自动更新索引文件.  在上面前四个参数中,hDb不能为NULL .hCursor、pszTableName、pszDriverType可以为NULL,但必须提供足够的信息来标识数据表的文件名称和类型,当hCursor不为空时,pszTableName 和pszDriverType可以为NULL;当pszTableName为数据表的路径和文件名时,hCursor和pszDriverType可以为NULL.  值得注意的是,在删除记录时,如 果用Table来实现,则Table必须以Exclusive=True的方式打开.下面就是一个典型的例子.  首先,应在uses语句加上:DbiTypes,DbiProcs,DbiErrs.{Pack一个DBF数据表,DbfTable包含了数据表的信息 }
    functionPackDbf le(DbfTable:TTable):boolean;
    var
    errResult:DBIResult;
    begin
    ifnotDbfTable.Exclusivethen {如果不是以独占方式,操作失败}
    begin
    result:=false;
    exit;
    end;
    {进行删除操作}
    errResult:=DbiPackTable(DbfTable.dbHandle, DbfTable.handle,NIL,NIL,true); 
    {根据返回结果,返回成功与否的标志}
    iferrResult=DBIERR_NONEthen {没有错误,操作成功}
    result:=true
    else{没有错误,操作失败}
    result:=false;
    end;
      

  2.   

    use bde.pas先用Delete后,再用下面函数真正删除记录DbiPackTable();//自己看一下帮助
      

  3.   

    不用bde连接,而用ado连接的话,应该如何删除呢??
      

  4.   

    我是每次打开数据库时作一次pack,勉强解决
      

  5.   

    adocommand1.CommandText:='pack ht.dbf';
    adocommand1.Execute;
      

  6.   

    在连接foxpro数据库的ODBC中有设置,如果让删除的记录参与操作则将会彻底删除记录。