On Post Error. Banco Fb 1.5

13/09/2004

Prezados Amigos,
Estou fazendo um projeto no Delphi6 com Banco de Dados Firebird 1.5, criei um tabela com os seguintes campos:

CREATE TABLE USUARIOS
(
  CODIGO INTEGER NOT NULL,
  NOME VARCHAR(30),
  FUNCAO VARCHAR(30),
  SUPERVISOR CHAR(1),
  SENHA VARCHAR(8),
 PRIMARY KEY (CODIGO)
);

  Coloquei no evento OnPostError do Componente ClientDataSet do DataModule:

procedure TDMTiTan.CDSUsuariosPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  If UpperCase (Copy(e.Message,1,13))=´KEY VIOLATION´ then
    begin
      Action:= DaAbort;
      Showmessage(´Já existe Usuário com este código - Favor corrigir!´);
    end;
end;

  Isso para que não o erro erro de Key Violation, mas o problema persiste pois, quando eu tento gravar em execução em tempo de projeto e me envia outra mensagem:

  Project TiTan.exe raised exception class EDatabaseError with message ´violation of PRIMARY or UNIQUE KEY constraint "INTEG_12" on table "USUARIOS"
´.Process stopped. Use Step or Run to continue.

  No evento do botao gravar:

procedure TFormUsuarios.btnGravaClick(Sender: TObject);
begin
  If DMTiTan.CDSUsuarios.FieldByName(´senha´).AsString = edit1.Text then
    begin
      BtnIncluir.Enabled:=true;
      BtnAlterar.Enabled:=true;
      BtnCancelar.Enabled:=false;
      btnGrava.Enabled:=false;
      BtnExcluir.Enabled:=true;
      BtnConsUsuarios.Enabled:=true;
      DBNavigator1.Enabled:=true;
      BtnSair.Enabled:=true;
      DMTiTan.CDSUsuarios.ApplyUpdates(-1);
    end
  Else
    begin
      ShowMessage(´Senha não confere com confirmação da Senha - Redigite-os!´);
      DBEdit5.SetFocus;
    end;
end;


Gostaria da colaboração dos Colegas para a solução simples que estou com dificuldades, como corrigir este problema?


Lafitti

Respostas

14/09/2004

Nelson_prog

Faça a validação no evento OnReconcileError do ClienteDataset:

procedure TForm1.ClientDataSet1ReconcileError(DataSet: TClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
Action := HandleReconcileError(DataSet, UpdateKind, E);
end;


Responder Citar