数据输入合法性检查

OnExit只在离开表格时才会发生,应该在OnSelectCell事件上也加上校验。
如下例,CheckData函数检查指定单元数据的合法性,在OnSelectCell和
OnExit事件中调用该函数进行校验。
function TForm1 . CheckData ( Row ,  Col: integer ) : boolean ;
{对指定单元数据进行校验,要求数据必须为整数}
begin
  Result :
=  True ;
  
if  StringGrid1 . Cells[Col ,  Row]  =  ''  then
    
Exit ;
  try
    StrToInt
( StringGrid1 . Cells[Col ,  Row] );
  except
    ShowMessage
( 'Cell ( +  IntToStr ( Row )   +  ' , +  IntToStr ( Col )   +  ' ) +
    ' is 
not  a valid integer value' );
    Result :
=  False ;
  
end ;
end ;

procedure TForm1
. StringGrid1SelectCell ( Sender: TObject ;  Col ,  Row: Integer ;
  var CanSelect: Boolean
);
begin
  CanSelect :
=  CheckData ( StringGrid1 . Row ,  StringGrid1 . Col );
end ;

procedure TForm1
. StringGrid1Exit ( Sender: TObject );
begin
  
if   not  CheckData ( StringGrid1 . Row ,  StringGrid1 . Col )   then
    StringGrid1
. SetFocus ;
end ;   

 

 在相關數據表中(table,adoquery)的OnPostError()事件中判斷:
......

const
  eKeyViol
= 9729 ;          // 主鍵必須唯一
  eReqdErr
= 9732 ;          // 主鍵不能為空
......
procedure TDataModule1
. Q_XLSPostError ( DataSet: TDataSet ;  E: EDatabaseError ;
  var Action: TDataAction
);
begin
  
if   ( E is EDBEngineError )   then
    
if   ( E as EDBEngineError ). Errors[ 0 ] . ErrorCode = eKeyViol  then
      begin
        MessageDlg
( '提交失敗:成本項目名稱不能重復!' , mtInformation , [mbOK] , 0 );
        Abort
;
      
end
    
else   if   ( E as EDBEngineError ). Errors[ 0 ] . ErrorCode = eReqdErr  then
      begin
        MessageDlg
( '提交失敗:成本項目名稱不能為空!' , mtInformation , [mbOK] , 0 );
        Abort
;
      
end ;
end ;

 

使焦点返回Grid.SelectedIndex := n;

取消修改

abort;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值