可以用TRUNCATE,DELETE删除大量数据时候可能很慢,注意事务问题,需要及时提交或回退

解决方案 »

  1.   

    谢谢各位帮助,我想删除已存在删除标记的记录,请问怎么办?
    fox中的方法是:
    use tem
    pack//删除已存在删除标记的记录,delphi中用什么语句呢?
      

  2.   

    procedure PackTable(Table: TTable);
    var
      Props: CURProps;
      hDb: hDBIDb;
      TableDesc: CRTblDesc;
    begin
      // Make sure the table is open exclusively so we can get the db handle...
      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');  // Get the table properties to determine table type...
      Check(DbiGetCursorProps(Table.Handle, Props));  // If the table is a Paradox table, you must call DbiDoRestructure...
      if Props.szTableType = szPARADOX then begin
        // Blank out the structure...
        FillChar(TableDesc, sizeof(TableDesc), 0);
        // Get the database handle from the table's cursor handle...    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
        // Put the table name in the table descriptor...
        StrPCopy(TableDesc.szTblName, Table.TableName);
        // Put the table type in the table descriptor...
        StrPCopy(TableDesc.szTblType, Props.szTableType);
        // Set the Pack option in the table descriptor to TRUE...
        TableDesc.bPack := True;
        // Close the table so the restructure can complete...
        Table.Close;
        // Call DbiDoRestructure...    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil
    , nil, nil, False));
      end
      else
        // If the table is a dBASE table, simply call DbiPackTable...
        if (Props.szTableType = szDBASE) then
          Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
        else
          // Pack only works on PAradox or dBASE; nothing else...
          raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +        'type to pack');  Table.Open;end;
      

  3.   

    用table1.EmptyTable; 这种方法可以删除几百K字节数的数据库
    而当删除一个数据库是2.7M时,就出现了Table is busy这个提示,
      

  4.   

    用TTABLE控件,你可以做一下!应该能行的!
      

  5.   

    建议用TTabletable1.EmptyTable;  delete from 的方法在删纪录几万条时会出错。
      

  6.   

    1: select * into #temptable from tablename where 1=2
    2: drop table tablename
    3: select * into tablename from #temptable
      

  7.   

      query1.close;
      query1.sql.clear;
      query1.sql.add('select * into tem from czb where 1=2');
      query1.execsql; 
    上面的语句错在那儿呢,请教!!
      

  8.   

    当数据库文件达到2.5M时table1.EmptyTable;  这句就不起作用了,那我应该怎么呢?再次请教各位高手帮助!!!
      

  9.   

     
      query1.close;
      query1.sql.clear;
      query1.sql.add('select * into tem from czb where 1=2');
      query1.execsql; 
    上面的语句错在那儿呢,请教!!  select 时请用Query1.Open;
      

  10.   

    open也不管,是不是请高手写一套完整的语句给我呢,谢谢了
      

  11.   

    paradox,就是在delphi里用的数据库