德尔福删除FDTable所有记录

问题描述 投票:2回答:6

荫想在我FDTable组件的所有记录使用删除,

mytable.Delete;

但没有记录被越来越删除。

任何一个可以建议我的方式来删除在FdTable的所有记录。

编辑

我修改了它以这种方式,

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

但它走的时候很多,因为在我的fdtable很多行。

delphi delphi-xe5 firedac
6个回答
2
投票

卸下底层数据库表,并调用刷新一次就好(要做到这一点,将取决于数据库的最佳方式)的所有记录。

如果你必须通过TFdTable做到这一点,使用BeginBatch,做你删除(不刷新),并endBatch函数才刷新。

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

5
投票

尝试

MyTable.EmptyDataSet;

有可能是有点超过,这样做,但你不说你是如何在第一时间填充MyTable


0
投票

我会建议你使用存储过程的工作,而不是从应用程序中的SQL。存储过程是制作简单,而且速度极快,因为它们直接在服务器上运行。只要创建你的表存储过程;

sp_deleteall

和它做SQL的一行:

从MYTABLE删除

从您的应用程序,在表单上放一个TFDStoredProc,将其链接到你的存储过程在服务器上,只是在程序调用`

sp_deleteall.ExecProc;

要知道有多少记录刚刚删除调用,程序执行后:

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

试试吧 ...


0
投票

尝试

因为这样做删除所有的行会阻碍性能。

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


0
投票

最快的形式最慢。前两个是在执行服务器端的命令。

  1. 关闭表,做一个SQL命令DDL和TRUNCATE TABLENAME;然后重新打开。这需要独占访问表。
  2. 使用SQL DML命令DELETE FROM TABLENAME;。这并不需要独占访问。
  3. 使用循环客户端。慢了很多,并引发了很多事件的客户端的。

0
投票

所有你需要做删除所有记录在FDMemTable是

MyTable.Active := False;
© www.soinside.com 2019 - 2024. All rights reserved.