Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Hice todo lo que me dijiste, pero nada que funciona lo de la fecha:

Si le quito el filtro de la fecha funciona el SP.

La cadena se construyó así:

Código SQL [-]
SELECT CAST(SUM(e.DEBITO-e.CREDITO) AS DOUBLE PRECISION) AS SALDO,
e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE,
e.numero_cruce, d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR
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.CUOTA_CRUCE=D.CUOTA and e.ID_TIPO_DOC_CRUCE=
 d.id_tipo_doc and e.numero_cruce=d.numero AND ('21-SEP-2004' - D.VENCIMIENTO) >= -9999 AND
  ('21-SEP-2004' - D.VENCIMIENTO) <= 9999 GROUP BY e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE,
  e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, e.numero_cruce, d.fecha, d.vencimiento,e.id_tercero,
  e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR having SUM(e.DEBITO-e.CREDITO)<>0

y funciona la sql_ins construida. Pero en el procedimiento sigue sin funcionar,


Ahora, En el IBConsole:

Noté, que si tomo la consulta y copio de allí la parte que tiene que ver con pfecha.....

Código SQL [-]

 AND ('21-SEP-2004' - D.VENCIMIENTO) >= -9999 AND
  ('21-SEP-2004' - D.VENCIMIENTO) <= 9999


y la pego en le procedimiento en el lugar correspondiente aparece así

Código SQL [-]

 AND ('21-SEP-2004' - D.VENCIMIENTO) >= -9999 AND
  ('21-SEP-2004' - D.VENCIMIENTO) <= 9999

Lo que creo es que no arma bien la fecha, por eso me sale column unknown SEP, pero, la he cambiado de n modos para corregir este error y casi que de todos los modos que pruebo me arroja "General SQL error, expression evaluation not supported."

Creo que de pronto sigo pasando mal los parametros aunque ya he probado todas las combinaciones que he podido:

desde delphi vienen asi:
Código Delphi [-]
query2.close;
query2.ParamByName('empresa').AsString:=' AND E.ID_EMPRESA=1 ';
query2.ParamByName('sucursal').AsString:=' AND E.ID_SUCURSAL=1 ';
Query2.ParamByName('modelo').AsiNTEGER:=4;
Query2.ParamByName('no_rango').AsInteger:=4;
query2.ParamByName('PFECHA').AsDateTIME:= int(mdFECHA.AsDateTime);
query2.open;

y en el procedimiento aparecen asi:

Código SQL [-]
 EMPRESA VARCHAR(100),
  SUCURSAL VARCHAR(100),
  MODELO INTEGER,
  NO_RANGOS INTEGER,
  PFECHA TIMESTAMP

la consulta problema es:

Código SQL [-]
P_DATA_D = ' AND (''' || cast(:PFECHA as varchar(20)) || ''' - D.VENCIMIENTO) >= ' ||ESDE;
 P_DATA_H = ' AND (''' || cast(:PFECHA as varchar(20)) || ''' - D.VENCIMIENTO) >= ' ||:HASTA;

SQL_INS= 'SELECT CAST(SUM(e.DEBITO-e.CREDITO) AS DOUBLE PRECISION) AS SALDO, e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, e.numero_cruce, ';
SQL_INS=SQL_INS ||' d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR FROM CUENTAS_POR_TERCERO e , cuentas_por_tercero d ';
SQL_INS=SQL_INS ||' where e.ID_EMPRESA_CRUCE=d.ID_EMPRESA and e.ID_SUCURSAL_CRUCE=d.ID_SUCURSAL AND E.CUOTA_CRUCE=D.CUOTA ';
SQL_INS=SQL_INS ||' and e.ID_TIPO_DOC_CRUCE= d.id_tipo_doc and e.numero_cruce=d.numero ' ||:EMPRESA ||:SUCURSAL;
SQL_INS=SQL_INS ||_DATA_D ||:P_DATA_H;
SQL_INS=SQL_INS ||' GROUP BY e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, ';
SQL_INS=SQL_INS ||' e.numero_cruce, d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR ';
SQL_INS=SQL_INS ||' having SUM(e.DEBITO-e.CREDITO)<>0 ';
FOR EXECUTE STATEMENT SQL_INS
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:fecha_DOC,:vencimiento,:id_tercero,:i  d_sucursal_tercero, :ID_VENDEDOR

Saludos!!

Última edición por aurafern fecha: 21-09-2004 a las 17:53:30.
Responder Con Cita
  #2  
Antiguo 21-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola

Cita:
Empezado por aurafern
Ahora, En el IBConsole:

Noté, que si tomo la consulta y copio de allí la parte que tiene que ver con pfecha.....

Código SQL [-]
 
AND ('21-SEP-2004' - D.VENCIMIENTO) >= -9999 AND
('21-SEP-2004' - D.VENCIMIENTO) <= 9999


y la pego en le procedimiento en el lugar correspondiente aparece así

Código SQL [-]
 
AND ('21-SEP-2004' - D.VENCIMIENTO) >= -9999 AND
('21-SEP-2004' - D.VENCIMIENTO) <= 9999

Lo que creo es que no arma bien la fecha, por eso me sale column unknown SEP, pero, la he cambiado de n modos para corregir este error y casi que de todos los modos que pruebo me arroja "General SQL error, expression evaluation not supported."
Hola, pensaba que esto ya lo teniamos superado. La fecha tiene que estar en formato '09/21/2004' y no '21-SEP-2004'.

Cita:
Empezado por aurafern
Creo que de pronto sigo pasando mal los parametros aunque ya he probado todas las combinaciones que he podido:

desde delphi vienen asi:
Código Delphi [-]
query2.ParamByName('PFECHA').AsDateTIME:= int(mdFECHA.AsDateTime);

y en el procedimiento aparecen asi:

Código SQL [-]
PFECHA TIMESTAMP
¿ Porqué no pasas la fecha, directamente como cadena ?. Con un parámetro varchar(10), y una asignación del tipo :

query2.ParamByName('PFECHA').AsString := FormatDateTime('mm/dd/yyyy', mdFECHA.AsDateTime);

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 21-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Esa fue una de las formas como lo probe y me sale
"General SQL error, expression evaluation not supported."

Saludos!!
Responder Con Cita
  #4  
Antiguo 22-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Te aseguro de que esa es la forma de especificar una fecha en una cadena (puedes comprobarlo ejecutando una pequeña consulta directamente en el IBConsole).

El error te lo debería provocar algún otro problema en la sentencia.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 22-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Hola!

Te cuento que he probado dandole el siguiente valor a P_DATA_d

Código SQL [-]
P_DATA_D = ' AND (D.VENCIMIENTO <= ''' ||:PFECHA|| ''') ';

SQL_INS= 'SELECT CAST(SUM(e.DEBITO-e.CREDITO) AS DOUBLE PRECISION) AS SALDO, e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, e.numero_cruce, ';
SQL_INS=SQL_INS ||' d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR FROM CUENTAS_POR_TERCERO_X e , cuentas_por_tercero_x d ';
SQL_INS=SQL_INS ||' where e.ID_EMPRESA_CRUCE=d.ID_EMPRESA and e.ID_SUCURSAL_CRUCE=d.ID_SUCURSAL AND E.CUOTA_CRUCE=D.CUOTA ';
SQL_INS=SQL_INS ||' and e.ID_TIPO_DOC_CRUCE= d.id_tipo_doc and e.numero_cruce=d.numero ' ||:EMPRESA ||:SUCURSAL;
SQL_INS=SQL_INS ||_DATA_D;
SQL_INS=SQL_INS ||' GROUP BY e.ID_AUXILIAR,e.ID_EMPRESA_CRUCE, e.ID_SUCURSAL_CRUCE,e.ID_TIPO_DOC_CRUCE, ';
SQL_INS=SQL_INS ||' e.numero_cruce, d.fecha, d.vencimiento,e.id_tercero,e.ID_SUCURSAL_TERCERO, E.ID_VENDEDOR ';
SQL_INS=SQL_INS ||' having SUM(e.DEBITO-e.CREDITO)<>0 ';
FOR EXECUTE STATEMENT SQL_INS
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:fecha_DOC,:vencimiento,:id_tercero,:i  d_sucursal_tercero, :ID_VENDEDOR
DO
   BEGIN
nhjghggg
 end

y funciona perfectamente pasandole los parametros asi
Código Delphi [-]
query6.ParamByName('PFECHA').AsDateTIME:= int(mdFECHA.AsDateTime);
o asi
Código Delphi [-]
query6.ParamByName('PFECHA').AsSTRING :=Formatdatetime('mm/dd/yyyy',mdFECHA.AsDateTime);

y pienso que la cadena de la fecha para colocarla en una consulta construida es que no funciona.. o sera que me equivoco?

si la consulta no es construida funciona perferct,

Código SQL [-]
FOR 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, E.ID_VENDEDOR 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.CUOTA_CRUCE=D.CUOTA
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 (fecha - d.vencimiento)>=:desde and (fecha - d.vencimiento)<=: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, E.ID_VENDEDOR
having SUM(e.DEBITO-e.CREDITO)<>0

pero si toca armarla, hay algo en la construccion de la cadena que resta las fechas que no la deja funcionar.

Ahora yo me pregunto: Porqué cuando la construya si funciona la comparación de las dos fechas y la resta no?


Saludos!!
Responder Con Cita
  #6  
Antiguo 01-10-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Thumbs up

Gracias por haberme tenido tanta paciencia!

El problema se resolvió teniendo en cuenta los valiosos consejos de Guillotmarc y a la colaboracion de Panta Llunel, quien me sugirio la siguiente instrucción

Código SQL [-]
P_DATA_D = ' AND ( D.VENCIMIENTO+' || cast(:desde as varchar(4)) || ') >= 
''' || cast(:PFECHA as varchar(10)) || '''' ; 
P_DATA_H = ' AND ( D.VENCIMIENTO+' || cast(:hasta as varchar(4)) || ') <= 
''' || cast(:PFECHA as varchar(10)) || '''' ;

Haciendo despejes en la desigualdad. Es decir, pasar el campo vencimiento al otro lado de la desigualdad.

Muchas gracias de nuevo.

Utilizando execute statement, me ahorraré mucho trabajo y lograré una mayor eficiencia en algunos problemas que tengo que resolver
Que descanso!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:24:18.


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
Copyright 1996-2007 Club Delphi