数据库类型为BDE,Paradox 数据表,请各位大虾赐教!

解决方案 »

  1.   

    一时记不起来了。有一个函数。
    你试一试这个。
    Query1.RevertRecord; 明天我给你答复。你给我Email也行。
      

  2.   

    query1.RevertRecord撤消对当前记录的更改
    如果用clientdataset就有更多的方法,savepoint保存记忆点或者用undolastchange一步步的撤消。当然也支持revertrecord
      

  3.   

    说明一下,所用数据集为Table,所以query的暂时用不上,谢谢!
      

  4.   

    oracle 在没有commit 前是可以的,其它的不知道
      

  5.   

    关于软删除的问题,它其实与Delphi没有直接的关系。主要还是看数据库的结构和性能。我们拿dBASE和Paradox做个比较:
        dBASE能够给每一个物理记录附上一个编号,能够实现“软删除”一个记录。并且恢复这些记录。
        与dBASE不同的是,Paradox表没有物理记录编号的概念。但是每个记录都有一个唯一的序号。序号与物理编号的区别在于序号取决于当前使用的索引。而且Paradox没有软删除的概念。所以你的问题不能根本解决。或许用缓存提交的方式会好一点。
     
        对于Delphi来说, 也不是直接支持dBASE的软删除功能而是通过BDE的API函数来实现。给你几这些函数的个例子
    (1)获取当前记录的物理编号。(只是对dBASE和FoxPro有效)
        function TdBASETable.GetREcNum:Longint;
        var
          RP: RECProps;
        begin
          UpdateCursorPos;        {同步}
          Check(dbiGetRecord(Handle, dbiNOLOCK, Nil, @RP));
          Result := RP.iPhyREcNum;  {返回记录的编号}       
        end;
     
      (2)显示被软删除的记录。调用一个叫dbiSetProp()的BDE API函数。
        procedure TdBaseTAble.SetViewDeleted(Value: Boolean);
        {Value 允许用户显示还是不显示被软删除的记录}    
        begin
          {表必须已经打开}
          if Active and(FViewDeleted <> Value) then 
          begin
            DisableConctrols;    {避免闪烁}
            try
              Check(DbiSetProp(hDBIObj(Handle), curSOFTDELETEON, Longing(Value)));
            finally
              refresh;    
              EnableConctrols;
            end;
            FViewDeleted := Value;
          end;
        end;     
          
       (3)恢复被软删除的记录。调用BDE的DbiUndeleteRecord()函数,这个函数的定义为function DbiUndeleteRecord(hCursor: hDBICur):DBIResult stdcall;
     
        下面是TdBaseTable的UndeleteRecord的方法:
        procedure TdBAseTable.UndeleteRecord;
        begin
          if not IsDeleted then
            raise EDataBaseError.Create('Record is not delete');
            Check(DbiUndeleteREcord(Handle));
          Refresh;
        end;