TDBEDIT的问题(50分)

  • 主题发起人 主题发起人 向前3
  • 开始时间 开始时间

向前3

Unregistered / Unconfirmed
GUEST, unregistred user!
一个窗体上有一个TDBEDIT控件,对应数据库表中的一个关键字段,请问防止重
复最好的方法是什么?或者说需要使用TDBEDIT控件的哪个事件句柄来作提示?
(现在系统也报错,但是几行中文加英文太专业,我想用SHOWMESSAGE,提示后
光标仍在控件里不出来)。
 
在table的onposterror事件中写
procedure TsjwjForm.Table1PostError(DataSet: TDataSet;E:EDatabaseError;
var Action: TDataAction);
const
eKeyViol = 9729;
begin
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
Messagebox(handle,'出现重复记录!','abc',mb_iconerror or mb_ok);
Table1.Cancel;
// Abort;
end;
end;
 
DBEdit1的 OnExit中,用SQL查询看是否有重复,有则SHOWMESSAGE
并且DBEdit1.SetFocus;
 
程序能够通过:yanyongto :yanyong
if (E is EDBEngineError) then
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
Messagebox(handle,'出现重复记录!','abc',mb_iconerror or mb_ok);
Table1.Cancel;

程序能够通过,但是由于我是新手,能不能解释一下程序,我不懂。
另外,出现'出现重复记录!'的提示后,怎么还有系统的提示呢?

 
我同意yanyong的方法,但更习惯用try...except...end结构:
with table1 do
try
post;
except
on e:EDBEngineError do
if (E as EDBEngineError).Errors[0].Errorcode = eKeyViol then
begin
ShowMessage('出现重复记录!');
Cancel;
end;
 
在table的BeforePost里面进行处理,该事件发生在数据被post之前,
在这里用sql查一下,看看是否有重复数据,若有就显示错误...

上面各位说得也都可合你的要求...
 
接受答案了.
 
后退
顶部