SQL - ADOQuery
Amigos,
Coloquei em uma aplicação um ADOQuery onde em sua propriedade SQL coloquei esse código:
select * from Tab_Edificacoes where cod_Campo like sEd+´¬´
onde cod_Campo é o compo e sEd é uma variavel para o parâmetro.
Eu gostaria de que o campo também fosse uma variavel!
Como fazer isso???
Coloquei em uma aplicação um ADOQuery onde em sua propriedade SQL coloquei esse código:
select * from Tab_Edificacoes where cod_Campo like sEd+´¬´
onde cod_Campo é o compo e sEd é uma variavel para o parâmetro.
Eu gostaria de que o campo também fosse uma variavel!
Como fazer isso???
Caezar
Curtidas 0
Respostas
Michelli88
21/09/2005
select * from Tab_Edificacoes where cod_Campo like sEd+´¬´
Voce esqueceu do ´:´
select * from Tab_Edificacoes where cod_Campo like :sEd+´¬´
mas... nao entendo... como assim o campor ser uma variavel??
GOSTEI 0
Caezar
21/09/2005
Porque eu coloquei em um coboBox os campos da tabela!
Então na hora da busca quero escolher o compo em que eu vou fazer a busca!
Então na hora da busca quero escolher o compo em que eu vou fazer a busca!
GOSTEI 0
Michelli88
21/09/2005
No combo vc tem tipo: Nome, Codigo, Tipo e vc quer na hora decidir se vai pesquisar por codigo ou por nome?
Se for isso, vc vai ter q ter um select pra cada um...
Se for isso, vc vai ter q ter um select pra cada um...
GOSTEI 0
Rogick
21/09/2005
Vc pode fazer assim:
Onde [i:df22aef36b]combo[/i:df22aef36b] é a combobox e [i:df22aef36b]ADOQuery1[/i:df22aef36b] é sua query(lógico né? :wink: ) onde está os campos.
Espero ter ajudado.
ADOQuery1.SQL.Add(´Select * from Tab_Edificacoes where ´ + combo.Items[combo.ItemIndex] + ´ like :sEd´´¬´´´);
Onde [i:df22aef36b]combo[/i:df22aef36b] é a combobox e [i:df22aef36b]ADOQuery1[/i:df22aef36b] é sua query(lógico né? :wink: ) onde está os campos.
Espero ter ajudado.
GOSTEI 0
Caezar
21/09/2005
Amigo,
Tentei esse jeito e não deu muito certo!
Ele não faz nenhuma busca!
Tentei esse jeito e não deu muito certo!
Ele não faz nenhuma busca!
GOSTEI 0
Rjun
21/09/2005
Tente fazer assim:
E quando for passar o parâmetro, faça assim:
ADOQuery1.SQL.Add(´Select * from Tab_Edificacoes where ´ + combo.Items[combo.ItemIndex] + ´ like :sEd);
E quando for passar o parâmetro, faça assim:
ADOQuery1.Parameters.ParamByName(´sEd´).Value := QuotedStr(valor + ´¬´);
GOSTEI 0
Rogick
21/09/2005
Antes de Executar a query faça o seguinte:
[i:9f67b68cbd]O [u:9f67b68cbd]C:\[/u:9f67b68cbd] pode ser substituído por qq pasta de sua preferencia.[/i:9f67b68cbd]
Abra o arquivo [u:9f67b68cbd]sql.txt[/u:9f67b68cbd] gerado e veja como está saindo a query.
Ah, siga o exemplo de sql do Rjun. O meu estava errado. :lol:
ADOQuery1.SQL.SaveToFile(´C:\sql.txt´);
[i:9f67b68cbd]O [u:9f67b68cbd]C:\[/u:9f67b68cbd] pode ser substituído por qq pasta de sua preferencia.[/i:9f67b68cbd]
Abra o arquivo [u:9f67b68cbd]sql.txt[/u:9f67b68cbd] gerado e veja como está saindo a query.
Ah, siga o exemplo de sql do Rjun. O meu estava errado. :lol:
GOSTEI 0
Caezar
21/09/2005
Amigos,
Alguem pode ver o que acontece com esse código?
Estou tentando passar o campo a ser pesquisado do ComboBox(cbCampoBusca) para a variavel sCampo
Alguem pode ver o que acontece com esse código?
Estou tentando passar o campo a ser pesquisado do ComboBox(cbCampoBusca) para a variavel sCampo
procedure TformAbrir.btBuscarClick(Sender: TObject); var sCampo:string; begin dmConex.tb_Edific.SQL.Clear; dmConex.tb_Edific.SQL.Add(´Select * from Tab_Edificacoes where ´ + sCampo + ´ like :sEd´); CASE cbCampoBusca.ItemIndex OF 0:sCampo:=´cod_Laudo´; 1:sCampo:=´EmpresaSolicitante´; 2:sCampo:=´EmpresaAvalianda´; 3:sCampo:=´Cidade´ ; END; with dmConex.tb_Edific do begin close; Parameters.ParamByName(´sEd´).Value:=edPalavraBusca.Text; open; end; end;
GOSTEI 0
Rjun
21/09/2005
Qual o problema que está acontecendo? Está dando algum erro?
GOSTEI 0
Caezar
21/09/2005
Ele diz:
Erro de sintaxe, operador faltando na expressão like?
Erro de sintaxe, operador faltando na expressão like?
GOSTEI 0
Rjun
21/09/2005
Altere a linha em que você passa o parâmetro:
Parameters.ParamByName(´sEd´).Value := QuotedStr(edPalavraBusca.Text);
GOSTEI 0
Caezar
21/09/2005
Memo problema, será que não é a variavel sCampo???
GOSTEI 0
Rjun
21/09/2005
Agora que eu fui reparar. Coloque o case onde você atribui um valor para sCampo antes da linha que você monta o SQL.
GOSTEI 0
Caezar
21/09/2005
Agora não dá mais erro nenhum!
Porem ele não faz a busca e quando eu faço um debug e percebo que o comando sql não recebe nenhum valor!
Porem ele não faz a busca e quando eu faço um debug e percebo que o comando sql não recebe nenhum valor!
GOSTEI 0
Rjun
21/09/2005
procedure TformAbrir.btBuscarClick(Sender: TObject); var sCampo:string; begin // Acho que você poderia por esse items no combobox e // substituir esse case // //case cbCampoBusca.ItemIndex OF // 0: sCampo := ´cod_Laudo´; // 1: sCampo := ´EmpresaSolicitante´; // 2: sCampo := ´EmpresaAvalianda´; // 3: sCampo := ´Cidade´ ; //end; sCampo := cbCampoBusca.Items[cbCampoBusca.ItemIndex]; dmConex.tb_Edific.SQL.Clear; dmConex.tb_Edific.SQL.Add(´Select * from Tab_Edificacoes where ´ + sCampo + ´ like :sEd´); // Eu não gosto de usar WITH. Veja que aqui você está usando 3 // linhas a mais. dmConex.tb_Edific.close; dmConex.tb_Edific.Parameters.ParamByName(´sEd´).Value := edPalavraBusca.Text; dmConex.tb_Edific.open; end;
Quem não recebe valor? O parâmetro sED?
GOSTEI 0
Caezar
21/09/2005
Sabe quando marcamos um ponto para que na hora que executarmos a aplicação ele para no ponto.
Então, notei que o parametro sql não recebe valor, ele aparece assim:
dmConex.tb_Edific.SQL.Add()
Então, notei que o parametro sql não recebe valor, ele aparece assim:
dmConex.tb_Edific.SQL.Add()
GOSTEI 0
Rjun
21/09/2005
Acho que você esta engando, mas por via das dúvidas, acrescente a linha após você ter adicionado o SQL.
Veja se aparece a instrução SQL.
ShowMessage(dmConex.tb_Edific.SQL.Text);
Veja se aparece a instrução SQL.
GOSTEI 0
Caezar
21/09/2005
Me enganei mesmo!
Mas pelo que pude reparar na mensagem, parece que o campo está passando corretamente mas a var sEd não
Mensagem:
Select * from Tab_Edificacoes where cod_Laudo like : sEd
Mas pelo que pude reparar na mensagem, parece que o campo está passando corretamente mas a var sEd não
Mensagem:
Select * from Tab_Edificacoes where cod_Laudo like : sEd
GOSTEI 0
Rjun
21/09/2005
Era isso mesmo que ele tinha q mostrar. Agora outra questão. edPalavraBusca.Text tem algum valor?
GOSTEI 0
Caezar
21/09/2005
Tem
Ele recebe o valor dá caixa de texto!
Eu ponho o valor
Ele recebe o valor dá caixa de texto!
Eu ponho o valor
GOSTEI 0
Rjun
21/09/2005
Que banco você está usando? Tem alguma ferramenta para executar comandos SQL direto no banco?
GOSTEI 0
Caezar
21/09/2005
tô usando Access!
Será que não está faltando alguma aspas??
pq sEd está dentro das aspas e sCampo não???
Será que não está faltando alguma aspas??
pq sEd está dentro das aspas e sCampo não???
GOSTEI 0
Rjun
21/09/2005
O problema com certeza não é em sCampo. Você pos QuotedStr? Faz o seguinte, coloque no código SQL um código completo, sem o parâmetro, apenas para fazer o teste. Em vez do parâmetro, coloque um valor real.
GOSTEI 0
Caezar
21/09/2005
coloquei assim:
dmConex.tb_Edific.SQL.Add(´Select * from Tab_Edificacoes where ´ + sCampo + ´ like :0003´);
a mensagem foi:
Select * from Tab_Edificacoes where cod_Laudo like : 0003
dmConex.tb_Edific.SQL.Add(´Select * from Tab_Edificacoes where ´ + sCampo + ´ like :0003´);
a mensagem foi:
Select * from Tab_Edificacoes where cod_Laudo like : 0003
GOSTEI 0
Rjun
21/09/2005
Faça assim:
dmConex.tb_Edific.SQL.Add(´Select * from Tab_Edificacoes where ´ + sCampo + ´ like ´´0003´´´);
GOSTEI 0
Caezar
21/09/2005
Amigo, antes de tudo gostaria de te agradecer, pois refiz as Query´s e com o código que você me passou consegui fazer a busca!
O único problema agora é que tenho que escrever a palavra há ser procurada exatamente como ela está na tabela.
coloquei deste jeito e não deu resultados:
nem deste:
O único problema agora é que tenho que escrever a palavra há ser procurada exatamente como ela está na tabela.
coloquei deste jeito e não deu resultados:
Parameters.ParamByName(´sEd´).Value:=QuotedStr(´*´+edPalavraBusca.Text+´*´);
nem deste:
Parameters.ParamByName(´sEd´).Value:=QuotedStr(edPalavraBusca.Text);
GOSTEI 0
Rjun
21/09/2005
Ja tentou colocar ´¬´ em vez de ´*´?
GOSTEI 0
Caezar
21/09/2005
Tentei deste jeito:
Parameters.ParamByName(´sEd´).Value:=QuotedStr(´¬´+edPalavraBusca.Text+´¬´);
Parameters.ParamByName(´sEd´).Value:=QuotedStr(´¬´+edPalavraBusca.Text+´¬´);
GOSTEI 0
Rjun
21/09/2005
E assim tb não deu certo? Posta o código de novo, para eu dar mais uma olhada.
GOSTEI 0
Caezar
21/09/2005
Lavamos nós!!
Obrigado mesmo!!!
Obrigado mesmo!!!
procedure TformAbrir.btBuscarClick(Sender: TObject); var sCampo:string; begin CASE cbCampoBusca.ItemIndex OF 0:sCampo:=´cod_Laudo´; 1:sCampo:=´EmpresaSolicitante´; 2:sCampo:=´EmpresaAvalianda´; 3:sCampo:=´Cidade´ ; END; dmConex.qryTb_Laudos.SQL.Clear; dmConex.qryTb_Laudos.SQL.Add(´Select * from Tab_Laudos where ´ + sCampo + ´ like :sEd´); with dmConex.qryTb_Laudos do begin close; Parameters.ParamByName(´sEd´).Value:=QuotedStr(´*´+edPalavraBusca.Text+´*´); open; end; ShowMessage(dmConex.tb_Edific.SQL.Text); end;
GOSTEI 0
Rjun
21/09/2005
Aparentemente tá tudo certo. Faça um último teste. Em vez de você passar o parâmetro pelo edit, passe direto no código e veja se funciona.
Parameters.ParamByName(´sEd´).Value:=QuotedStr(´*00003*´);
GOSTEI 0
Caezar
21/09/2005
Nada ainda!!!!
é muito estranho!
é muito estranho!
GOSTEI 0
Rjun
21/09/2005
Amigo, realmente já não sei o que fazer. Se quiser e puder, passe-me o projeto via email, junto com o BD que dou uma olhada em casa hj a noite e te mando o problema.
rogerio.jun@gmail.com
rogerio.jun@gmail.com
GOSTEI 0
Lelê
21/09/2005
vc pode dar um:
ADOquery.sql.clear;
depois:
ADOquery2.Parameters.CreateParameter(´nome1´,ftString,pdInput,0,null);
ADOquery2.Parameters.ParamValues[´nome1´] := combobox.Text;
ADOquery2.SQL.Append(´select * from tabela where campo = :nome1 order by tabela´);
ADOquery2.Active := true;
ADOquery2.Refresh;
se precisar de outro parametro cria ele antes do Appen.
os dois-pontos antes do nome do parametro é importantissimo, sem ele o delphi não aceita o parametro como partrametro
T+
Lê
ADOquery.sql.clear;
depois:
ADOquery2.Parameters.CreateParameter(´nome1´,ftString,pdInput,0,null);
ADOquery2.Parameters.ParamValues[´nome1´] := combobox.Text;
ADOquery2.SQL.Append(´select * from tabela where campo = :nome1 order by tabela´);
ADOquery2.Active := true;
ADOquery2.Refresh;
se precisar de outro parametro cria ele antes do Appen.
os dois-pontos antes do nome do parametro é importantissimo, sem ele o delphi não aceita o parametro como partrametro
T+
Lê
GOSTEI 0
Caezar
21/09/2005
O que significa esta parte?
ADOquery2.Parameters.CreateParameter(´nome1´,ftString,pdInput,0,null);
GOSTEI 0
Rogick
21/09/2005
Essa linha:
Serve para criar um parametro dinamicamente, mas se você colocar a propriedade [u:1bb13c0660]ParamsCheck[/u:1bb13c0660] da TADOQuery para True, os parametros são automaticamente definidos quando você montar a query na propriedade [u:1bb13c0660]SQL[/u:1bb13c0660] (mesmo que seja dinamicamente).
ADOquery2.Parameters.CreateParameter(´nome1´,ftString,pdInput,0,null);
Serve para criar um parametro dinamicamente, mas se você colocar a propriedade [u:1bb13c0660]ParamsCheck[/u:1bb13c0660] da TADOQuery para True, os parametros são automaticamente definidos quando você montar a query na propriedade [u:1bb13c0660]SQL[/u:1bb13c0660] (mesmo que seja dinamicamente).
GOSTEI 0
Caezar
21/09/2005
Então isso não me adianta muito, porque eu preciso é que na busca eu não precise escrever uma palavra existente em um campo e sim apenas parte dela!
GOSTEI 0