Array
(
)

Pesquisa com código SQL.

Peninha
   - 02 jan 2006

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

#Código


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:

Dynamic SQL erro ( Erro = 104)

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


Eixox
   - 02 jan 2006

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 ´);
[u:d581e05ae6]Sql.Add(´Where Nome_Cli = ´ + EditBusca.Text);[/u: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.


Peninha
   - 02 jan 2006

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.


Eixox
   - 02 jan 2006

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 [u:94db0493a7]*[/u:94db0493a7] Tab_Cliente ´);
Sql.Add(´Where Nome_Cli = ´ + EditBusca.Text);
Open;
end;
end;


Thomaz_prg
   - 03 jan 2006

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

#Código


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 é:

#Código

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



Peninha
   - 03 jan 2006

Amigos, funcionou desta forma:
#Código


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.


Eixox
   - 03 jan 2006

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.


Peninha
   - 03 jan 2006

Bem pessoal consegui.
ESte código faz a consulta exata do nome do cliente:
#Código


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.


Paulo
   - 03 jan 2006

Peninha faça assim:


Citação:
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.


Peninha
   - 03 jan 2006

Paulo, não consigo nem compilar o programa, da um erro nesta linha:
#Código


Sql.Add(´Where Nome_Cli like ´+ quotedStr(EdtBusca.Text);//>>>se quiser por partes


Não consegui identificar o erro.
Peninha.


Martins
   - 03 jan 2006


Citação:
Paulo, não consigo nem compilar o programa, da um erro nesta linha:
#Código


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:
#Código

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:

#Código

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!!


Caninha51
   - 04 jan 2006

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

#Código


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;