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

Como Passar O Valor De Um Edit (real) Para Uma Sql


Tamires

Pergunta

Olá, gostaria de saber como faço pra colocar um valor real em uma SQL, sendo que ele vem de um edit.

O Erro que dá é esse : Token unknown - line 1, char 81 ,

Dá esse erro porque está passando para SQL o valor do campo separando as casas decimais por vírgula e tem que ser com ponto.

Ex: SELECT * FROM CARA200 WHERE CARA200.COD_TAXA = 1

AND CARA200.VAL_INIFAI = 0,01

AND CARA200.VAL_FINFAI = 499,99

ORDER BY CARA200.DAT_VIGOR, CARA200.DAT_INCLUS DESC

Observação : Eu programo em Delphi 7 e uso o FireBird 1.5 e IBExpert como banco de dados

Ex:

// *** passo os valores que a pessoa digita na tela para uma variável :

try

vValIniFai := StrToFloat(edtValIniFai.Text);

vValFinalFai := StrToFloat(edtValFinalFai.Text);

except

ShowMessage('Preço inicial/final da faixa inválido.');

exit;

end;

//*** faço uma SQL para buscar na tabela(CARA200) os preços cadastrados para aquela faixa

with (FdmList.Objects[FdmList.IndexOf('CARA200')] as Tdm) do begin

cds.Close;

cds.CommandText := 'SELECT * ' +

'FROM CARA200 ' +

'WHERE CARA200.COD_TAXA = ' + edtCodTaxa.Text + ' AND ' +

'CARA200.VAL_INIFAI = ' + FloatToStr(vValIniFai) + ' AND ' +

'CARA200.VAL_FINFAI = ' + FloatToStr(vValFinalFai) + ' ' +

'ORDER BY CARA200.DAT_VIGOR, CARA200.DAT_INCLUS DESC ';

cds.Open;

end;

//*** Abaixo segue os campos que existem na tabela e que eu utilizo na SQL

Name: COD_TAXA - FieldTipe: INTEGER - Domain:DINTEIRO

Name: VAL_INIFAI - FieldTipe: DECIMAL - Domain:DECIMAL12I2D - Size: 14 - Scale: 2

Name: VAL_FINFAI - FieldTipe: DECIMAL - Domain:DECIMAL12I2D - Size: 14 - Scale: 2

Name: DAT_VIGOR - FieldTipe: DATE - Domain:DATE

Name: DAT_INCLUS - FieldTipe: DATE - Domain:DATE

//***

Peço por favor a ajuda de vocês

Muito obrigada...

bjos...

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Tamires, já que seus campos são "realmente numéricos", passe os valores como parâmetro, não o "texto":

with (FdmList.Objects[FdmList.IndexOf('CARA200')] as Tdm) do begin

cds.Close;

cds.CommandText := 'SELECT * ' +

'FROM CARA200 ' +

'WHERE CARA200.COD_TAXA = ' + edtCodTaxa.Text + ' AND ' +

'CARA200.VAL_INIFAI = :ValInicial AND ' +

'CARA200.VAL_FINFAI = :ValFinal ' +

'ORDER BY CARA200.DAT_VIGOR, CARA200.DAT_INCLUS DESC ';

cds.Params.ParamByName('ValInicial').AsFloat := vValIniFai;

cds.Params.ParamByName('ValFinal').AsFloat := vValFinalFai;

cds.Open;

end;

Se não me engano a propriedade Params do CDS possui o método ParamByName. Se não tiver pode usar Params[0] e Params[1], respectivamente.

Link para o comentário
Compartilhar em outros sites

  • 0

muito obrigada Micheus...

Eu já achei na internet uma função que substitui a vígula do campo por ponto. Mas vou tentar dessa maneira que você me passou também.

E sobre passar os parâmetros e não o texto, não sei ao certo pois nunca usei essa propriedade(params), mas acho que a SQL só aceita dados 'Strings'.

Bjos....

Link para o comentário
Compartilhar em outros sites

  • 0

Ahhh.... vou deixar a função que eu consegui aqui só pra você ver e pra outras pessoas que também precisarem.

function VirgPonto(Valor: string): String;
Var
  i: Integer;

begin
if Valor <> ' ' then
   begin
   for i := 0 to Length(Valor) do
       begin
       if Valor[i]='.' then
          begin
          Valor[i]:=',';
          end
       else if Valor[i] = ',' then
               begin
               Valor[i]:='.';
               end;
       end;
   end;
   Result := valor;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
        Edit1.Text := VirgPonto(Edit1.Text);
end;

Bjuss

Link para o comentário
Compartilhar em outros sites

  • 0
E sobre passar os parâmetros e não o texto, não sei ao certo pois nunca usei essa propriedade(params), mas acho que a SQL só aceita dados 'Strings'.
O uso de parâmetro da forma como propus deve funcionar perfeitamente. Quando você enviar o camando ao banco (executar/abrir consulta) ele será devidamente convertido em um comando que o banco entenda.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...