Fórum Qual o melhor jeito de barrar um registro duplo? #319819

24/04/2006

0

Olá, tenho uma tabela Cliente, com o campo CNPJ.. pois bem, não se pode ter mais de um cliente com CNPJ igual... beleza.. como eu bloqueio isso no sistema? Qual o melhor jeito?
Estou usando Trigger, porem fica feio, aquela mensagem de erro... qual seria o modelo melhor para isso?

Uso: Firebird 1.5, IBX, Delphi 7


[]s
Fellipe H.


Titanius

Titanius

Responder

Posts

24/04/2006

Motta

Crie uma contraint unique ou um index unique, no FE trata o retorno do erro da mensagem do banco , mais simple e seguro.

Não sei a sintaxe no FB no Oracle :

ALTER TABLE CLIENTE
  ADD CONSTRAINT XUK_TABELA UNIQUE (
    CNPJ
  )
/



Responder

Gostei + 0

25/04/2006

Titanius

Certo motta, isso eu já faço.. porém aquela mensagem de erro de violação é feia.. como vc disse, eu teria que tratar o retorno disso... vc tem um exemplo de como eu faria isso?

Obrigado desde já.

[]s


Responder

Gostei + 0

25/04/2006

Motta

veja :

http://forum.devmedia.com.br/viewtopic.php?t=73927


Responder

Gostei + 0

26/04/2006

Titanius

Valeu Motta!

[]s


Responder

Gostei + 0

26/04/2006

Mahdak

no evento OnExit do componente edit eu fasso uma consulta Sql pra ver se o registro ja existe, se ele existir entao faz algo pra barrar senao passa batido... tipo assim:

nao sei se esse tipo de procedimento é ultrapassado, mas ainda uso isso...

abração

procedure TCadastro_Clientes.Edit_NomeExit(Sender: TObject);
var
zera : Integer;
begin
    //verifica se o registro ja existe ao cadastra-lo
    DM.Tbl_Clientes.Close;
    DM.Tbl_Clientes.SelectSQL.Clear;
    DM.Tbl_Clientes.SelectSQL.Add(´Select * From Clientes Where Nome = :Consulta ´);
    DM.Tbl_Clientes.Params[0].AsString;
    DM.Tbl_Clientes.ParamByName(´Consulta´).AsString:=Edit_Nome.Text;
    DM.Tbl_Clientes.Open;
    if Edit_nome.Text = DM.Tbl_ClientesNOME.AsString then
    begin
        Zera := Application.MessageBox(´O Cliente ja existe, deseja cadastra-lo mesmo assim?´, ´CONFIRME´, mb_yesno);
        if zera = IDYES Then
        begin
              // passa batido e cadastra o cara
        end
            else
                begin
                    // cancela tudo e nao cadastra porcaria nenhuma
                    DM.Tbl_Clientes.Cancel;
                end;
    end;
end;



Responder

Gostei + 0

30/04/2006

Mahdak

no evento OnExit do componente edit eu fasso uma consulta Sql pra ver se o registro ja existe, se ele existir entao faz algo pra barrar senao passa batido... tipo assim: nao sei se esse tipo de procedimento é ultrapassado, mas ainda uso isso... abração
procedure TCadastro_Clientes.Edit_NomeExit(Sender: TObject);
var
zera : Integer;
begin
    //verifica se o registro ja existe ao cadastra-lo
    DM.Tbl_Clientes.Close;
    DM.Tbl_Clientes.SelectSQL.Clear;
    DM.Tbl_Clientes.SelectSQL.Add(´Select * From Clientes Where Nome = :Consulta ´);
    DM.Tbl_Clientes.Params[0].AsString;
    DM.Tbl_Clientes.ParamByName(´Consulta´).AsString:=Edit_Nome.Text;
    DM.Tbl_Clientes.Open;
    if Edit_nome.Text = DM.Tbl_ClientesNOME.AsString then
    begin
        Zera := Application.MessageBox(´O Cliente ja existe, deseja cadastra-lo mesmo assim?´, ´CONFIRME´, mb_yesno);
        if zera = IDYES Then
        begin
              // passa batido e cadastra o cara
        end
            else
                begin
                    // cancela tudo e nao cadastra porcaria nenhuma
                    DM.Tbl_Clientes.Cancel;
                end;
    end;
end;


agora eu to vendo que essa operação nao serve quando usa-se Generator, etc... vou dar uma olhada no exemplo do mota tambem... uhauhauh :shock:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar