Delphi 从 FDTable 中删除所有记录

Delphi Delete all records from FDTable

我正在尝试使用

删除我的 FDTable 组件中的所有记录

mytable.Delete;

但没有记录被删除。

谁能建议我一种删除 FdTable 中所有记录的方法。

编辑

我是这样修改的,

  for i := mytable.RecordCount - 1 downto 0 do
  begin
    mytable.Delete;
  end;
  mytable.Refresh;

但它花费了很多时间,因为我的 fdtable 中有很多行。

尝试

因为删除所有行会影响性能。

如果这不起作用,那么为什么不创建数据集运行时然后释放对象。

删除底层数据库中的所有记录table(最好的方法取决于数据库)并只调用一次刷新。

如果您必须通过 TFdTable 执行此操作,请使用 BeginBatch、执行删除(不刷新)、EndBatch,然后再刷新。

 mytable.BeginBatch;
 for i := mytable.RecordCount - 1 downto 0 do
 begin
    mytable.Delete;
 end;
 mytable.EndBatch;
 mytable.Refresh;

尝试

MyTable.EmptyDataSet;

可能要做的事情比这多一点,但您没有说明如何填充 MyTable

我建议您为作业使用存储过程,而不是从您的应用程序中使用 SQL。存储过程制作简单,速度极快,因为它们直接在服务器上运行。 只需为您的 table 创建一个存储过程;

sp_deleteall

并在里面做一行 sql:

delete from mytable

从您的应用程序中,将 TFDStoredProc 拖放到表单上,link 将其添加到服务器上的存储过程,然后调用该过程 `

sp_deleteall.ExecProc;

要知道删除了多少条记录,只需在程序执行后调用:

ShowMessage(IntToStr(sp_deleteall.RowsAffected) + ' records were deleted.');

试一试...

表格从快到慢。前两个是您在服务器端执行的命令。

  1. 关闭 table 并执行 SQL DDL 命令 TRUNCATE TABLENAME; 然后重新打开。这需要独占访问 table.
  2. 使用 SQL DML 命令 DELETE FROM TABLENAME;。这不需要独占访问权限。
  3. 使用循环客户端。慢很多并触发很多客户端事件。

要删除 FDMemTable 上的所有记录,您需要做的就是

MyTable.Active := False;