PDA

Ver la Versión Completa : Fecha como parametro en Consulta


raul_sal
10-12-2003, 16:54:54
Que tal amigos del foro, les planteo mi problema

Utilizo delphi 6.0, IBX, Firebird 1.5 RC7

Mi problema es que creo una consulta en donde coloco una resta de fechas, una de las fechas es un parametro asi:


SELECT ABS(SUM(VALOR_CAPITAL+IVA_CAPITAL+VALOR_INTERES+IVA_INTERES-VALOR_PAGADO))
FROM CXC_ENC_CARGO B INNER JOIN CXC_DET_CARGO C ON (B.TRANSACCION = C.TRANSACCION) AND (B.DOCUMENTO = C.DOCUMENTO) AND (B.CLIENTE = C.CLIENTE)
WHERE (B.CLIENTE = A.CODIGO) AND (B.STATUS = 'A')
AND (VALOR_CAPITAL-VALOR_PAGADO > 0)
AND ((:FECHA_AL - C.FECHA) >= 1)


es en el parametro :FECHA_AL en donde al lanzar la consulta me dice que la evaluacion de esa expresion no es soportada, ya probe de varias formas pero nada, si sustituyo el parametro con una fecha escrita entre comillas todo va bien, que podria estar pasando.

PD. este mensaje me lo da en Delphi y desde el IBExpert que es la herramienta que utilizo para entrarle a la BD

De antemano gracias.

rastafarey
10-12-2003, 17:15:00
Verifica si el parametro que estas pasando esta en formato gringo
mm/dd/yyyy que asi lo usa interbase por que si lo pasas como dd/mm/yyyy en este caso el dia el lo entendera como mes y el mes como dia y si se pasa de 12 hay error verifica eso a ver que es lo unico que veo que te puede estar molestando.

ok

guillotmarc
10-12-2003, 17:50:16
Hola.

Pruébalo así :


SELECT ABS(SUM(VALOR_CAPITAL+IVA_CAPITAL+VALOR_INTERES+IVA_INTERES-VALOR_PAGADO))
FROM CXC_ENC_CARGO B INNER JOIN CXC_DET_CARGO C ON (B.TRANSACCION = C.TRANSACCION) AND (B.DOCUMENTO = C.DOCUMENTO) AND (B.CLIENTE = C.CLIENTE)
WHERE (B.CLIENTE = A.CODIGO) AND (B.STATUS = 'A')
AND (VALOR_CAPITAL-VALOR_PAGADO > 0)
AND ((C.FECHA - :FECHA_AL) < 1)


Firebird a veces tiene problemas para detectar el tipo de los parámetros.

Saludos.

raul_sal
10-12-2003, 20:20:04
Gracias Guillotmarc probe tu solucion y efectivamente, ya me deja correr el query pero cuando le ingreso un valor a ese parametro lo haga con el formato que lo haga mm/dd/yyyy dd/mm/yyyy me da un error al convertir la cadena, que mas puedo probar o sera que es algun bug que tiene el Firebird 1.5


Gracias

guillotmarc
10-12-2003, 21:38:21
Hola.

El motor espera que le pases una Fecha/hora, que es el tipo de datos detectado para ese parámetro, no una cadena.

Por lo que en el Param del Query, especifica el parámetro como fecha-hora (en dbExpress es ftTimeStamp, en IBX no lo sé), y al pasarle valor, pásale directamente un TDateTime. Si tienes el valor en un string, entonces puedes hacer una conversión StrToDateTime(Fecha).

Saludos.

aurafern
13-09-2004, 21:43:07
Yo tengo el mismo problema!!.

Escribo la siguiente consulta:


SELECT SUM(e.DEBITO-e.CREDITO) AS SALDO, e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, e.numero_cruce, E.CUOTA_CRUCE,
d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO FROM CUENTAS_POR_TERCERO e , cuentas_por_tercero d
where e.ID_EMPRESA_CRUCE=d.ID_EMPRESA and e.ID_SUCURSAL_CRUCE=d.ID_SUCURSAL
and e.ID_TIPO_DOC_CRUCE= d.id_tipo_doc and e.numero_cruce=d.numero AND e.ID_EMPRESA=:EMPRESA AND E.ID_SUCURSAL=:SUCURSAL AND
E.ID_TERCERO=:ID_TERCERO and e.cuota_cruce=d.cuota
AND (D.VENCIMIENTO - :PFECHA)<:DESDE AND ( D.VENCIMIENTO - :PFECHA)>:HASTA
GROUP BY e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE,
e.numero_cruce, E.CUOTA_CRUCE , d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO
having SUM(e.DEBITO-e.CREDITO)<>0



y en el IBConsole, arroja el siguiente error:

Data type unknown, ni siquiera me pide los parámetros

si remplazo este fragmento de intruccion

(D.VENCIMIENTO - :PFECHA)<:DESDE AND ( D.VENCIMIENTO - :PFECHA)>:HASTA

por

(D.VENCIMIENTO - :PFECHA)<-100 AND ( D.VENCIMIENTO - :PFECHA)>100


Me pide los parametros:

empresa=1, sucursal=1, id_tercero=1, pfecha=09/09/2004

y arroja el siguiente error

"Could not convert variant of type (string) into type (boolean)"

Qué hago?.

Es que realmente estos inicios en FireBird, me han dado muy duro.

Muchas gracias por su colaboración! :confused:

aurafern
13-09-2004, 22:26:42
Y si le hago un cast tampoco funciona


SELECT SUM(e.DEBITO-e.CREDITO) AS SALDO, e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, e.numero_cruce, E.CUOTA_CRUCE,
d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO FROM CUENTAS_POR_TERCERO e , cuentas_por_tercero d
where e.ID_EMPRESA_CRUCE=d.ID_EMPRESA and e.ID_SUCURSAL_CRUCE=d.ID_SUCURSAL
and e.ID_TIPO_DOC_CRUCE= d.id_tipo_doc and e.numero_cruce=d.numero AND e.ID_EMPRESA=:EMPRESA AND E.ID_SUCURSAL=:SUCURSAL AND
E.ID_TERCERO=:ID_TERCERO and e.cuota_cruce=d.cuota
AND (D.VENCIMIENTO - cast(:PFECHA AS TIMESTAMP))<-99999 AND ( D.VENCIMIENTO - cast(:PFECHA AS TIMESTAMP))>999999
GROUP BY e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE,
e.numero_cruce, E.CUOTA_CRUCE , d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO
having SUM(e.DEBITO-e.CREDITO)<>0


error:

Data type unknown :confused:

aurafern
13-09-2004, 23:37:08
Cuando llamé al procedimiento que contiene esta consulta, desde delphi me funcionó.

Muchas gracias por su ayuda!! :confused: :eek: :D