Pesquisa com código SQL.

02/01/2006

Ola Pessoal, estou tentando fazer uma pesquisaem com o seguinte código SQL:

procedure TFrm_ConsCliente.BtConsultarClick(Sender: TObject);
begin
With DMDados.IBQ_ConsCli do
Begin
Close;
Sql.Clear;
Sql.Add(´Select From Tab_Cliente ´);
Sql.Add(´Where Nome_Cli :ParamNome´);
ParamByname(´ParamNome´).Text:=(EditBusca.Text);
Open;
end;
end.



Quero que o nome do cliente pesquisado apareça em um Label, só que esta me retornando este erro:

[color=red:4ed1ccc070][b:4ed1ccc070]Dynamic SQL erro ( Erro = 104)[/b:4ed1ccc070][/color:4ed1ccc070]

Será que alguém pode me ajudar?
Peninha.


Peninha

Respostas

02/01/2006

Eixox

Acredito que isso deva resolver o seu problema:

procedure TFrm_ConsCliente.BtConsultarClick(Sender: TObject);
begin
With DMDados.IBQ_ConsCli do
begin
Close;
Sql.Clear;
Sql.Add(´Select From Tab_Cliente ´);
[b:d581e05ae6][u:d581e05ae6]Sql.Add(´Where Nome_Cli = ´ + EditBusca.Text);[/u:d581e05ae6][/b:d581e05ae6]
Open;
end;
end;

Verifique que faltou o tipo de comparação que você gostaria da fazer (=) ou substitua pelo comando LIKE se achar melhor.

neste caso ficaria
SQL.Add(´Where Nome_Cli Like ´ + ´´´´´ + ´¬´ + EditBusca.Text + ´¬´ + ´´´´);

A última linha é desnecessária - parabyname....não tem necessidade já que você pode colocar o parâmetro diretamente do campo Edit.


Responder Citar

02/01/2006

Peninha

Amigo, tentei com o seu código mas infleizmente não deu certo.
Já tentei outras alternativas e até agora nada, vou continuar tentando acertar este código. Se alguém mas poder ajudar eu agradeço.
Peninha.


Responder Citar

02/01/2006

Eixox

Como eu sô burro, não vi isso:

Tá faltando os campos retornos da sua consulta... Faltou quais os campos devem retornar - de uma olhada que agora tem que rodar obrigatoriamente.

With DMDados.IBQ_ConsCli do
begin
Close;
Sql.Clear;
Sql.Add(´Select From [color=red:94db0493a7][u:94db0493a7][i:94db0493a7][b:94db0493a7]*[/b:94db0493a7][/i:94db0493a7][/u:94db0493a7][/color:94db0493a7] Tab_Cliente ´);
Sql.Add(´Where Nome_Cli = ´ + EditBusca.Text);
Open;
end;
end;


Responder Citar

03/01/2006

Thomaz_prg

Amigo EixoX, achou corretamente o erro, mas colocou o acerto em local errado. Você colocou assim:

With DMDados.IBQ_ConsCli do 
begin 
Close; 
Sql.Clear; 
Sql.Add(´Select From * Tab_Cliente ´); 
Sql.Add(´Where Nome_Cli = ´ + EditBusca.Text); 
Open; 
end; 


Porém o Correto é:

With DMDados.IBQ_ConsCli do 
begin 
Close; 
Sql.Clear; 
Sql.Add(´Select [b&93;*&91;/b&93; From Tab_Cliente ´); 
Sql.Add(´Where Nome_Cli = :Nome´);
ParamByName(´Nome´).AsString := EditBusca.Text; 
Open; 
end; 



Responder Citar

03/01/2006

Peninha

Amigos, funcionou desta forma:
 With DMDados.IBQ_ConsCli do
       begin
         Close;
         Sql.Clear;
         Sql.Add(´Select * From Tab_Cliente ´);
         Sql.Add(´Where Nome_Cli = :Nome´);
         ParamByName(´Nome´).AsString := EdtBusca.Text;
         Open;
      end;
       Label1.Caption:=DmDadoS.IBQ_ConsCliNOME_CLI.AsString;


Mas gostaria de adcionar um detalhe nesta pesquisa. Para pesquisar preciso digitar o nome do cliente exato, como faço para que ao digitar os parte do primeiro nome e já ir buscando este nome?
EX: Tenho um cliente chamado João mota marinho, no entanto tenho outros com o nome de João e sobrenome diferentes.
Sei que posso usar o (Like ¬), só que não sei como coloca-lo no código.
Peninha.


Responder Citar

03/01/2006

Eixox

isso é uma pena porque consome processamento desnecessário, porém
você pode executar isso:

no evento OnChange do Edit que será digitado o nome coloque o seguinte comando:

With DMDados.IBQ_ConsCli do
begin
Close;
Sql.Clear;
Sql.Add(´Select * From Tab_Cliente ´);
Sql.Add(´Where Nome_Cli LIKE ´ + ´´´´ + EdtBusca.Text + ´¬´ + ´´´´);
Open;
end;

Aquela parte onde você passa o parâmetro é desnecessária. Economiza o processamento do sistema.


Responder Citar

03/01/2006

Peninha

Bem pessoal consegui.
ESte código faz a consulta exata do nome do cliente:
  With DMDados.IBQ_ConsCli do
       begin
         Close;
         Sql.Clear;
         Sql.Add(´Select * From Tab_Cliente ´);
         Sql.Add(´Where Nome_Cli= :Nome´);
         ParamByName(´Nome´).AsString := EdtBusca.Text;
         Open;
      end;


Agora, como faço para consultar também pelo código do cliente?
Alguém pode me ajudar?
Erivan marinho.


Responder Citar

03/01/2006

Paulo

Peninha faça assim:

With DMDados.IBQ_ConsCli do begin Close; Sql.Clear; Sql.Add(´Select * From Tab_Cliente ´); Sql.Add(´Where Nome_Cli like ´+quotedstr( EdtBusca.Text);ou abaixo Sql.Add(´Where Nome_Cli like ´+quotedstr( EdtBusca.Text+´¬´);>>>se quiser por partes Open; end;


Agora não sei se um OR dentro do WHERE, daria certo.


Responder Citar

03/01/2006

Peninha

Paulo, não consigo nem compilar o programa, da um erro nesta linha:
   Sql.Add(´Where Nome_Cli like ´+ quotedStr(EdtBusca.Text);//>>>se quiser por partes


Não consegui identificar o erro.
Peninha.


Responder Citar

03/01/2006

Martins

Paulo, não consigo nem compilar o programa, da um erro nesta linha:
   Sql.Add(´Where Nome_Cli like ´+ quotedStr(EdtBusca.Text);//>>>se quiser por partes
Não consegui identificar o erro. Peninha.


O q o colega Paulo sugeriu foi o seguinte, vc pode usar pelo nome exato assim:
With DMDados.IBQ_ConsCli do 
begin 
Close; 
Sql.Clear; 
Sql.Add(´Select * From Tab_Cliente ´); 
Sql.Add(´Where Nome_Cli like ´+quotedstr( EdtBusca.Text);
Open; 
end; 


ou por partes do nome:

With DMDados.IBQ_ConsCli do 
begin 
Close; 
Sql.Clear; 
Sql.Add(´Select * From Tab_Cliente ´); 
Sql.Add(´Where Nome_Cli like ´+QuotedStr(  ´¬´+ EdtBusca.Text + ´¬´ );
Open; 
end; 


Eu particularmente costuma trabalar com parametros e nunca tive dor de cabeça nem perda de performance.

Boa sorte!!


Responder Citar

04/01/2006

Caninha51

o código dele soh naum compilou por falta de um parêntese.

With DMDados.IBQ_ConsCli do 
begin 
Close; 
Sql.Clear; 
Sql.Add(´Select * From Tab_Cliente ´); 
Sql.Add(´Where Nome_Cli like ´+QuotedStr(  ´¬´+ EdtBusca.Text + ´¬´ )); 
Open; 
end; 



Responder Citar