Ir para conteúdo
Fórum Script Brasil
  • 0

Busca Com Sql


Arlon

Pergunta

Galera o problema é o seguinte

Eu tenho uma tabela Clientes e um DBGrid setado pra essa tabela. estou fazendo uma busca com uma Query através do campo cliente (que reperesenta o nome do cliente). Até aí tudo certo, só que quando eu cadastro um cliente de nome 'Raphael', por exemplo, e chamo o formulário de consulta e no Edit eu digito 'Raphael' ele não me traz o resultado da pesquisa. Porém quando eu cadastro o cliente com o nome 'R' e faço a busca digitando 'R' no Edit o sistema mostra o resultado no DBGrid. Estranho né?? Alguém sabe como resolver essa doideira?? o código que eu estou usando tá aí ó:

Código do botão:

procedure TFrmClientes.BtnBuscarClick(Sender: TObject);
begin
 DM.QrConsClientes.Close;
 DM.QrConsClientes.Sql.Text := 'Select * from Clientes ' +
 'Where Cliente =:ClienteBusca';
 DM.QrConsClientes.Params[0].AsString := UpperCase(Edit1.Text);
 DM.QrConsClientes.open;
 DBGrid1.DataSource := DM.DsQrConsClientes;
 Panel2.Visible := false;
end;
Código da propriedade SQL da Query:
Select * from Clientes 
   where Cliente =:ClienteBusca
Propriedade Parans da Query 0 - NomeBusca
DataType: ftString
ParamType: ptImput

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Tente assim oh :

procedure TFrmClientes.BtnBuscarClick(Sender: TObject);

begin

DM.QrConsClientes.Close;

DM.QrConsClientes.Sql.Text := 'Select * from Clientes ' +

'Where Cliente =:Edit1.text';

DM.QrConsClientes.Params[0].AsString := UpperCase(Edit1.Text);

DM.QrConsClientes.open;

DBGrid1.DataSource := DM.DsQrConsClientes;

Panel2.Visible := false;

end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

ops... mexi no post errado...

SELECT * FROM Clientes

WHERE UPPER(Cliente) = :ClienteBusca

with DM.QrConsClientes do 

  begin

  clear;    //importante pois se fizer duas pesquisas seguidas tera um erro...

  Close;

  Sql.add('SELECT * FROM Clientes WHERE UPPER(Cliente) = :ClienteBusca');

  Parambyname('ClienteBusca').AsString := Uppercase(Edit1.Text);

  Open;

  end;

DBGrid1.DataSource := DM.DsQrConsClientes;

Panel2.Visible := false;

Link para o comentário
Compartilhar em outros sites

  • 0

Pow galera não deu certo nenhuma das duas opções.

Bolomaster, do jeito que você falou continuou a mesma coisa (a busca só dá certo se eu cadastrar o campo Cliente com uma letra só).

Corposemalma, da forma como você falou tá acusando o seguinte erro:

Project CorporateMaster.exe raised exception class EDBEEngineError with message 'Invalid use of keyword.
Tolken: SELECT
Line number: 5'. Process stopped. Use Step or Run to continue.

e ao invés de Parambyname['ClienteBusca'].AsString eu usei Parambyname('ClienteBusca').AsString , pois com colchetes tava dando erro.

Mas valeu a ajuda galera, e se vc´s pensarem em mais alguma provável solução posta aí pra mim que eu agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

faz o seguinte:

tira o UpperCase:

E seta nas propriedades do edit como somente Uppercase

SELECT * FROM Clientes

WHERE UPPER(Cliente) = :ClienteBusca

with DM.QrConsClientes do 

  begin

  clear;    //importante pois se fizer duas pesquisas seguidas tera um erro...

  Close;

  Sql.add('SELECT * FROM Clientes WHERE UPPER(Cliente) = :ClienteBusca');

  Parambyname('ClienteBusca').AsString := Edit1.Text;

  Open;

  end;

DBGrid1.DataSource := DM.DsQrConsClientes;

Panel2.Visible := false;

Voce está usando que bancos de dados? Ele tem o comando sql UPPER?

Link para o comentário
Compartilhar em outros sites

  • 0

Corposemalma, continua uma doideira total a situação da bendita procedure. Não adiantou nada tirar o UpperCase e continua dando o mesmo erro na linha 5; e outra coisa, você colocou:

with DM.QrConsClientes do

begin

clear; //importante pois se fizer duas pesquisas seguidas tera um erro...

.

.

.

tá dando erro na linha do clear, pedindo pra declarar essa palavra, não seria ClearFields ou outro comando?? Mas isso é fácil de se descobrir, e a propósito do erro na linha 5, você tem alguma idéia de como resolvê-lo?

estou usando Paradox

Link para o comentário
Compartilhar em outros sites

  • 0

Bolomaster, então ficaria assim, certo:

DM.QrConsClientes.Close;

DM.QrConsClientes.Sql.Text := 'Select * from Clientes ' +

'Where Cliente =:Edit1.text';

DM.QrConsClientes.Params[0].AsString := UpperCase(Edit1.Text);

DM.QrConsClientes.open;

DM.QrConsClientes.Locate('Cliente', edit1.text [LoPartialKey]);

DBGrid1.DataSource := DM.DsQrConsClientes;

Panel2.Visible := false;

BtnMostraTudo.Enabled := true

O Delphi tá mandando declarar 'LoPartialKey'

E tá dizendo o seguinte:

[Error] Clientes.pas(120): Undeclared identifier: 'LoPartialKey'

[Error] Clientes.pas(120): Not enough actual parameters

[Fatal Error] CorporateMaster.dpr(17): Could not compile used unit 'Clientes.pas'

Você falou pra colocar o seguinte:

table1.locate('nome', edit1.text [LoPartialKey]);

'nome' é o nome do campo que eu estou procurando?? no caso seria clientes??

Valeu pela ajuda que tá me dando cara.

Link para o comentário
Compartilhar em outros sites

  • 0

Você falou pra colocar o seguinte:

table1.locate('nome', edit1.text [LoPartialKey]);

'nome' é o nome do campo que eu estou procurando?? no caso seria clientes??

cara é isso mesmo ..

Abraços

Muda ai se der problema novamente me fala .... abraços

Rafael Marciano

Link para o comentário
Compartilhar em outros sites

  • 0

O Delphi tá mandando declarar 'LoPartialKey'

Tem que declarar alguma cláusula no uses?

E tá dizendo o seguinte:

[Error] Clientes.pas(120): Undeclared identifier: 'LoPartialKey'

[Error] Clientes.pas(120): Not enough actual parameters

[Fatal Error] CorporateMaster.dpr(17): Could not compile used unit 'Clientes.pas'

Link para o comentário
Compartilhar em outros sites

  • 0

cara não sei como você esta usando se esta dentro de um button mas olha só eu tipo simplifico essas coisas ao maximo

tipo coloco um edit

e um dbgrid

ta ai eu digito no edit..e localizo no dbgrid que é onde mostra os dados.. olha so no evento onchange do edit eu coloco a seguinte procedure

procedure Tform.Edit1Change(Sender: TObject);
begin
table1.locate('Nomedocampo',edit1.text,
 [lopartialkey , locaseinsensitive]);
end;

Tipo assim fica mais simplificado

Abraços

Tipo o table 1 esta ligado no edit ok

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu a ajuda Bolomaster e Corposemalma, consegui resolver a "doideira".

Se liga só no mole que eu tava dando: Eu coloquei UpperCase na passagem de parâmetro e esqueci de colocar Upper na instrução SQL do botão também. biggrin.gifbiggrin.gifbiggrin.gif

Até a próxima escabrosa dúvida... tongue.giftongue.gif

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...