ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Verificar se existe registro! [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
carbox
Colaborador
Colaborador


Registrado: Quarta-Feira, 3 de Março de 2010
Mensagens: 1471

MensagemEnviada: Ter Jul 06, 2010 7:45 am    Assunto: Verificar se existe registro! [RESOLVIDO] Responder com Citação

Bom dia pessoal

Bom acredito que seja algo simples, mas em mim deu branco. Estou sem idéia...

Gostaria de implementar no evento BeforePost o código para evitar que um determinado registro seja duplicado, exemplo CPF/CNPJ.

Não estou querendo usar "chaves" (PK, FK).

Alguem tem alguma dica?


Editado pela última vez por carbox em Sex Jul 09, 2010 9:02 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
douglasmaicon
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 28 de Mai de 2010
Mensagens: 255
Localização: São João Del Rei - MG

MensagemEnviada: Ter Jul 06, 2010 8:52 am    Assunto: Responder com Citação

Bom dia!
Tenta usar um locate na tabela.
a sintaxe é simples:

if tablea.locate('campo desejado', valor variante,[loOpitions]) then
string ------------ edit por ex. -- se é locaseinsensitive ou loPartialkey

espero ter ajudado se nao der certo avise
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
carbox
Colaborador
Colaborador


Registrado: Quarta-Feira, 3 de Março de 2010
Mensagens: 1471

MensagemEnviada: Ter Jul 06, 2010 3:02 pm    Assunto: Responder com Citação

Estranho... com a função locate esta travando o sistema!

Alguma dica

douglasmaicon escreveu:
Bom dia!
Tenta usar um locate na tabela.
a sintaxe é simples:

if tablea.locate('campo desejado', valor variante,[loOpitions]) then
string ------------ edit por ex. -- se é locaseinsensitive ou loPartialkey

espero ter ajudado se nao der certo avise
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Ter Jul 06, 2010 3:41 pm    Assunto: Responder com Citação

deve ser pq está no momento do post e vc está mudando o ponteiro da msm tabela. tenta criar um TSQLDataSet dinamico que faça um select procurando cpf/cnpj.

Código:
SQLDatSet.ComandText := 'Select id_cliente from clientes where cpd_cnpj = ' + cpfcnpjProcurado;
SQLDatSet.open;
if not SQLDatSet.eof then
  Raise Exception.Create('O CPJ/CNPJ informado já existe!').

Existem outras opções para fazer isso. No nosso sistema aki, quando a pessoa vai iniciar um cadastro eu ja busco, no mesmo momento ele no banco. Se existir abre para edição, senão abre para inserção.
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
carbox
Colaborador
Colaborador


Registrado: Quarta-Feira, 3 de Março de 2010
Mensagens: 1471

MensagemEnviada: Qui Jul 08, 2010 9:14 am    Assunto: Responder com Citação

Tinha razão... Coloquei no evento OnKeyDown do componente o codigo abaixo. Daí ele já faz a busca no banco e ver se existe o CPF/CNPJ, ficou assim:

Código:

procedure TFClientes.DBEdit9KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var canClose:Boolean;
begin
  canClose:=False;
  inherited;
   if (key = 13) or (key = 9) Then
   Begin
     With ExecSql('Select * from Clientes where CPF_CNPJ = :Nom',varArrayOf([DbEdit9.Text]) ) Do
     Begin
      if not(bof and eof) then
        if Application.MessageBox('Já existe um CPF/CNPJ cadastrado. Deseja, mesmo assim, continuar?',pchar(Application.Title),MB_YESNO)=7 then
        canClose:=True
      else DbEdit17.SetFocus
      else DbEdit17.SetFocus;
     End;
   end;
   if Canclose then Close;


end;


felipecaputo escreveu:
deve ser pq está no momento do post e vc está mudando o ponteiro da msm tabela. tenta criar um TSQLDataSet dinamico que faça um select procurando cpf/cnpj.

Código:
SQLDatSet.ComandText := 'Select id_cliente from clientes where cpd_cnpj = ' + cpfcnpjProcurado;
SQLDatSet.open;
if not SQLDatSet.eof then
  Raise Exception.Create('O CPJ/CNPJ informado já existe!').

Existem outras opções para fazer isso. No nosso sistema aki, quando a pessoa vai iniciar um cadastro eu ja busco, no mesmo momento ele no banco. Se existir abre para edição, senão abre para inserção.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Jul 08, 2010 11:33 am    Assunto: Responder com Citação

Se o seu problema foi resolvido mude o título para RESOLVIDO.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB