[firebase-br] Rotina Tratamento Erro

Anderson Miranda Barrozo andersonpaduarj em hotmail.com
Sáb Jun 16 16:38:47 -03 2007


Boa tarde,

     Abaixo segue  rotinas que criei para tratar erros antes do post: 
SetFocusCampo, ValidaCampo.
A SetFocusCampo é uma extensao da ValidaCampo que tem por finalidade de 
mudar o foco para o componente o qual seu valor nao pode ser branco. Ela 
esta preparada para PageControl, isto é, varre todas as tabs procurando pelo 
componente que esta em branco.

Ja a ValidaCampo é que realmente faz tudo. Recebe o parametro do 
ClientDataSet e o número de Tabs no PageControl. Ela deve ser chamada no 
evento BeforePost do ClientDataSet. Na realidade ela faz uma varedura no 
TFild do ClientDataSet e procura por campos cujo a propriedade Tag e igual a 
99 e verifica se o mesmo esta sem informação. Caso esteja apresenta a 
menssagem personalizada e muda o foco para componente.

Para que tudo funcione basta chamar no evento BeforePost a rotina 
VALIDACAMPO e passar os parametros. Setar o TFiel do ClientDataSet 
Requerd=False e a Tag=99. Voce também deve mudar do DisplayLabel do TField 
pois a menssagem personalizada pega este valor para apresentar ao usuario.

Bom, espero que ajude alguem que tem problemas de validacao antes do post. 
Aceito críticas pois na realidade terminei agora.

Bom proveito....

procedure SetFocusCampo(Campo:string;TotalTab:Integer);
var i : integer;
    Tab:Integer;
begin
for Tab := 1 to TotalTab do
Begin
  for i := 1 to ComponentCount do
  begin
    if ActiveControl is TDBEdit then
      if TDBEDIT(FindComponent(ActiveControl.Name)).DataField = Campo then
      begin
        ACTIVECONTROL.SetFocus;
        exit;
      end;
    if ActiveControl is TDBComboBox then
      if TDBComboBox(FindComponent(ActiveControl.Name)).DataField = Campo 
then
      begin
        ACTIVECONTROL.SetFocus;
        exit;
      end;
    Perform(WM_NEXTDLGCTL,0,0);
    PG.TabIndex := Tab-1;
  end;
end;
end;


Procedure ValidaCampo(ClientDataSet:TClientDataSet;TotalTab:integer);
var I : Integer;
begin
  for I := 0 to ClientDataSet.Fields.Count -1 do
  begin
    If (ClientDataSet.Fields[I].Tag = 99) And (ClientDataSet.Fields[I].Text 
= '') Then
      begin
        Showmessage('Informação não pode ser branco: [ 
'+ClientDataSet.Fields[I].DisplayLabel+' ]');
        SetFocusCampo(ClientDataSet.Fields[I].FieldName,TotalTab);
        Abort;
      end;
  end;
end;


procedure TCADCLI.CDSClienteBeforePost(DataSet: TDataSet);
begin
ValidaCampo(CDSCliente,2);
If dataset.State = dsinsert Then
   CDSClienteCliCodigo.AsInteger := GeraCodigo('GEN_CODCLI');
end;

_________________________________________________________________
Mande torpedos SMS do seu messenger para o celular dos seus amigos 
http://mobile.msn.com/





Mais detalhes sobre a lista de discussão lista