SQL - parameter not found

Delphi

21/09/2005

Pessoal,

Tenho:
1 sqlconnection
1 sqlquery
1 datasetprovider
1 cds
1 datasource

Já olhei no forum pessoas que tiveram o mesmo problema, porém aplicando as soluções indicadas não funciona.

BD: FIREBIRD1.5, dialect 3
(Há alguma incompatibilidade do dialect 3 ? )

DM.qTemp.close;
DM.qTemp.SQL.Clear;
DM.qTemp.Add(´SELECT * FROM tabela´);
DM.qTemp.Add(´WHERE altura =: p_altura´);
DM.qTemp.params.parseSql(DM.qTemp.SQL.Text,true);
DM.qTemp.ParamByName(´p_altura´).value:=´170´;
DM.qTemp.open;

Ocorre a msg: parameter ´p_altura´ not found


N1

N1

Curtidas 0

Melhor post

Mobius One

Mobius One

18/09/2013

Altura deve ser um campo numérico, e você está passando um string pra ele. Tente assim:

[code:1:80fe894dc0]DM.qTemp.close;
DM.qTemp.SQL.Clear;
DM.qTemp.Add(´SELECT * FROM tabela WHERE altura = :p_altura´);
DM.qTemp.ParamByName(´p_altura´).AsInteger := 170;
DM.qTemp.open; [/code:1:80fe894dc0]


É só mudar no SQLDataSet acrescentar um Params antes de ParamByName:

DM.qTemp.ParamByName(p_altura).asinteger := 170; --> DM.qTemp.Params.ParamByName(p_altura).asinteger := 170;

Só fazer isso daí que funfa, tava dando esses pepinos comigo também mas achei essa solução por aí no fórum e deu certo.
GOSTEI 1

Mais Respostas

Rjun

Rjun

21/09/2005

Não sei se foi um erro de digitação, mas o correto seria:

DM.qTemp.Add(´WHERE altura = :p_altura´); 



GOSTEI 0
N1

N1

21/09/2005

Rjun

Mesmo fazendo esta alteração continua o erro.


GOSTEI 0
Rjun

Rjun

21/09/2005

Veja se assim funciona:

DM.qTemp.close; 
DM.qTemp.SQL.Clear; 
DM.qTemp.Add(´SELECT * FROM tabela WHERE altura = :p_altura´); 
DM.qTemp.ParamByName(´p_altura´).value := ´170´; 
DM.qTemp.open; 



GOSTEI 0
Rjun

Rjun

21/09/2005

Veja se assim funciona:

DM.qTemp.close; 
DM.qTemp.SQL.Clear; 
DM.qTemp.Add(´SELECT * FROM tabela WHERE altura = :p_altura´); 
DM.qTemp.ParamByName(´p_altura´).value := ´170´; 
DM.qTemp.open; 



GOSTEI 0
Rjun

Rjun

21/09/2005

Veja se assim funciona:

DM.qTemp.close; 
DM.qTemp.SQL.Clear; 
DM.qTemp.Add(´SELECT * FROM tabela WHERE altura = :p_altura´); 
DM.qTemp.ParamByName(´p_altura´).value := ´170´; 
DM.qTemp.open; 



GOSTEI 0
N1

N1

21/09/2005

Ainda continua a mesma msg de erro


GOSTEI 0
Rjun

Rjun

21/09/2005

Em que linha dispara o erro?


GOSTEI 0
N1

N1

21/09/2005

O erro ocorre em:

DM.qTemp.ParamByName(´p_altura´).value:=´170´;


GOSTEI 0
Isabelct

Isabelct

21/09/2005

Altura deve ser um campo numérico, e você está passando um string pra ele. Tente assim:

DM.qTemp.close;
DM.qTemp.SQL.Clear;
DM.qTemp.Add(´SELECT * FROM tabela WHERE altura = :p_altura´);
DM.qTemp.ParamByName(´p_altura´).AsInteger := 170;
DM.qTemp.open; 



GOSTEI 0
N1

N1

21/09/2005

Não adiantou. Será que há alguma outra opção a ser alterada no BD ?


GOSTEI 0
Rjun

Rjun

21/09/2005

Bom, essa pode ser uma solução meio esotérica, mas tente ai. Apague todo esse trecho e apague tambem o compomente qTemp. Compile seu programa. Depois, crie de novo o componente e reescreva o trecho de código que você apagou.


GOSTEI 0
N1

N1

21/09/2005

Rjun,

Fiz o q vc escreveu e não funcionou.

Tentei em outra máquina e tb não funcionou.


GOSTEI 0
Silviogs

Silviogs

21/09/2005

Olá amigo


DM.qTemp.close;
DM.qTemp.SQL.Clear;
DM.qTemp.Add(´SELECT * FROM tabela´);
DM.qTemp.Add(´WHERE altura =: p_altura´); errado
existe um espaço depois dos : ^
correto seria:
DM.qTemp.Add(´WHERE altura =:p_altura´); correto
DM.qTemp.params.parseSql(DM.qTemp.SQL.Text,true);
DM.qTemp.ParamByName(´p_altura´).AsString:=´170´;
DM.qTemp.open;

caso o campo seja numérico o AsString faz a conversão.

desta forma não aparecerá o erro de parametro não encontrado

´Ocorre a msg: parameter ´p_altura´ not found´

Atenciosamente

Silvio Guedes


GOSTEI 0
N1

N1

21/09/2005

Agora está funcionando.

Obrigado a todos que ajudaram.


GOSTEI 0
Rjun

Rjun

21/09/2005

O que você fez pra funcionar?


GOSTEI 0
POSTAR