Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar se registro já existe


Gabriel Cabral

Pergunta

Bom dia, galera....então...

estou tentando verificar, pelo código, se um registro já existe...dessa forma:

eu preencho todos os campos do form, inclusive o código, aí pelo código abaixo, verifica se o código digitado já existe em algum registro da tabela...

with dm.QueryBusca do
begin
  Close;
  SQL.Clear;

  SQL.Add('SELECT * FROM ESTAPRO.dbf');
  SQL.Add('WHERE PROCOD = :pCODIGO');

  ParambyName('pCODIGO').AsString := txtCadPro_CodPro.Text;
  Open;

  if not(IsEmpty) then
  begin
    ShowMessage('Registro já existente!');
    Exit;
  end
  else
  begin
    dm.tblCadPro.Post;
    dm.tblCadPro.Last;
  end;


end;

só que o problema está no if....

pois quando digito um código já existente, a mensagem aparece, mas não é pra executar o else, mas executa....porque o registro é gravado do mesmo jeito...

na verdade, eu depurei o código aqui e não passa pelo else....então não passa pelo Post, mas tá gravando o registro mesmo assim..

tem algo errado ae??

ou outra forma q eu posso fazer isso??

Obrigado

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Então galera...consegui resolver...

quando eu dou um insert na tabela pra prencher os campos mas não quero gravar o registro [que é o caso se o registro já existir], eu tenho q dar um cancel na tabela....

então...ali no lugar de Exit, eu coloco dm.tblCadPro.Cancel

só que cancelando o insert ao clicar no botao para gravar, o usuário perderá tudo que digitou só por causa do código que já existe...então terá q digitar tudo de novo com um outro código....

então me indicaram verificar a existencia do registro no OnExit da Dbedit do código.....mas aí surge um problema...

é o seguinte..eu uso um comando para preencher o código com zeros a esquerda até o código ficar com 13 caracteres.

este comando eu coloquei no botão gravar, então o código era preenchido com zeros e assim era gravado, com todos os zeros.

mas como é melhor eu verificar a existencia do código no OnExit, então coloquei o comando p/ prencher com zeros no OnExit tambem, antes da verificação.

então, quando saio do campo de código, se o código já existe, o Dbedit limpa e recebe o foco de volta..se não existe, o prenchimento dos outros campos continua normalmente.

mas quando vou gravar, os zeros somem, não são gravados..apenas os números digitados no teclado são gravados.

Por que que os zeros são gravados quando o comando está no botão gravar mas não são gravados quando o campo código é preenchido com eles em seu OnExit???

Código no OnExit do DBEdit

procedure TfrmCadPro.txtCadPro_CodProExit(Sender: TObject);
var i: integer;
begin

if not (txtCadPro_CodPro.Text = '') then
  begin
    for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do
      txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text;
  end;


with dm.QueryBusca do
begin
  Close;
  SQL.Clear;

  SQL.Add('SELECT * FROM ESTAPRO.dbf');
  SQL.Add('WHERE PROCOD = :pCODIGO');

  ParambyName('pCODIGO').AsString := txtCadPro_CodPro.Text;
  Open;

  if not(IsEmpty) then
  begin
    ShowMessage('       Registro já existente!');
    txtCadPro_CodPro.SetFocus;
    txtCadPro_CodPro.Text := '';
  end;
end;
Código no botão Gravar
if not (txtCadPro_CodPro.Text = '') then
  begin
    for i:=1 to txtCadPro_CodPro.MaxLength - length(txtCadPro_CodPro.Text) do
      txtCadPro_CodPro.Text := '0' + txtCadPro_CodPro.Text;
  end;


with dm.QueryBusca do
begin
  Close;
  SQL.Clear;

  SQL.Add('SELECT * FROM ESTAPRO.dbf');
  SQL.Add('WHERE PROCOD = :pCODIGO');

  ParambyName('pCODIGO').AsString := txtCadPro_CodPro.Text;
  Open;

  if not(IsEmpty) then
  begin
    ShowMessage('       Registro já existente!');
    dm.tblCadPro.Cancel;
end
  else
  begin
    dm.tblCadPro.Post;
    dm.tblCadPro.Last;
  end;
end;

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

  • 0
é o seguinte..eu uso um comando para preencher o código com zeros a esquerda até o código ficar com 13 caracteres.

...

mas quando vou gravar, os zeros somem, não são gravados..apenas os números digitados no teclado são gravados.

Gabriel Cabral, qual o tipo de dados do campo PROCOD nesta sua tabela?

Por que que os zeros são gravados quando o comando está no botão gravar mas não são gravados quando o campo código é preenchido com eles em seu OnExit???
é algo bem estranho, já que o código aparentemente é o mesmo em ambos os locais. O código está mesmo sendo gravado com o zeros na tabela, ou você observou isto durante a depuração?
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...