 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Ter Nov 24, 2009 1:08 pm Assunto: Erro de busca [RESOLVIDO] |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Ter Nov 24, 2009 1:26 pm Assunto: Re: Erro de busca |
|
|
| 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 |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Ter Nov 24, 2009 3:25 pm Assunto: Está dando um erro... |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Ter Nov 24, 2009 3:40 pm Assunto: Re: Está dando um erro... |
|
|
| 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 |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Ter Nov 24, 2009 5:41 pm Assunto: Persistente... |
|
|
Olá amigo, sei que já estou ficando chato, mas o erro persiste. Na mesma linha de comando, da erro na linha:
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 |
|
 |
marcellomm Colaborador

Registrado: Segunda-Feira, 7 de Novembro de 2005 Mensagens: 1045
|
Enviada: Ter Nov 24, 2009 7:07 pm Assunto: |
|
|
| Acho que faltou um begin depois do do em e então coloque mais um end; no final da instrução. |
|
| Voltar ao Topo |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Ter Nov 24, 2009 7:45 pm Assunto: Quase 100% |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qua Nov 25, 2009 7:25 am Assunto: Re: Quase 100% |
|
|
| 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 |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Qua Nov 25, 2009 12:30 pm Assunto: |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qua Nov 25, 2009 1:07 pm Assunto: |
|
|
| 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 |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Qua Nov 25, 2009 1:47 pm Assunto: |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qua Nov 25, 2009 1:55 pm Assunto: |
|
|
| 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 |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Qua Nov 25, 2009 2:09 pm Assunto: |
|
|
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 |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
|
| Voltar ao Topo |
|
 |
Warden Novato

Registrado: Domingo, 8 de Novembro de 2009 Mensagens: 46
|
Enviada: Qua Nov 25, 2009 3:02 pm Assunto: |
|
|
| Te mandei um e-mail, depois da uma olhada lá valeu.... Obrigado pela força...No aguardo... |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|