Pesquisa com código SQL.
Ola Pessoal, estou tentando fazer uma pesquisaem com o seguinte código SQL:
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.
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
Curtidas 0
Respostas
Eixox
02/01/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 ´);
[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.
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.
GOSTEI 0
Peninha
02/01/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.
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.
GOSTEI 0
Eixox
02/01/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 [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;
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;
GOSTEI 0
Thomaz_prg
02/01/2006
Amigo EixoX, achou corretamente o erro, mas colocou o acerto em local errado. Você colocou assim:
Porém o Correto é:
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]*[/b] From Tab_Cliente ´); Sql.Add(´Where Nome_Cli = :Nome´); ParamByName(´Nome´).AsString := EditBusca.Text; Open; end;
GOSTEI 0
Peninha
02/01/2006
Amigos, funcionou desta forma:
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.
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.
GOSTEI 0
Eixox
02/01/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.
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.
GOSTEI 0
Peninha
02/01/2006
Bem pessoal consegui.
ESte código faz a consulta exata do nome do cliente:
Agora, como faço para consultar também pelo código do cliente?
Alguém pode me ajudar?
Erivan marinho.
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.
GOSTEI 0
Paulo
02/01/2006
Peninha faça assim:
Agora não sei se um OR dentro do WHERE, daria certo.
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.
GOSTEI 0
Peninha
02/01/2006
Paulo, não consigo nem compilar o programa, da um erro nesta linha:
Não consegui identificar o erro.
Peninha.
Sql.Add(´Where Nome_Cli like ´+ quotedStr(EdtBusca.Text);//>>>se quiser por partes
Não consegui identificar o erro.
Peninha.
GOSTEI 0
Martins
02/01/2006
Paulo, não consigo nem compilar o programa, da um erro nesta linha:
Não consegui identificar o erro.
Peninha.
Sql.Add(´Where Nome_Cli like ´+ quotedStr(EdtBusca.Text);//>>>se quiser por partes
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!!
GOSTEI 0
Caninha51
02/01/2006
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;
GOSTEI 0