簡體   English   中英

Delphi Dbgrid刪除一條記錄

[英]Delphi Dbgrid delete a record

我有多個標簽頁。 我的PageControl中的每個選項卡都包含一個帶有某些按鈕的Dbgrid,用於操作該dbgrid。

有時,當我單擊按鈕刪除時,我的DBGrid不會更改。 刪除后,我在DBgrid中看到了我的值。

If MyTable.recordcount > 0 then
begin
 str := 'Value of name field/**' + MyTable.FieldByName('Name').AsString+'**/';
 If Application.MessageBox(PChar(str), PChar('NAME'), MB_OKCANCEL + MB_ICONQUESTION) = IDOK then
 begin
      MyTable.Delete;
 end;
end;

我嘗試添加

 MyTable.Refresh;

刪除后,但不起作用。 MessageBox中myfield的值正確!

當我在MyDBgrid中選擇另一個Tabsheet時,會出現此問題。 這可能是我的DBGrid中的焦點問題嗎? 可能是我的DBGrid(dsBrowser,dsEdit,...)的狀態問題?

================================================== =======

我嘗試為BeforeDelete事件和AfterDelete事件創建日志:

Log(1,'------------------------------------Before Del');
Log(1,Format('DataSet.IsEmpty:%s',[BoolToStr1(DataSet.IsEmpty)]));
Log(1,Format('DataSet.State:%d',[Ord(DataSet.State)]));
Log(1,'--------');
Log(1,Format('DataSet.RecNo:%d',[DataSet.RecNo]));
Log(1,Format('DataSet.TabSheet:%s',[DataSet.FieldByName('TabSheetName').AsString]));
Log(1,Format('DataSet.FieldName:%s',[DataSet.FieldByName('FieldName').AsString]));
Log(1,Format('DataSet.FieldId:%s',[DataSet.FieldByName('FieldId').AsString])); 

在AfterDelete事件上:

Log(1,'------------------------------------After Del');
Log(1,Format('DataSet.IsEmpty:%s',[BoolToStr1(DataSet.IsEmpty)]));
Log(1,Format('DataSet.State:%d',[Ord(DataSet.State)]));
Log(1,'--------');
Log(1,Format('DataSet.RecNo:%d',[DataSet.RecNo]));
Log(1,Format('DataSet.TabSheet:%s',[DataSet.FieldByName('TabSheetName').AsString]));
Log(1,Format('DataSet.FieldName:%s',[DataSet.FieldByName('FieldName').AsString]));
Log(1,Format('DataSet.FieldId:%s',[DataSet.FieldByName('FieldId').AsString])); 

我將標簽頁用作:

在此處輸入圖片說明

我獲得此日志

------------------------------------Before Del
DataSet.IsEmpty:False
DataSet.State:1
--------
DataSet.RecNo:7
DataSet.TabSheet:tabsheet_0
DataSet.FieldName:
DataSet.FieldId:03
------------------------------------After Del
DataSet.IsEmpty:False
DataSet.State:1
--------
DataSet.RecNo:6
DataSet.TabSheet:tabsheet_0
DataSet.FieldName:
DataSet.FieldId:03

您可以在我的日志中看到:刪除包含03的行后,數據集不會更改(filedname和fieldId不會更改/ RecNo屬性已更改)。

由於您的問題是斷斷續續的,因此您必須自己調試,因為讀者無法幫您完成。

首先要做的是設置一個日志記錄函數,並在數據集的BeforeDeleteAfterDelete事件中調用它。 您應該在其中記錄當前數據集行的身份,數據集的狀態( dsBrowsedsEdit等)以及您認為可能相關的其他任何內容(例如,活動選項卡的身份),並查看是否可以發現在什么情況下刪除失敗。 您可以將記錄調用的結果寫到表單上的TMemo。

Ime,僅當數據集處於dsBrowse狀態時才允許刪除。

順便說一句,我假設您知道,如果數據集處於dsInsertdsSetKey狀態,則Delete操作會自動中止? 根據您的描述,我將通過調查出現問題時它是否處於dsInsert狀態來開始調試。 當然,您可以通過捕獲數據集的BeforeInsert事件並從那里調用日志記錄功能來捕獲數據集何時進入dsInsert狀態。

暫無
暫無

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

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