大家好:
    我是个菜鸟,请问大家谁能告诉我物理删除FOXPRO表中打标记记录的详细步骤?
(代码往哪里加)。或者有DEMO的也行。
  DbiPackTable我不会用。
 我这样作不行。
  QUERY CLOSE
  QUERY.SQL.CLEAR;
 query.sql.Add('delete  from ABC where F1='+'''''AND F2+'='+'''''');
 QUERY.Execsql;
 query2.active:=false;
 Table2.Exclusive := True;
 DBIPackTable(Table2.DBHandle, Table2.Handle, nil, ZZDBASE, True);
 关于(DBIPackTable)我什么都没有定义.有谁能告诉我的详细方法

解决方案 »

  1.   

    你需要在use里面填写 
    use bde;
      

  2.   

    在Delphi 程序中,用TTable 或TQuery 构件的方法Delete执行删除记录的操作时执行的是软删除,即 相当于Foxpro 中的"Set Delete Off" 的效果,仅将记录用星号"*" 标记为删除,实际并没有数据 库中进行物理上的删除.要进行真正的删除,需要进行Pack Table 的操作.    在Delphi 程序中真正删除记录,需要调用BDE 函数,函数名为DbiPackTable,函数原型 为: 
          function DbiPackTable ( 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包含了数据表的信息 }
    function PackDbfTable( DbfTable : TTable ) : boolean;
    var
       errResult : DBIResult;
    begin
         if not DbfTable.Exclusive then  {如果不是以独占方式,操作失败 }
         begin
         result := false;
         exit;
        end;
         {进行删除操作 }
         errResult := DbiPackTable( DbfTable.dbHandle, DbfTable.handle, NIL, NIL, true );     {根据返回结果,返回成功与否的标志 }
         if errResult = DBIERR_NONE then     {没有错误,操作成功 }
             result := true
         else{没有错误,操作失败 }
    result := false;
    end;