簡體   English   中英

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中有很多行。

嘗試

MyTable.EmptyDataSet;

可能還有更多要做的事情,但是你沒有說明你是如何填充MyTable的。

刪除基礎數據庫表中的所有記錄(最好的方法取決於數據庫)並只調用一次刷新。

如果必須通過TFdTable執行,請使用BeginBatch,刪除(不刷新),EndBatch,然后刷新。

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

嘗試

因為刪除所有行會妨礙性能。

如果這不起作用,那么為什么不創建數據集運行時,然后釋放該對象。

我建議您使用存儲過程來執行作業,而不是使用應用程序中的SQL。 存儲過程很容易制作和快速,因為它們直接在服務器上運行。 只需為您的表創建一個存儲過程;

sp_deleteall

並在其中執行一行sql:

從mytable中刪除

從您的應用程序中,在表單上刪除TFDStoredProc,將其鏈接到服務器上的存儲過程,然后調用該過程`

sp_deleteall.ExecProc;

要知道刪除了多少記錄,只需在程序執行后調用:

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

試試吧 ...

形式最快到最慢。 前兩個是您執行服務器端的命令。

  1. 關閉表並執行SQL DDL命令TRUNCATE TABLENAME; 然后重新打開。 這需要對表進行獨占訪問。
  2. 使用SQL DML命令DELETE FROM TABLENAME; 這不需要獨占訪問權限。
  3. 使用循環客戶端。 慢很多,並觸發客戶端的很多事件。

你需要做的就是刪除FDMemTable上的所有記錄

MyTable.Active := False;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM