Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

maquinavirtual

delphi 7 - evitar nome repetido

Recommended Posts

Boa Tarde,

Uso delphi 7 e firebird e componentes paleta interbase.

Estou com dificuldade de criar uma query vara evitar registrar nomes repetidos, entao criei o codigo no evento BeforePost (antes de salvar) da tabela:


procedure TDTM.IBTABcadastroBeforePost(DataSet: TDataSet);
BEGIN
  begin
    //procedimento antes de clicar em salvar
    //query cria codigo ao salvar
    if IBTABcadastro.State = dsInsert then
     begin
       IBQRYcadastro.Close;
       IBQRYcadastro.Open;
       IBTABcadastroCodigocadastro.Value:=IBQRYcadastroMAIORCODIGOCADASTRO.Value + 1;
     end;
  end;

  

  begin //query verificar nome repetido
    DTM.IBQRYregisRepetido.Close;
    DTM.IBQRYregisRepetido.ParamByName('PRMregisrepetido').AsString:=''+ DTM.IBTABcadastroNOMECOMPLETO.Text +'%'; //''+ dbEditNomeCompleto.Text +'%';
    DTM.IBQRYregisRepetido.Open;
    DTM.IBTABcadastroNOMECOMPLETO.Clear;
    if (DTM.IBQRYregisRepetido.RecordCount >=1) then
     else //se resultado da pesquisa for maior ou igual a 1
      begin
        //messagebeep(16);
        //ApplicationHandleException(FormPesquisaCadastro.'Um registro com o mesmo'#13'nome foi encontrado.,AgenTel - Salvar,mb_Ok+MB_ICONQUESTION);
        dtm.IBTABcadastro.Cancel;
        Abort;
      end;
    end;
END;

Neste caso a query ate identifica o nome repetido. Exemplo:

Se possuo na tabela o nome fulano de tal neste caso se eu digitar o mesmo fulano de tal na hora do cadastro ela identifica que o nome ja existe e cancela o registro. Entao se eu entrar com o nome f ou qualquer outra letra (A ate Z) ele acusa que o nome ja existe, nao deixando cadastrar.

Na hora que vou editar tambem nao funciona corretamente.

 

Aguardo uma resposta. Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi direito, sua intenção era mostrar a mensagem quando a pesquisa retornasse algo no recordcount certo? Se sim, o else que tem neste trecho está sobrando....

 

if (DTM.IBQRYregisRepetido.RecordCount >=1) then 
     else //se resultado da pesquisa for maior ou igual a 1 
      begin 
        //messagebeep(16); 
        //ApplicationHandleException(FormPesquisaCadastro.'Um registro com o mesmo'#13'nome foi encontrado.,AgenTel - Salvar,mb_Ok+MB_ICONQUESTION); 
        dtm.IBTABcadastro.Cancel; 
        Abort; 
      end; 
    end; 

Veja o que está dizendo ao programa no código acima: se retornar RecordCount >=1 não faça nada senão mostre mensagem e cancele.

 

Experimente tirar o else do código acima e tentar cadastrar o dado.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se eu entendi direito, sua intenção era mostrar a mensagem quando a pesquisa retornasse algo no recordcount certo? Se sim, o else que tem neste trecho está sobrando....

 

if (DTM.IBQRYregisRepetido.RecordCount >=1) then 
     else //se resultado da pesquisa for maior ou igual a 1 
      begin 
        //messagebeep(16); 
        //ApplicationHandleException(FormPesquisaCadastro.'Um registro com o mesmo'#13'nome foi encontrado.,AgenTel - Salvar,mb_Ok+MB_ICONQUESTION); 
        dtm.IBTABcadastro.Cancel; 
        Abort; 
      end; 
    end; 

Veja o que está dizendo ao programa no código acima: se retornar RecordCount >=1 não faça nada senão mostre mensagem e cancele.

 

Experimente tirar o else do código acima e tentar cadastrar o dado.

 

[]'s

 

Vou tentar retirar o else que você referiu porem meu objetivo e forcar o usuario a digitar um nome diferente para que nao cadastre um usuario repetido. Aguardo ajuda. Valeu.

 

Retirei o else que você sugeriu, mas dae ele salvou o registro mas com o campo em branco, mas este erro tambem acontecia antes de remover este else.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

 

Esta instrução está limpando o campo NOMECOMPLETO:

 

DTM.IBTABcadastroNOMECOMPLETO.Clear;

 

Referente à verificação do nome repetido, deve haver algum problema na sua query, talvez ela não esteja trazendo os valores esperados, tente testá-la.

 

Um abraço,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.