Select ParamByName [dor de cabeça]

Firebird

16/02/2006

OQUE ESTA ERRADO:
var
tmp:String;
begin
tmp:= (DBEdit3.Field.Text);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(´Select *´);
Query1.SQL.Add(´From Tabela´);
Query1.SQL.Add(´where =:valor Between Tabela_Acimade and Tabela_Ate´);
Query1.ParamByName(´valor´).AsCurrency := StrToCurr(tmp);

OBS:

DBEDIT3 é um CAMPO ´$´.
Eu substituo o =:valor por qlq valor e roda.

ERRO NA EXECUÇÂO:

INVALID USE OF KEYWORD TOKEN: =?


[quote:cd22729cb9=´Moderação´][b:cd22729cb9][color=blue:cd22729cb9]Título do tópico editado por Vinicius2K:[/color:cd22729cb9][/b:cd22729cb9]
[b:cd22729cb9][color=red:cd22729cb9][list:cd22729cb9][*:cd22729cb9]Utilização de maiúsculas no título da mensagem: ´SELECT PARAMBYNAME [DOR DE CABEÇA]´[/list:u:cd22729cb9][/color:cd22729cb9][/b:cd22729cb9]
Peço que leia atentamente as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] e se algum esclarecimento sobre o funcionamento do fórum ou sobre as Regras de Conduta for necessário, envie-me uma [url=http://forum.clubedelphi.net/privmsg.php?mode=post&u=2796]Mensagem Particular[/url].[/quote:cd22729cb9]


Staylon

Staylon

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

16/02/2006

esse tipo de pesquisa não pode ser dinâmica...
o correto seria fazer algo assim:
begin 
  Query1.Close; 
  Query1.SQL.Clear; 
  Query1.SQL.Add(´Select *´); 
  Query1.SQL.Add(´From Tabela´); 
  Query1.SQL.Add(´where Tabela_Acimade >= :valor or Tabela_Ate <= :valor´); 
  Query1.ParamByName(´valor´).AsCurrency := DBEdit3.Field.AsFloat/AsCurrency;
  Query1.Open;
end;

ou
var
  tmp: string;
begin 
  tmp := DBEdit3.Field.Text;
  Query1.Close; 
  Query1.SQL.Clear; 
  Query1.SQL.Add(´Select *´); 
  Query1.SQL.Add(´From Tabela´); 
  Query1.SQL.Add(´where ´ + tmp + ´ Between Tabela_Acimade and Tabela_Ate´); 
  Query1.Open;
end;



GOSTEI 0
Staylon

Staylon

16/02/2006

Bom o Exemplo que vc me mostrou :
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add(´Select *´);
  Query1.SQL.Add(´From Tabela´);
  Query1.SQL.Add(´where Tabela_Acimade >= :valor or Tabela_Ate <= :valor´);
  Query1.ParamByName(´valor´).AsCurrency := DBEdit3.Field.AsFloat/AsCurrency;
  Query1.Open;
end;

Pega porem ele so retorna o primeiro registro da tabela sempre.. pois esta com um OR na select ... e quando eu troco o OR para And ele nao retorna nada....



E em relacao ao segundo exemplo:
var
  tmp: string;
begin
  tmp := DBEdit3.Field.Text;
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add(´Select *´);
  Query1.SQL.Add(´From Tabela´);
  Query1.SQL.Add(´where ´ + tmp + ´ Between Tabela_Acimade and Tabela_Ate´);
  Query1.Open;
end;



Ele nao executa pois quando faco a busca da erro em execucao pois fala que a virgula do valor 323,44 é invalid token...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/02/2006

para o segundo exemplo, troque a virgula por ponto.

tmp := StringReplace(FormatFloat(´#0.00´,DBEdit3.Field.AsFloat),´,´,´.´,[rfReplaceAll]);

o que é feito acima:
tiro os separadores de milhar com o FormatFloat() (se houver) e troco as virgulas (,) por pontos (.)


GOSTEI 0
Staylon

Staylon

16/02/2006

Agora Foi..

Vlw ae pela ajuda


GOSTEI 0
POSTAR