nsouza Postado Março 11, 2009 Denunciar Share Postado Março 11, 2009 (editado) Colegas,1- tenhum um form de ordem de serviço, gostaria que quando alguém fosse digitar uma ordem de serviçoe 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 NumOsDesde já obrigado! Editado Março 11, 2009 por nsouza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ZueRa Postado Março 11, 2009 Denunciar Share Postado Março 11, 2009 (editado) Olá amigo.Acredito que possa fazer assim:no evento OnKeyPress do Edit, DBEdit [...] adicione o códigoprocedure 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 TblOrdemServicoPS: obviamente terá que adicionar uma Query para retornar o resultado acima. Editado Março 11, 2009 por ZueRa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 11, 2009 Denunciar Share Postado Março 11, 2009 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 thenLembrem-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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ZueRa Postado Março 11, 2009 Denunciar Share Postado Março 11, 2009 Uhm, entendi Micheus.Obrigado pela explicação =D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nsouza
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 nsouzaLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
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.