你的逻辑有问题:
一个表如果有BeforePoso事件,那么,他肯定已经是打开的表了。此时,理论上不能再对databasename、tablename赋值。刷新数据,也可能产生一个cancel(或者post)消息。
setkey、gotokey,也会产生记录移动,而记录移动,在Insert、Edit状态下,会产生Post消息。因此,这些操作,是不能在这里进行的。
要实现同样效果,应该在非编辑或者插入状态下进行,然句使用检查数据
...
插入数据
Table1.Insert;
Table.FieldByName('..').AsString := '......';
...
Table.Post
这样,就不会出现错误了。
一个表如果有BeforePoso事件,那么,他肯定已经是打开的表了。此时,理论上不能再对databasename、tablename赋值。刷新数据,也可能产生一个cancel(或者post)消息。
setkey、gotokey,也会产生记录移动,而记录移动,在Insert、Edit状态下,会产生Post消息。因此,这些操作,是不能在这里进行的。
要实现同样效果,应该在非编辑或者插入状态下进行,然句使用检查数据
...
插入数据
Table1.Insert;
Table.FieldByName('..').AsString := '......';
...
Table.Post
这样,就不会出现错误了。
解决方案 »
- delphi怎样执行一个bat批处理文件不出来那个黑框
- 如何拖动图片到另一个控件上?
- ClientSocket的Onread事件读取BUF的长度怎么设定?
- 如何獲得一個Excel的所有Sheet的記錄總數?
- 三层开发时DataSource1.DataSet.recno有数,可两层此数为-1?为什么?
- QQ的本地数据库是?
- 如何在Delphi导入excel读取excel数据
- 能否在tabsheet里面加入canvas属性?
- 为何ACCESS文件转换为PARADOX文件后无法正确显示中文?
- Win32/parite.a是什么东东,我的NT系统启动不了,局域网内多台机子已感染
- 送分的SQL问题
- 在BCB或DELPHI编程中如何实现文件压缩,要求很实用!!
这是我的代码,见笑了:
IF (E IS EDBENGINEERROR) THEN
BEGIN
IDBLERROR:=(E as eDBENGineError).Errors[0].Errorcode;
case iDBlError of
eRequiredFieldMissing:
begin
messagedlg('有些字段长度不能为0,请输入空格!',mtwarning,[mbok],0);
abort;
end;
eKeyViol:
begin
messagedlg('该报告编号已经被使用!请更换一个吧!',
mtwarning,[mbok],0);
abort;
end;
end;
end;
检查时用query吧