Fórum Erro na clausula from. O que esta errado? #228491
28/04/2004
0
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
Curtir tópico
+ 0Posts
28/04/2004
Wolverine
Gostei + 0
28/04/2004
Emerson Nascimento
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
28/04/2004
Fer_nanda
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
28/04/2004
Pabhen
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
28/04/2004
Flavia_mococa
Gostei + 0
28/04/2004
Fer_nanda
verdade... tenta no onexit
Gostei + 0
28/04/2004
Marco Salles
Eu não entendi se o erro que voce se refere e de sintase ou e um erro de lógica
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;
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
28/04/2004
Marco Salles
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
28/04/2004
Flavia_mococa
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
28/04/2004
Flavia_mococa
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
28/04/2004
Dankada
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
02/05/2004
Flavia_mococa
Bjos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)