ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro de busca [RESOLVIDO]
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Ter Nov 24, 2009 1:08 pm    Assunto: Erro de busca [RESOLVIDO] Responder com Citação

Estava sem net.

Bom, eu uso Access como BD, ADOtable e ADOconnection. A busca é feita pelo comando adotable1.locate. Fica mais ou menos assim:

procedure TForm3.Button1Click(Sender: TObject);
begin
if adotable1.locate('retirada',edit2.text,[])=true then
begin
adotable1.First;
listbox1.items.add(adotable1.fieldvalues['equipamento'])
end
else
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;

Isso funciona, mas só mostra o primeiro cadastro. É o seguinte: faço o cadastro e funciona bem, mas na hora da consulta ele mostra somente o primeiro. Assim: digito um número (que chamo de retirada) e aperto "Pesquisar". Na listBox aparece o primeiro cadastro feito com o número digitado, a descrição do campo "equipamento" aparece na listBox (igual a registrada no cadastro), quando clico nela, es demais informações referentes ao equipamento específico aparece nas demais edits. Só que podem haver mais de 1 equipamento com o mesmo número, gostaria de um comando para filtrar e "jogar" na listbox todos os equipamentos cadastrados com o numero em pesquisa.

Um membro do forum propos que eu utilizasse um adoquery e fazer o seguinte:

coloca uma ADOQuery no form, na propriedade dataSource, link no no ADOConection, na propriendade SQl da Query coloque algo como:

Select equipamento From adotable1 Where retirada Like=:%

Mas não está dando certo. alguem pode me ajudar.

A já me falaram para tentar retirar a linha do adotable.first; do comando, mas continua somente buscando o primeiro. Alguma solução?

Até mais...


Editado pela última vez por Warden em Qui Nov 26, 2009 3:45 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Ter Nov 24, 2009 1:26 pm    Assunto: Re: Erro de busca Responder com Citação

Warden escreveu:

Um membro do forum propos que eu utilizasse um adoquery e fazer o seguinte:

coloca uma ADOQuery no form, na propriedade dataSource, link no no ADOConection, na propriendade SQl da Query coloque algo como:

Select equipamento From adotable1 Where retirada Like=:%


Amigo, na verdade link a propriedade Conection no seu ADOADOConection,

Ai em botão coloque este comonado

Código:

White ADOQuery do
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.ADD('
Select equipamento From adotable1 Where retirada Like :dados')
ADOQuery.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery.Close;


Assim ele vai retornat todos os equipamentos cadastrados
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Ter Nov 24, 2009 3:25 pm    Assunto: Está dando um erro... Responder com Citação

Olá, obrigado por tentar me ajudar outra vez. Bom, fiz o que vc mandou e da um erro que não entendo. Primeiramente tento colocar o "Active" do ADOquery true, mas aparece uma mensagem de erro dizendo:

"Objeto Parameter definido incorretamente. As informações são inconsistentes ou incompletas."

Blz, fiz a conexão com o ADOConection, adicionei o "Select equipamento From adotable1 Where retirada Like=:%" na propriedade SQL como falou, e escrevi o código que vc mandou no botão pesquisar, ficou assim:



Código:
procedure TForm3.Button1Click(Sender: TObject);
begin
if adotable1.locate('retirada',edit2.text,[])=true then
  begin
  listbox1.items.add(adotable1.fieldvalues['equipamento'])
  end
  else
  messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);

essa da erro :( White ADOQuery do :( essa da erro
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados')
ADOQuery.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery.Close;
  end;



O erro está na linha marcada acima e diz:

[Error] Unit3.pas(169): Undeclared identifier: 'White'
[Error] Unit3.pas(169): 'END' expected but 'DO' found
[Fatal Error] Project1.dpr(13): Could not compile used unit 'Unit3.pas'

Acho que é só isso, se puder me dar mais um help seria ótimo, valeu amigo.

Até mais...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Ter Nov 24, 2009 3:40 pm    Assunto: Re: Está dando um erro... Responder com Citação

Warden escreveu:
Olá, obrigado por tentar me ajudar outra vez. Bom, fiz o que vc mandou e da um erro que não entendo. Primeiramente tento colocar o "Active" do ADOquery true, mas aparece uma mensagem de erro dizendo:

"Objeto Parameter definido incorretamente. As informações são inconsistentes ou incompletas."


Blz, não precisa colocar coomo true, deixa false mesmo.

Warden escreveu:
Blz, fiz a conexão com o ADOConection, adicionei o "Select equipamento From adotable1 Where retirada Like=:%" na propriedade SQL como falou, e escrevi o código que vc mandou no botão pesquisar, ficou assim:

Código:
procedure TForm3.Button1Click(Sender: TObject);
begin
if adotable1.locate('retirada',edit2.text,[])=true then
  begin
  listbox1.items.add(adotable1.fieldvalues['equipamento'])
  end
  else
  messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);

essa da erro :( White ADOQuery do :( essa da erro
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados')
ADOQuery.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery.Close;
  end;



O erro está na linha marcada acima e diz:

[Error] Unit3.pas(169): Undeclared identifier: 'White'
[Error] Unit3.pas(169): 'END' expected but 'DO' found
[Fatal Error] Project1.dpr(13): Could not compile used unit 'Unit3.pas'

Acho que é só isso, se puder me dar mais um help seria ótimo, valeu amigo.


Ta deixe somente este código no botão pesquisar
Código:

with ADOQuery do
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados');
ADOQuery.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery.Open;

if not ADOQuery.IsEmpty
  then
     begin
      listbox1.items.add(ADOQuery.FieldByName('equipamento').value);
end
   else
     begin
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;


Testa ai, agora é pra funcionar, não fiz o teste pois estou sem delphi aqui, mas qualquer coisa posta ai novamente...
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Ter Nov 24, 2009 5:41 pm    Assunto: Persistente... Responder com Citação

Olá amigo, sei que já estou ficando chato, mas o erro persiste. Na mesma linha de comando, da erro na linha:

Código:
with ADOQuery do


O erro é:

Citação:
[Error] Unit3.pas(165): Declaration expected but 'IF' found
[Error] Unit3.pas(168): Undeclared identifier: 'ADOQuery'
[Error] Unit3.pas(168): Missing operator or semicolon
[Error] Unit3.pas(170): ';' expected but 'ELSE' found


Além disso aconteceu algo estranho. Eu tentei deletar o adotable e deixar somente o adoquery, quando fiz isso, o erro que ocorria na linha que descrevi acima parou de acontecer e passou aocorrer no comando
Citação:
"adotable1.delete;"
ai, deletei esse comando e o erro voltou para a linha que descrevi acima. Bom, além da pesquisa, nessa mesma tela tenho rotina de alteração e exclusão, todos funcionando e usando o adotable.

É isso, continua dando erro. Bom desculpe a Inconveniência. Tenho q resolver isso, já estou desde o inicio do ano tantando terminar esse software e meu tempo está acabando.. Valeu pela força... No aguardo...

Até mais...


Editado pela última vez por Warden em Ter Nov 24, 2009 7:18 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcellomm
Colaborador
Colaborador


Registrado: Segunda-Feira, 7 de Novembro de 2005
Mensagens: 1045

MensagemEnviada: Ter Nov 24, 2009 7:07 pm    Assunto: Responder com Citação

Acho que faltou um begin depois do do em
Código:
with ADOQuery do
e então coloque mais um end; no final da instrução.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Ter Nov 24, 2009 7:45 pm    Assunto: Quase 100% Responder com Citação

Olha, usei o comando:

Código:
procedure TForm3.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados');
ADOQuery1.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery1.Open;

if not ADOQuery1.IsEmpty
  then
     begin
      listbox1.items.add(ADOQuery1.FieldByName('equipamento').value);
end
   else
     begin
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;

end;


Não funcionava por que eu não estava especificando qual ADOquery estava usando, coloquei o "1" depois do ADOquery e rodou, não deu erro em nem uma linha. Fiquei muito feliz nessa hora, mas alagria de pobre dura pouco. Cadastrei 3 equipamentos com a mesma numeração para testar, ver se os 3 iriam aparecer na listbox, bom, deu errado. Diz que não encontra a tabela. Não sei se é devido ao ADOtable, mas não posso tirá-lo, pois com ele realizo rotinas de exclusão e alteração (com o ADOtable1.edit; e ADOtable1.delete;).

O erro que ocorre quando clico em pesquisar é:

Citação:
"O mecanismo de banco de dados Microsoft Jet não encontrou a tabela de entrada ou consulta 'ADOtable1'. Certifique-se de que ela existe e de que seu nome está digitado corretamente."


Isso ocorre quando clico em pesquisar usando o comando do ADOquery dado pelo nosso amigo edsonalves (descrito acima).

Bom, é somente isso, espero que possam continuar me ajudando. Obrigado e...
Até mais...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qua Nov 25, 2009 7:25 am    Assunto: Re: Quase 100% Responder com Citação

Warden escreveu:
Olha, usei o comando:

Código:
procedure TForm3.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados');
ADOQuery1.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery1.Open;

if not ADOQuery1.IsEmpty
  then
     begin
      listbox1.items.add(ADOQuery1.FieldByName('equipamento').value);
end
   else
     begin
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;

end;


Não funcionava por que eu não estava especificando qual ADOquery estava usando, coloquei o "1" depois do ADOquery e rodou, não deu erro em nem uma linha. Fiquei muito feliz nessa hora, mas alagria de pobre dura pouco. Cadastrei 3 equipamentos com a mesma numeração para testar, ver se os 3 iriam aparecer na listbox, bom, deu errado. Diz que não encontra a tabela. Não sei se é devido ao ADOtable, mas não posso tirá-lo, pois com ele realizo rotinas de exclusão e alteração (com o ADOtable1.edit; e ADOtable1.delete;).

O erro que ocorre quando clico em pesquisar é:

Citação:
"O mecanismo de banco de dados Microsoft Jet não encontrou a tabela de entrada ou consulta 'ADOtable1'. Certifique-se de que ela existe e de que seu nome está digitado corretamente."


Isso ocorre quando clico em pesquisar usando o comando do ADOquery dado pelo nosso amigo edsonalves (descrito acima).

Bom, é somente isso, espero que possam continuar me ajudando. Obrigado e...
Até mais...


Amigo, neste caso, foi erro mesmo que te passei, verifique no seu banco de dados qual é o nome da tabela que vc quer fazer a pesquisa ai substitua o ADOtable1 pelo nome da sua tabela.

procedure TForm3.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('Select equipamento From adotable1 Where retirada Like :dados');
ADOQuery1.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery1.Open;

if not ADOQuery1.IsEmpty
then
begin
listbox1.items.add(ADOQuery1.FieldByName('equipamento').value);
end
else
begin
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;

end;

Qualquer coisa posta ai de novo.
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Qua Nov 25, 2009 12:30 pm    Assunto: Responder com Citação

Cara, a coisa tá feia aqui.

Fiz as alterações na unit, mas ainda continua puxando
só o primeiro registro.
Não dá erro nenhum e o programa roda legal, mas esse detalhe
ainda tá funcionando no estilo do locate.

Mudei o adotable1 para o nome certo da tabela na propriedade
SQL da ADOQuery também, mas não dá em nada.

Não tenho mais idéia do que fazer, cara...
Me dá uma luz aí, fio... Pelo amor de Deus...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qua Nov 25, 2009 1:07 pm    Assunto: Responder com Citação

Warden escreveu:
Cara, a coisa tá feia aqui.

Fiz as alterações na unit, mas ainda continua puxando
só o primeiro registro.
Não dá erro nenhum e o programa roda legal, mas esse detalhe
ainda tá funcionando no estilo do locate.

Mudei o adotable1 para o nome certo da tabela na propriedade
SQL da ADOQuery também, mas não dá em nada.

Não tenho mais idéia do que fazer, cara...
Me dá uma luz aí, fio... Pelo amor de Deus...


Cara agora que vi que vc faz a busca pela retirada, muda o campo no código do botão pesquisar em vez de equipamento coloque *


procedure TForm3.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('Select * From adotable1 Where retirada Like :dados');
ADOQuery1.Parameters[0].value:= '%'+trim(edit2.text)+'%';
ADOQuery1.Open;

if not ADOQuery1.IsEmpty
then
begin
listbox1.items.add(ADOQuery1.FieldByName('equipamento').value);
end
else
begin
messagebox(0,'Retirada não encontrada','Fahrenheit -- Warden 2010',mb_ok + mb_iconstop);
end;

end;

Ve ai...
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Qua Nov 25, 2009 1:47 pm    Assunto: Responder com Citação

Olá amigão....

Bom, agradeço sua ajuda, agora o erro é diferente. O programa roda, digito no campo de pesquisa a numeração e aperto o botão "pesquisar", ele diz o seguinte:

Citação:
Project project1.exe raised exception class EDatabaseErro with message ADOQuery1: field 'equipamento' not found.


É isso que ocorre. Mudei o que vc pediu, mas dá esse erro que nao sei o que é. Mais alguma idéia? Valeuuu..

Até mais...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qua Nov 25, 2009 1:55 pm    Assunto: Responder com Citação

Warden escreveu:
Olá amigão....

Bom, agradeço sua ajuda, agora o erro é diferente. O programa roda, digito no campo de pesquisa a numeração e aperto o botão "pesquisar", ele diz o seguinte:

Citação:
Project project1.exe raised exception class EDatabaseErro with message ADOQuery1: field 'equipamento' not found.


É isso que ocorre. Mudei o que vc pediu, mas dá esse erro que nao sei o que é. Mais alguma idéia? Valeuuu..

Até mais...


Vc tem na sua tabela essa campo equipamento?
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Qua Nov 25, 2009 2:09 pm    Assunto: Responder com Citação

Tenho sim, vou lhe explicar:

O cadastro é feito para armazenar equipamentos de hospitais. O número usado é a chamada retirada, eu pesquiso pela retirada, ele mostra o nome do equipamento na listBox (podem existir mais de 1 equipamento com a mesma numeração), clico no equipamento e aparece nas demais edits as outras informações. De qual hospital ele é, qual setor, a data que ele entrou, etc...

Bom, tudo isso funciona, mas na hora de pesquisar pela retirada, ele só mostra o primeiro registro com a numeração, se, por exemplo, existirem 10 equipamentos com com a mesma numeração, é feito o cadastro 1 a 1. E na consulta ele deve verificar no BD todos os equipamentos com a numeração e jogar na listbox. É isso, estou no aguardo...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
edsonalves
Colaborador
Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009
Mensagens: 1938
Localização: Bauru - SP

MensagemEnviada: Qua Nov 25, 2009 2:27 pm    Assunto: Responder com Citação

Amigão da uma olhada la sua caixa de Mensagens Particulares que mandei uma mensagem pra vc.
_________________
Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Warden
Novato
Novato


Registrado: Domingo, 8 de Novembro de 2009
Mensagens: 46

MensagemEnviada: Qua Nov 25, 2009 3:02 pm    Assunto: Responder com Citação

Te mandei um e-mail, depois da uma olhada lá valeu.... Obrigado pela força...No aguardo...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB