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

Impedir número já registrado


nsouza

Pergunta

Colegas,

1- tenhum um form de ordem de serviço, gostaria que quando alguém fosse digitar uma ordem de serviço

e ela já existisse, no evento ao sair do campo retornasse a mensagem "Numero já cadastrado"

2- Preciso tb do contrario, quando não existisse a Ordem de Serviço retornasse a mensagem" Este número não foi cadastrado"

a tabela é: tblOrdemServico o campo NumOs

Desde já obrigado!

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

3 respostass a esta questão

Posts Recomendados

  • 0

Olá amigo.

Acredito que possa fazer assim:

no evento OnKeyPress do Edit, DBEdit [...] adicione o código

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  begin
    if (key = #13) and (Edit1.Text = '') then
      begin
        Application.MessageBox('Digite algo para a pesquisa.','Título',MB_ok +
        MB_defbutton1 + MB_iconexclamation);
      end
      else
      if (key = #13) and (Query1.IsEmpty = true) then
        begin
          Application.MessageBox('Este número não foi cadastrado','Título',MB_ok +
          MB_defbutton1 + MB_iconexclamation);
        end
      else
      if (key = #13) and (not(Query1.IsEmpty = true)) then
        begin
          Application.MessageBox('O registro já existe','Título',MB_ok +
          MB_defbutton1 + MB_iconexclamation);
          Edit1.SetFocus;
          Abort;
        end;
  end;
isto serve? Qualquer dúvida poste aí, abraço. Ah sim, na proprieadade SQL da Query você pode adicionar o código abaixo (digo PODE pois não há somente esta forma para fazer a inserção destes parâmetros).
select * from TblOrdemServico

PS: obviamente terá que adicionar uma Query para retornar o resultado acima.

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

  • 0

nsouza, algum adendum ao que o colega Zuera postou...

Supondo que você use a query (Query1) para fazer a consulta no banco pelo nº da OS desejada, faça isto de forma a poupar tráfego de dados entre sua aplicação e o servidor.

Digamos que você quer apenas conferir se o número existe e não vai precisar trazer mais nenhuma informação desta OS caso ela exista, então, não use o "*", use apenas o próprio campo:

select NumOS 
from OrdemServico where NumOs = :NumOS
Antes de executar a query, você deve passar o parâmetro NumOS (aquele que está declarado logo após o ":")
...
  Query1.ParamByName('NumOS').AsString := Edit1.Text;
  Query1.Open;
Considerando que você passou o nome tblOrdemServico, parece que você está utilizando um componente tipo table e talvez você apenas queira posicionar esta table no NumOS que o cara digitar. Para este caso, se esta sua tabela contiver um índice para o campo NumOS e você o tiver selecionado na propriedade IndexFieldName, você pode fazer uso do método FindKey ou até mesmo Locate. Zuera, é uma das práticas o uso de validação quando o usuário digita o ENTER (coisa herdada do bom e velho DOS), mas na prática, não há garantias de que o usuário vai fazer isto. No Windows (ambiente gráfico), é muito comum que o usuário use o mouse para mudar de campo e, neste caso, a opção citada pelo colega nsouza torna-se mais acertada (usar o evento OnExit) - assim a validação fica em um lugar só (ou é feita apenas uma única vez). O código que você postou, continua valendo para o uso neste evento - sem problemas. Mas, supondo que o colega use ele, com a query e tudo, há uma correção a fazer que é apontar a ele onde a parametrização e abertura da query devem ser feitas: 1) Mantendo o código no evento OnKeyPress. Vamos observar que para todas as opções dadas, a tecla pressionada teria que ser #13, então:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
  begin
    if Edit1.Text = '' then
    begin
      Application.MessageBox('Digite algo para a pesquisa.','Título', MB_ok +
        MB_defbutton1 + MB_iconexclamation);
    end
    else
    begin
      Query1.ParamByName('NumOS').AsString := Edit1.Text;
      Query1.Open;
      if Query1.IsEmpty then
      begin
        Application.MessageBox('Este número não foi cadastrado','Título',MB_ok +
          MB_defbutton1 + MB_iconexclamation);
      end
      else
      if not Query1.IsEmpty then
      begin
        Application.MessageBox('O registro já existe','Título',MB_ok +
          MB_defbutton1 + MB_iconexclamation);
        Edit1.SetFocus;
        Abort; 
      end;
  end;
end;
a chamada a Abort não seria necessária, já que não há mais nenhum código neste procedimento que pudesse ser executado após a mensagem. 2) Colocando o código no evento OnExit:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  if Edit1.Text = '' then
    ShowMessage('Digite algo para a pesquisa');
  else
  begin
    Query1.ParamByName('NumOS').AsString := Edit1.Text;
    Query1.Open;
    if Query1.EOF then
      ShowMessage('Este número não foi cadastrado');
    else
    begin
      Edit1.SetFocus;
      ShowMessage('O registro já existe');
    end;
  end;
end;

Uma dica: pensando de forma mais profissional, você não deve fazer um teste deste tipo: if Query1.IsEmpty = true then

Lembrem-se de que a expressão a ser avaliada pelo if será sempre uma expressão booleana (algo que retorne True ou False), logo, não faz sentido você testar if true = true then, basta que você use if true then. A expressão que não for verdadeira resultará na execução do código no else.

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,3k
×
×
  • Criar Novo...