不知你是用何命令删除记录的如果用SQL的DELETE命令我想应不会出现这种情况吧(我没有用过DBF在DELPHI中,不知行不行你测试一下)

解决方案 »

  1.   

    你是不是说:
              with query1 do
                   sql.clear;
                   sql.add('delete from 表 where 条件');
                   sql.open;没用的,结果只是加了个删除标记而已,还有:
             table1.close;
             table1.open;
             with table1 do
                  table1.delete;结果也是这样,唉,真令我大伤脑经啊 !!! 我该如何 ???
      

  2.   

    TO COOER:
             COOER兄,怎么,你也遇到这种情况啊 ?没错,和我一样,我就是没搞明白,是不是DELPHI不能真正删除记录啊 ???
      

  3.   

    to xooox:
             DELPHI一定可以真正删除记录,只是我还没掌握而已,你再等等,看别人怎么说吧,我关注。
      

  4.   

    其实这和DELPHI是没有关系的,这是DBF数据库的一个特性。
    我记得以前在用FOXPRO系列编程时,要想彻底清除已被删除的记录,似乎要在DELETE命令后加上一个PACK命令。
    另外,被删除的记录虽然仍然能够看见,但是好象并不能被操作了。
    上面是我的一些模糊的看法,希望能给你们一点提示。
      

  5.   

    TO SMALLBRIDGE:
                   你能不能说的清楚点,详细点,最好能给我一个简单的例子,被加上删除标记的记录是不能再操作了,可是记录依然占用空间啊,我是要把记录彻底剔除掉。
      

  6.   

    你可以在DELETE加一个PACK,
    或使用ZAP,具体用法记不清了!
      

  7.   

    这是我从Delphi的帮助系统中找到的,可能是吧。我也是个初学者
    (见 BDE Administartor Help)
    Delphi只是个数据库的客户,可能不能和FOXPRO一样进行数据库管理级的控制,除非使用BDE。procedure PackTable(Table: TTable);
    var
      Props: CURProps;
      hDb: hDBIDb;
      TableDesc: CRTblDesc;
    begin
      if not Table.Active then
        raise EDatabaseError.Create('Table must be opened to pack');
      if not Table.Exclusive then
        raise EDatabaseError.Create('Table must be opened exclusively to pack');
      Check(DbiGetCursorProps(Table.Handle, Props));
      if Props.szTableType = szPARADOX then begin
        FillChar(TableDesc, sizeof(TableDesc), 0);
        Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
        StrPCopy(TableDesc.szTblName, Table.TableName);
        StrPCopy(TableDesc.szTblType, Props.szTableType);
        TableDesc.bPack := True;
        Table.Close;
        Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
      end
      else
        if (Props.szTableType = szDBASE) then
          Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
        else
          raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +
            'type to pack');
      Table.Open;
    end;
      

  8.   

    请不要再用foxpro 的东西了
      

  9.   

    帮助:Borland Database Engine Online Reference 中有例子用 DbiPackTable()
      

  10.   

    use InfoPower 2000.wwTable->Pack(AnsiString Msg);very easy!!
      

  11.   

    Infopower 2000 如何使用?我没用过。