Qual o melhor jeito de barrar um registro duplo?
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.
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
Curtidas 0
Respostas
Motta
24/04/2006
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 :
Não sei a sintaxe no FB no Oracle :
ALTER TABLE CLIENTE ADD CONSTRAINT XUK_TABELA UNIQUE ( CNPJ ) /
GOSTEI 0
Titanius
24/04/2006
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
Obrigado desde já.
[]s
GOSTEI 0
Motta
24/04/2006
veja :
http://forum.devmedia.com.br/viewtopic.php?t=73927
http://forum.devmedia.com.br/viewtopic.php?t=73927
GOSTEI 0
Titanius
24/04/2006
Valeu Motta!
[]s
[]s
GOSTEI 0
Mahdak
24/04/2006
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
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;
GOSTEI 0
Mahdak
24/04/2006
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:
GOSTEI 0