主要是在TDataSet的BeforePost事件中进行判断,每一列的值是否符合规则,如果不符,则Abort,相符则Post!
例如:要求Field1字段不能为空,则写
if DataSet.FieldByName('Field1').asstring='' then
begin
ShowMessage('Field1不能为空!');
Abort;
end;
其他的根据你的具体要求来进行相应的验证,就可以了!
例如:要求Field1字段不能为空,则写
if DataSet.FieldByName('Field1').asstring='' then
begin
ShowMessage('Field1不能为空!');
Abort;
end;
其他的根据你的具体要求来进行相应的验证,就可以了!
参照:
unit U_data
... ...
... ...type
TDtMdl = class(TDataModule)
... ...
const
eKeyViol = 9729;
eRequiredFieldMissing = 9732;
eRequiredFieldzero =13059; //不能为空的错误代码
eForeignKey = 9733;
eDetailsExist = 9734;implementation
... ...
... ...
procedure TDtMdl.Tbl_wrkPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
VAR iDBlERROR:INTEGER;
begin
IF (E IS EDBENGINEERROR) THEN
BEGIN
IDBLERROR:=(E as eDBENGineError).Errors[0].Errorcode;
// messagedlg('错误码:'+inttostr(idblerror),mtwarning,[mbok],0);
// abort;
//z这两行代码可以捕捉错误代码:)
case iDBlError of
eRequiredFieldzero:
begin
messagedlg('不能为空)!',mtwarning,[mbok],0);
abort;
end;
eKeyViol:
begin
messagedlg('该人员信息已经被输入!也可能是工号重复了,请重新输入!',
mtwarning,[mbok],0);
abort;
end;
end;
end;
end;
比如一行纪录有code,name,sex,其中name ,sex在数据库中是可以为空的,但是我现在要求不为空,所以,在他向下移动,或者向上移动时,来接获“错误”,之后让他回到出错的一行。(其实从头到尾根本就没有数据库错误,都是程序中控制的东西)
我等休息了。