Delphi Dbgrid删除一条记录



我有一个多重表格。我的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])); 

on 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

你可以在我的日志中看到:数据集没有改变(filedname和fieldId没有改变/RecNo属性是改变)删除后,包含03的行

由于您的问题是间歇性的,您必须自己调试它,因为读者不能为您做这些。

首先要做的是设置一个日志函数,并在数据集的BeforeDeleteAfterDelete事件中调用它。您应该在其中记录当前数据集行的身份,数据集的状态(dsBrowse, dsEdit等)以及您认为可能相关的任何其他内容(例如活动表的身份),并查看您是否可以发现在什么情况下删除失败。您可以将日志调用的结果写入表单上的TMemo。

一般来说,只有当数据集处于dsBrowse状态时,才允许Delete操作。

顺便说一下,我假设你知道如果数据集处于dsInsertdsSetKey状态,Delete操作会自动中止?根据您的描述,我将通过调查问题出现时它是否处于dsInsert状态来开始调试。当然,您可以捕获数据集何时进入dsInsert状态,方法是捕获其BeforeInsert事件并从那里调用日志记录函数。

相关内容

  • 没有找到相关文章

最新更新