如何关闭事件或过程?(200分)

  • 主题发起人 主题发起人 K
  • 开始时间 开始时间
K

K

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个数据库表中(table)设置了某字段的onchange,当字段值
改变时就执行onchange.可在程序其他过程中或此字段onchange中
对此字段进行了post.
这时程序会自动调用此字段的onchange,并出现了错误:
Project wy.exe raised exception class EDatabaseError
with message 'Table1:Dataset not in edit or insert mode'.
Process stopped.Use Step or Run to continue.
按确定后又出现:Table1:Dataset not in edit or insert mode.错误
我想能不能对此字段进行post之前关闭onchange,
当执行完此段程序后,在打开此事件.或者有没有其他的方法。
请大侠们帮助我,谢谢。
 
before post use
yourtable.onchange:=nil;
after
yourtable.onchange:=oldOnchange;
 
if (DataSet.State in [dsEdit, dsInsert]) then

begin
...
...
end;
 
谢谢hubdog,当我将table1sh.onchange:=nil;问题解决了。
可我不知道 yourtable.onchange:=oldOnchange;怎样写.
pleasekillme,你能给讲细些吗?我不太明白。
当处于这两种状态[dsEdit, dsInsert]我因该怎样做.
本人水平较低,有劳大侠多打几个字.
 
// 你产生错误的原因是由于在程序其他过程中
//或此字段onchange中对此字段进行了post,
//所以当有些时候数据库未进入插入或修改状态,
//你也在修改字段的值。因此你只要先判断数据库的
//状态,再修改字段就行了。
//下面是例子
//这是你的字段的onchange代码。
procedure TForm1.Table1FieldChange(Sender: TField);
begin
if (Sender.DataSet.State in [dsEdit, dsInsert]) then

//判断当字的数据库是否在插入或者修改状态。
begin
//修改字段的内容,如下
Sender.AsString:='aaa';
end;

end;

 
>可我不知道 yourtable.onchange:=oldOnchange;怎样写
打开"属性编辑器", 找到 yourtable.onchange事件一栏, 里面不是
有一个过程的名字吗?
yourtable.onchange:=那个过程的名字;
 
pleasekillme谢谢你的解答。
其实每次在修改字时我都
table1.edit;
table1sh.value:=XX;
table1.post;--->程序引发onchange,而onchange中又有
table1.edit;
table1sh.value:=XX;
table1.post;
我必须修改字值,当字的数据库不在插入或者修改状态那程序不就达不到目的了

不知道我理解的对不对,请指教,谢谢pleasekillme
 
谢谢cAkk和hubdog
 
后退
顶部