Ir para conteúdo

Arquivado

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

jeanef28

[Resolvido] fazendo uma pesquisa(digitando codigo) e traz nome

Recommended Posts

quero fazer uma pesquisa ...

digito uma codigo de um funcionarios no dbedit ou edit e trago o nome funcionario em outro label...

não quero utilizar botao de pesquisa.. no proprio campo de edit...

como faço isso

se alguma puder me ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente utilizar "Select * from tabela where nome linke %'+EdPesquisa.text+'%'. Não conheço muito banco de dados com delphi, logo alguem vem e t diz algo mais consistente. Mas é por aí

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia ...

Haja vista que tu não quer usar botão, então coloque o código abaixo no evento onChange do componente Edit ou DBEdit:

 

if Trim(txtCodigoFunc.Text) <> '' then
begin
 with ADOQuery1 do
 begin
 Close;
 SQ.Clear;
 SQL.Add('SELECT');
 SQL.Add(' *');
 SQL.Add('FROM');
 SQL.Add(' FUNCIONARIOS');
 SQL.Add('WHERE');
 SQL.Add(' ID_FUNCIONARIO = ' + txtCodigoFunc.Text);
 Open;
 end;

 lblNomeFunc.Caption := ADOQuery1.FieldByName('NOMEFUNCIONARIO').Text;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada rodrigo... é isso mesmo ;;;;

so uma coisa ele da um erro !!!!!

 

conversion failed when converting the varchar value '44x 'to data type int.

 

se eu digitar uma matricula que existe ex...201 ele da esse erro

se eu colocar a matricula que existe ex:20 ele traz o nome do funcionario....

 

sabe me dizer porque da esse erro....

outra coisa tambem.. se puder me ajudar quero pegar esse codigo que pesquisei quero gravar em outra adoQuery...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada rodrigo... é isso mesmo ;;;;

so uma coisa ele da um erro !!!!!

 

conversion failed when converting the varchar value '44x 'to data type int.

se eu digitar uma matricula que existe ex...201 ele da esse erro

se eu colocar a matricula que existe ex:20 ele traz o nome do funcionario....

 

sabe me dizer porque da esse erro....

outra coisa tambem.. se puder me ajudar quero pegar esse codigo que pesquisei quero gravar em outra adoQuery...

 

Oie jeanef28 ... rode sua aplicação passo a passo (F7 ou F8) e veja/poste aqui neste tópico a linha em que ocorre este erro, pois este erro é um erro de tentativa de conversão de tipo de dados para o tipo inteiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

jeane, pela própria mensagem já dá para ver o erro ocorrido.... você definiu que sua query deve receber um valor inteiro, mas digitou o valor '44x ', ou seja, em vez de enviar um número você enviou uma string, dai o erro.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse é o meu primeiro topico....

Como o Rodrigo postou e fiz assim ve se esta correto.

Estou em duvida criei um DM e coloque e criei essa query ADOQ_FUNCIONARIOS, no SQL eu coloco algum comando select ou deixo em branco...

 

Esse codigo que pesquisei quero gravar em outra Query: ADOQ_Entrega.

 

 

procedure Tfrm_ConEPI.edtNumFuncExit(Sender: TObject);

begin

 

if Trim(edtNumFunc.Text) <> '' then

begin

 

dm.ADOQ_FUNCIONARIOS.Close;

dm.ADOQ_FUNCIONARIOS.SQL.Clear;

dm.ADOQ_FUNCIONARIOS.SQL.Add('SELECT');

dm.ADOQ_FUNCIONARIOS.SQL.Add(' nome');

dm.ADOQ_FUNCIONARIOS.SQL.Add('FROM');

dm.ADOQ_FUNCIONARIOS.SQL.Add(' FUNCIONARIOS');

dm.ADOQ_FUNCIONARIOS.SQL.Add('WHERE');

dm.ADOQ_FUNCIONARIOS.SQL.Add(' NumMatr = '+ edtNumFunc.text);

dm.ADOQ_FUNCIONARIOS.Open;

 

end;

 

lblNome.Caption := DM.ADOQ_FUNCIONARIOS.FieldByName('NOME').Text;

end;

 

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá jeane, sem problemas em ser seu primeiro tópico, estamos aqui para ajudar no que for possível... pelo que li do seu código, ele está correto, mas da forma que está ele irá carregar o label corretamente apenas se o edtNumFunc.Text tiver sido preenchido com números... contudo, da forma que está, se você não estiver fazendo uma validação no evento onkeypress do edit, se o usuário digitar algum valor não numérico e mandar executar, a consulta vai dar erro... outra coisa: por ADD do sql você pode mandar comandos de até 255 caracteres, isto é, você poderia montar a mesma query desta forma para poupar linhas de código:

 


procedure Tfrm_ConEPI.edtNumFuncExit(Sender: TObject);
begin
    //Se quiser carregar apenas dados quando fizer a pesquisa, limpe o valor do label aqui
	lblNome.Caption := EmptyStr;

	if Trim(edtNumFunc.Text) <> '' then
	begin

		dm.ADOQ_FUNCIONARIOS.Close;
		dm.ADOQ_FUNCIONARIOS.SQL.Clear;
		dm.ADOQ_FUNCIONARIOS.SQL.Add('SELECT nome FROM FUNCIONARIOS WHERE NumMatr = '+ edtNumFunc.text);
		dm.ADOQ_FUNCIONARIOS.Open;

    	//Se quiser carregar apenas dados quando fizer a pesquisa, coloque a carga do label aqui
 		lblNome.Caption := DM.ADOQ_FUNCIONARIOS.FieldByName('NOME').Text;

    end;
end;

end.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jean o CHRNOS (UM CARA QUE CONHECE MUITO DO DELPHI), quis dizer que do modo como você montou o seu select:

 

"WHERE NumMatr = '+ edtNumFunc.text" Só aceita números:

 

"WHERE NumMatr = '+ QuotedtStr(edtNumFunc.text)" Aceita Strings(O campo 'NumMatr' tem que aceitar Strings)

 

"WHERE NumMatr like '+ QuotedtStr(edtNumFunc.text)" Aceita números e Strings

 

 

A partir daí você analisa qual delas serve !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jeane, complementando a resposta do colega acima, quando se trabalha com campos que permitem gravar dados alfanuméricos (letras e números), sempre deve-se passar para a query de pesquisa o valor entre aspas... para o seu select funcionar, neste caso, basta acrescentar o comando QuotedStr, que ele irá acrescentar as aspas necessárias, como citado pelo wllf no post acima. Agora, se for usar o like para fazer consultas por parte do campo (usando o %), o seu QuotedStr seria algo assim:

 

Query.Sql.Add('Select * from tabela where campo like ' + QuotedStr('%' + edit.text + '%'));
ou 
Query.Sql.Add('Select * from tabela where campo like ' + QuotedStr('%' + edit.text));
ou
Query.Sql.Add('Select * from tabela where campo like ' + QuotedStr(edit.text + '%'));

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou pessoal muito obrigada...

So uma coisa pode me ajudar esse codigo que pesquisei queria gravar em outra query...

eu coloquei um edit como faço para gravar so o codigo, o nome não quero gravar....

obrida

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem problemas Jeane, estamos aqui para ajudar... mas poderia explicar melhor qual é o problema que tem agora? Detalhar mais o problema?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos la!!! vou explicar..

 

meu codigo está assim funcionando.

 

procedure Tfrm_ConEPI.edtNumFuncExit(Sender: TObject);

begin

 

lblNome.Caption := EmptyStr;

if Trim(edtNumFunc.Text) <> '' then

begin

 

dm.ADOQ_FUNCIONARIOS.Close;

dm.ADOQ_FUNCIONARIOS.SQL.Clear;

dm.ADOQ_FUNCIONARIOS.SQL.Add('SELECT nome FROM FUNCIONARIOS WHERE nummatr like ' + QuotedStr('%' + edtNumFunc.text));

dm.ADOQ_FUNCIONARIOS.Open;

 

lblNome.Caption := DM.ADOQ_FUNCIONARIOS.FieldByName('NOME').Text;

 

 

end;

end;

Do jeito que ta o codigo, digito o matricula do funcionario no edit e aparece no label o nome desse funcionario.

Aqui estou fazendo apenas uma pesquisa que qual a matricula do funcionario entao quero pegar esse pesquisa salvar em outra tabela ou seja uma query (DM.ADOQ_ENTREGA) so o numero do funcionario. o nome não quero salvar, pois não criei o campo para o nome so o matricula do funcionario.

 

acho que é mais facil fazer no dbedit, mas não sei o comando. para so gravar a matricula do funcionario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Jeane... desculpa a demora em postar, as coisas tão corridas por aqui... então, vamos as questões:

 

1°) No seu edit você terá um número de matrícula parcial, certo? A questão que fica é: se eu tiver N funcionários com o parcial da matrícula, como você vai escolher qual é a matrícula que lhe interessa realmente? Vai ficar digitando a matrícula até acertar qual o que deseja ou está usando algum componente visual (como o DBGrid) para exibir os dados da pesquisa?

 

2°) Essa gravação que quer fazer é simples... basta capturar com alguma variável a matrícula e usar outra TQuery para gravar a informação na tabela de destino... para tanto, terá que alterar sua sql de pesquisa para trazer também a matrícula no retorno (para capturar a mesma via código) ou simplesmente pegar o valor do edit para isso... ai depende de como está montada a sua rotina.

 

[]'s

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.