Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   firedac phys fb dynamic sql error expression evaluation not supported invalid data ty (https://www.clubdelphi.com/foros/showthread.php?t=95280)

amadis 09-07-2021 12:57:50

firedac phys fb dynamic sql error expression evaluation not supported invalid data ty
 
firedac phys fb dynamic sql error expression evaluation not supported invalid data type for multiplication in dialect 3

Código Delphi [-]
QAct.SQL.Append('UPDATE articulos A');
QAct.SQL.Append('SET');

//La linea de aqui abajo da el error del titulo del post      
QAct.SQL.Append('A.gan = '+edit1.Text+ ',iif( costoiva , A.l1 = (A.costo/A.alic * :P1) * A.alic, A.l1 = (A.costo * :P1) * A.alic )');
Qact.ParamByName('P1').AsFloat := f1+strtofloat(edit1.text)/100;


// pero en cambio si en lugar de usar parametro paso el dato en string funciona como aqui debajo
QAct.SQL.Append('A.gan = '+edit1.Text+ ', A.l1 = iif( A.costoiva , ((A.costo/A.alic) * '+floattostr(ff1)+') * A.alic, (A.costo * '+floattostr(ff1)+') * A.alic )');
ff1 := f1+strtofloat(edit1.text)/100;

¿Como podria usar parametro para esta operacion ya que es mas seguro que la conversion a string?.
Lo que hago es quitar el IVA de un precio si este lo incluye y luego aplicar porcentajes para calcular precio de venta.

cloayza 09-07-2021 16:40:33

Estimado Amadis, creo que el problema podría ser el iif...

Primero: Las sentencias de asignacion a A.l1 son distintas

Código SQL [-]
--En esta estas realizando una asignación dentro del IIF... ERROR
, iif( costoiva , A.l1 = (A.costo/A.alic * :P1) * A.alic, A.l1 = (A.costo * :P1) * A.alic )

--Aqui estas asignando a A.l1 el valor resultante del IIF...Correcta
, A.l1 = iif( A.costoiva , ((A.costo/A.alic) * :P1) * A.alic, (A.costo * :P1) * A.alic )

Te sugiero utilizar esta sentencia
Código Delphi [-]
...
QAct.SQL.Append('A.l1  = iif(A.costoiva, (A.costo/A.alic * :P1) * A.alic, (A.costo * :P1) * A.alic)');

Saludos cordiales

amadis 12-07-2021 16:10:51

La sentencia que me sugieres, que es la correcta da el mismo error.

Hay algo al usar el parametro que provoca el error porque si uso una variable en lugar del parámetro funciona.

Pero usar la variable implica que deba controlar el punto decimal para evitar errores


La franja horaria es GMT +2. Ahora son las 09:48:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi