Erro na clausula from. O que esta errado?
Bom dia.
Estou tentando fazer uma consulta que apos eu digitar qualquer letra em um edit ele me retorne num dbgrid todos os registros de minha tabela que comecem com a letras digitadas no edit. Eu utilizo bd access, paleta ado, um edit e um dbgrid. O código do evento OnKeyDow é o seguinte:
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
QForneced.Parameters.ParamByName(´p1´).Value := ´´+Edit1.Text+´¬´;
QForneced.Open;
end;
O erro que esta dando é na clausula from, mais nao sei o que pode estar errado. Fornecedores é o nome da tabela e razaoSocial o nome do campo a ser pesquisado. Se puderem me ajudar ficarei muito grata.
Estou tentando fazer uma consulta que apos eu digitar qualquer letra em um edit ele me retorne num dbgrid todos os registros de minha tabela que comecem com a letras digitadas no edit. Eu utilizo bd access, paleta ado, um edit e um dbgrid. O código do evento OnKeyDow é o seguinte:
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
QForneced.Parameters.ParamByName(´p1´).Value := ´´+Edit1.Text+´¬´;
QForneced.Open;
end;
O erro que esta dando é na clausula from, mais nao sei o que pode estar errado. Fornecedores é o nome da tabela e razaoSocial o nome do campo a ser pesquisado. Se puderem me ajudar ficarei muito grata.
Flavia_mococa
Curtidas 0
Respostas
Wolverine
28/04/2004
Select * from Fornecedores where RazaoSocial >=:p1
GOSTEI 0
Emerson Nascimento
28/04/2004
If Edit1.Text <>´´ then
Begin
    QForneced.Close;
    QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
    QForneced.Parameters.ParamByName(´p1´).AsString := Edit1.Text+´¬´;
    QForneced.Prepare;
    QForneced.Open;
end;
Begin
    QForneced.Close;
    QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
    QForneced.Parameters.ParamByName(´p1´).AsString := Edit1.Text+´¬´;
    QForneced.Prepare;
    QForneced.Open;
end;
GOSTEI 0
Fer_nanda
28/04/2004
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
QForneced.Parameters.ParamByName(´p1´).Value := ´´+Edit1.Text+´¬´;
QForneced.Open;
end;
já q está passando o parametro no mesmo momento q adciona a clausula pra qry pq naum tenta desta maneira:
QForneced.SQL.Text := ´Select * from Fornecedores where RazaoSocial like ´ + QuotedStr(Edit1.Text+ ´¬´);
GOSTEI 0
Pabhen
28/04/2004
Bom dia.
Estou tentando fazer uma consulta que apos eu digitar qualquer letra em um edit ele me retorne num dbgrid todos os registros de minha tabela que comecem com a letras digitadas no edit. Eu utilizo bd access, paleta ado, um edit e um dbgrid. O código do evento OnKeyDow é o seguinte:
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
QForneced.Parameters.ParamByName(´p1´).Value := ´´+Edit1.Text+´¬´;
QForneced.Open;
end;
O erro que esta dando é na clausula from, mais nao sei o que pode estar errado. Fornecedores é o nome da tabela e razaoSocial o nome do campo a ser pesquisado. Se puderem me ajudar ficarei muito grata.
Naum precisa das aspas e do sinal de + no começo do edit, e tb O q está faltando é o SQL.clear. Do jeito q está aí vc vai ficar sempre adcionando o comando SQL. Faça assim:
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.Clear; // aqui vc resolve seu problema :)
QForneced.SQL.Add(´Select * from Fornecedores where RazaoSocial like :p1´);
QForneced.Parameters.ParamByName(´p1´).Value := Edit1.Text+´¬´;// aqui tb estava errado
QForneced.Open;
end;
qualquer coisa tamos aeh
GOSTEI 0
Flavia_mococa
28/04/2004
Oi gente, não deu certo, será que estou programando no evento errado...
GOSTEI 0
Fer_nanda
28/04/2004
Oi gente, não deu certo, será que estou programando no evento errado...
verdade... tenta no onexit
GOSTEI 0
Marco Salles
28/04/2004
O erro que esta dando é na clausula from, mais nao sei o que pode estar errado.
Eu não entendi se o erro que voce se refere e de sintase ou e um erro de lógica
Estou tentando fazer uma consulta que apos eu digitar qualquer letra em um edit ele me retorne num dbgrid todos os registros de minha tabela que comecem com a letras digitadas no edit.
eu olhei rapidamente o seu código e acho que mesmo que ele esteja certo, o retorno do sql, sera não so os registros que comecão coma letra digitada mas também todos os outros que estão após...Por exemplo se digitar a [b:6d684c00fe]letra A[/b:6d684c00fe] , Irá aparecer todos os registros...Porque :?: :?: Porque voce so fez um [b:6d684c00fe]limitador de maior [/b:6d684c00fe]e Não [b:6d684c00fe]Um Limitador de Menor [/b:6d684c00fe]Código:
query1.sql.Clear; Query1.SQL.add(´Select * From Fornecedores´); Query1.Sql.Add(´Where RazaoSocial>=:inicio´); Query1.ParamByName(´inicio´).AsString:=Edit1.Text; Query1.Sql.Add(´and RazaoSocial<=:final´); Query1.ParamByName(´final´).AsString:=Edit1.Text+´zzzzzz´; Query1.SQL.add(´Order RazaoSocial´); Query1.Prepare; query1.open;
Oi gente, não deu certo, será que estou programando no evento errado...
Quanto ao evento eu acho que pode ser no onkeyPress, ou mesmo no onKeyDown
[b:6d684c00fe]qualquer duvida poste a gente...[/b:6d684c00fe]
GOSTEI 0
Marco Salles
28/04/2004
Desculpe, a ultima instr~ção do cóbigo esta incorreta:
Código:
o Certo é:
Código:
Código:
query1.sql.Clear; Query1.SQL.add(´Select * From Fornecedores´); Query1.Sql.Add(´Where RazaoSocial>=:inicio´); Query1.ParamByName(´inicio´).AsString:=Edit1.Text; Query1.Sql.Add(´and RazaoSocial<=:final´); Query1.ParamByName(´final´).AsString:=Edit1.Text+´zzzzzz´; Query1.SQL.add(´Order RazaoSocial´); //errado******* Query1.Prepare; query1.open;
o Certo é:
Código:
query1.sql.Clear; Query1.SQL.add(´Select * From Fornecedores´); Query1.Sql.Add(´Where RazaoSocial>=:inicio´); Query1.ParamByName(´inicio´).AsString:=Edit1.Text; Query1.Sql.Add(´and RazaoSocial<=:final´); Query1.ParamByName(´final´).AsString:=Edit1.Text+´zzzzzz´; Query1.SQL.add(´Order By RazaoSocial´); Query1.Prepare; query1.open;
GOSTEI 0
Flavia_mococa
28/04/2004
Quando eu rodo o programa ele compile, ate ai tudo bem.
Quando eu abro o form tambem nao tem erro nenhum, mais quando eu digito qualquer coisa acontece o seguinte:
Digito a primeira letra = nao acontece nada
Digito a segunda letra = mensagem de erro na clausula from e o programa trava...
Quando eu abro o form tambem nao tem erro nenhum, mais quando eu digito qualquer coisa acontece o seguinte:
Digito a primeira letra = nao acontece nada
Digito a segunda letra = mensagem de erro na clausula from e o programa trava...
GOSTEI 0
Flavia_mococa
28/04/2004
galera, muito obrigada mesmo.
Eu mudei um pouquinho o código me baseando nas respostas que voces postaram e meu codigo ficou assim:
procedure TFrmCaixa.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Clear;
QForneced.SQL.Add(´Select * from Fornecedores´);
QForneced.SQL.Add(´where RazaoSocial like ´´´+edit1.text+´¬´´ ´);
QForneced.Open;
end;
end;
Desta forma ele funcionou da forma que eu queria, ficou um pouquinho lento já que a tabela tem muitos registros, mais funcionou bem.
Obrigada mesmo.
Bjos.
Eu mudei um pouquinho o código me baseando nas respostas que voces postaram e meu codigo ficou assim:
procedure TFrmCaixa.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Edit1.Text <>´´ then
Begin
QForneced.Close;
QForneced.SQL.Clear;
QForneced.SQL.Add(´Select * from Fornecedores´);
QForneced.SQL.Add(´where RazaoSocial like ´´´+edit1.text+´¬´´ ´);
QForneced.Open;
end;
end;
Desta forma ele funcionou da forma que eu queria, ficou um pouquinho lento já que a tabela tem muitos registros, mais funcionou bem.
Obrigada mesmo.
Bjos.
GOSTEI 0
Dankada
28/04/2004
uma outra forma de fazer isso seria assim...
no evento onKeyUp
dessa forma so iria aparecer no Grid os Nomes que comecem com a sequencia que vc digitou, com o LIKE ele pega qualquer subString da palavra (se eu tiver errado me corrigam).
no evento onKeyUp
var tam:integer; begin if edit1 <>´´ then begin QForneced.Close; tam := length(edit1.text); QForneced.SQL.Text:=´Select * from Fornecedores WHERE mid(RazaoSocial,1,´+IntToStr(tam)+´) = ´´´+edit1.text+´´´ ´; QForneced.Open; end; end;
dessa forma so iria aparecer no Grid os Nomes que comecem com a sequencia que vc digitou, com o LIKE ele pega qualquer subString da palavra (se eu tiver errado me corrigam).
GOSTEI 0
Flavia_mococa
28/04/2004
Obrigada pelos toques galera, deu tudo certo.
Bjos
Bjos
GOSTEI 0