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
  #21  
Antiguo 16-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.

Sin el valor que se asignan a los parámetros del procedimiento, no se puede estimar como será la sentencia construída dinamicamente, y por tanto, porqué falla.

La verdad es que seria mucho más simple que nos pasaras directamente el valor de :SQL_INS, así como el mensaje de error que te sale actualmente. Puesto que aquí es donde debe buscarse el error.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #22  
Antiguo 17-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Esta es la consulta:
Código SQL [-]
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 = 1  AND E.ID_SUCURSAL=1
and e.id_tercero =1 AND E.ID_VENDEDOR=1 AND E.ID_SUC_VENDEDOR=1
and e.id_sucursal_tercero=1   and e.id_auxiliar =13050501  
and (09/16/2004 - d.vencimiento)>= 30 and (09/16/2004 - d.vencimiento)<= 90
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
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:cuota,:fecha_DOC,:vencimiento,:id_ter  cero,:id_sucursal_tercero, :ID_VENDEDOR

los parametros son

Código Delphi [-]
query2.close;
if (mdId_empresa.asstring<>' ') then 
query2.ParamByName('empresa').AsString:=' AND E.ID_EMPRESA='+ mdId_empresa.asstring+ ' ';
if (mdId_sucursal.asstring<>' ') then
query2.ParamByName('sucursal').AsString:=' AND E.ID_SUCURSAL='+ mdId_sucursal.asstring+ ' ';
Query2.ParamByName('modelo').AsInteger:=4;
Query2.ParamByName('no_rango').AsInteger:=4;
query2.ParamByName('PFECHA').AsDate:= int(mdFECHA.AsDateTime);
if (SELECCIONAVENDE='SI') THEN
query2.ParamByName('PVENDEDOR').AsString:=' AND E.VENDEDOR= 1 ';
if (SELECCIONACUENTA='SI') THEN
query2.ParamByName('PCUENTA').AsString:= ' AND E.PCUENTA = 13050501 ';
if (SELECCIONATERC='SI') THEN
query2.ParamByName('PTERCERO').AsString:=' AND E.ID_TERCERO=1 ';
if (SELECCIONASUCTER='SI') THEN
query2.ParamByName('Psuc_TERCERO').AsString:=' AND E.ID_SUCURSAL_TERCERO=1 ';
if (SELECCIONASUCVEND='SI') THEN
query2.ParamByName('Psuc_VENDEDOR').AsString:=' AND E.ID_SUC_VENDEDOR=1 ';
query2.Open;


y sale el error : column unknown 09/16/2004 , cuando llamo al SP desde delphi.

lo que quiere decir que si solo se va a filtrar por rango de fechas y empresa
la consulta que daría de la siguiente manera

Código SQL [-]
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 = 1 
and ( fecha - d.vencimiento)>= 30 and ( fecha - d.vencimiento)<= 90
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
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:cuota,:fecha_DOC,:vencimiento,:id_ter  cero,:id_sucursal_tercero, :ID_VENDEDOR

Lo que se traduce en que solo quiero pasar los filtros (que aparecen coloreados en la primera consulta) sólo cuando sea necesario.

Muchas gracias por tu paciencia!!

Última edición por aurafern fecha: 17-09-2004 a las 17:33:44.
Responder Con Cita
  #23  
Antiguo 17-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.

Lo primero que salta a la vista, es que tienes fechas sin delimitar. Es decir :

Código SQL [-]
and (09/16/2004 - d.vencimiento)>= 30 and (09/16/2004 - d.vencimiento)<= 90

Eso debería quedar en :

Código SQL [-]
and ('09/16/2004' - d.vencimiento)>= 30 and ('09/16/2004' - d.vencimiento)<= 90

Si aún no te funciona, haz explicitamente la conversión de cadena a fecha :

Código SQL [-]
and (cast('09/16/2004' as date) - d.vencimiento)>= 30 and (cast('09/16/2004' as date) - d.vencimiento)<= 90

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #24  
Antiguo 17-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
NOTA: Antes de modificar el procedimiento almacenado, prueba directamente la sentencia SQL. Cuando consigas que funcione, entonces puedes modificar el procedimiento para que construya esa sentencia.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #25  
Antiguo 18-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Nota: al parametro pfecha lo cambie de tipo y tamaño por varchar(100), para no mandarle solo la fecha, sino la cadena

' and ('09/09/2004' - d.vencimiento) '

La sentencia SQL así

Código SQL [-]
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 = 1  AND E.ID_SUCURSAL=1
and e.id_tercero =1 AND E.ID_VENDEDOR=1 AND E.ID_SUC_VENDEDOR=1
and e.id_sucursal_tercero=1   and e.id_auxiliar =13050501
and ('09/09/2004' - d.vencimiento)>= 30 and ('09/09/2004' - d.vencimiento)<= 90
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

funciona perfectamente

Si lo ejecuto paso a paso por el IBAdmin4, la cadena SQL_INS es exactamente igual a la consulta que muestro arriba, es decir, pienso que esta bien construida, pero arroja error al momento de llamar a la sentencia

Código SQL [-]
FOR EXECUTE STATEMENT SQL_INS
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:cuota,:fecha_DOC,:vencimiento,:id_ter  cero,:id_sucursal_tercero, :ID_VENDEDOR


Access Violation at address 007CCAA4 in module "IBAdmin.exe" .......

lo que pienso es que talvez este programa no soporta la instrucción.

pero
en el IBConsole hago el siguiente llamado

Código SQL [-]
SELECT * FROM cartera_proveedores_cadena(' ',' ',4,4,' and ('09/09/2004' - d.vencimiento) ',' ',' ',' ',' ',' ',' ')

Error:

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 62
09

Código SQL [-]

SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and ('09/09/2004' - d.vencimiento) "," "," "," "," "," "," ")

Error

ISC ERROR MESSAGE:
Dynamic SQL Error
expression evaluation not supported

Código SQL [-]

SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and (cast('09/09/2004' as date) - d.vencimiento) "," "," "," "," "," "," ")

ISC ERROR MESSAGE:
expression evaluation not supported

STATEMENT:
TIBOInternalDataset: "<TApplication>.frmMain.dlgWisql.<TIBOQuery>.<TIBOInternalDataset>."

quito lo del filtro de fechas y tambien funciona en el IBconsole

Código SQL [-]
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 = 1  AND E.ID_SUCURSAL=1
and e.id_tercero =1 AND E.ID_VENDEDOR=1 AND E.ID_SUC_VENDEDOR=1
and e.id_sucursal_tercero=1   and e.id_auxiliar =13050501
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

respectivamente construyo exactamente esta misma cadena en el SP y lo llamo desde el ibconsole


Código SQL [-]

SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and (cast('09/09/2004' as date) - d.vencimiento) "," "," "," "," "," "," ")

O

Código SQL [-]

SELECT * FROM cartera_proveedores_cadena(' ',' ',4,4,' and ('09/09/2004' - d.vencimiento) ',' ',' ',' ',' ',' ',' ')

y arroja
ISC ERROR MESSAGE:
Variable type (position 6) in EXECUTE STATEMENT 'SELECT SUM(e.DEBITO-e.CREDITO) AS SALDO, e.ID_AUXI' INTO does not match return

No he podido con esto!!
Responder Con Cita
  #26  
Antiguo 18-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
Nota: al parametro pfecha lo cambie de tipo y tamaño por varchar(100), para no mandarle solo la fecha, sino la cadena

' and ('09/09/2004' - d.vencimiento) '

La sentencia SQL así

Código SQL [-]
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 = 1 AND E.ID_SUCURSAL=1
and e.id_tercero =1 AND E.ID_VENDEDOR=1 AND E.ID_SUC_VENDEDOR=1
and e.id_sucursal_tercero=1 and e.id_auxiliar =13050501
and ('09/09/2004' - d.vencimiento)>= 30 and ('09/09/2004' - d.vencimiento)<= 90
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

funciona perfectamente

Si lo ejecuto paso a paso por el IBAdmin4, la cadena SQL_INS es exactamente igual a la consulta que muestro arriba, es decir, pienso que esta bien construida, pero arroja error al momento de llamar a la sentencia

Código SQL [-]
FOR EXECUTE STATEMENT SQL_INS
into :saldo,:id_auxiliar,:id_empresa,:id_sucursal,:id_tipo,:numero,:cuota,:fecha_DOC,:vencimiento,:id_ter  cero,:id_sucursal_tercero, :ID_VENDEDOR


Access Violation at address 007CCAA4 in module "IBAdmin.exe" .......

lo que pienso es que talvez este programa no soporta la instrucción.
No lo sé, no conozco el IBAdmin. Mi preferido es el IB-Expert. Pruébalo hay una trial de 30 dias (después te puedes instalar la versión personal, que es gratuita, aunque te quedas sin depurador de procedimientos almacenados).

Cita:
Empezado por aurafern
pero
en el IBConsole hago el siguiente llamado

Código SQL [-]
SELECT * FROM cartera_proveedores_cadena(' ',' ',4,4,' and ('09/09/2004' - d.vencimiento) ',' ',' ',' ',' ',' ',' ')

Error:

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 62
09

Código SQL [-]
 
SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and ('09/09/2004' - d.vencimiento) "," "," "," "," "," "," ")

Error

ISC ERROR MESSAGE:
Dynamic SQL Error
expression evaluation not supported

Código SQL [-]
 
SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and (cast('09/09/2004' as date) - d.vencimiento) "," "," "," "," "," "," ")

ISC ERROR MESSAGE:
expression evaluation not supported

STATEMENT:
TIBOInternalDataset: "<TApplication>.frmMain.dlgWisql.<TIBOQuery>.<TIBOInternalDataset>."
El problema es que las cadenas con las fechas no se construyen adecuadamente. Para indicar que hay una comilla dentro de un literal de cadena, tienes que poner dos comillas (no confundir con una doble comilla).

Es decir :

Código SQL [-]
SELECT * FROM cartera_proveedores_cadena(' ',' ',4,4,' and (''09/09/2004'' - d.vencimiento) ',' ',' ',' ',' ',' ',' ')

Cita:
Empezado por aurafern
quito lo del filtro de fechas y tambien funciona en el IBconsole

Código SQL [-]
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 = 1 AND E.ID_SUCURSAL=1
and e.id_tercero =1 AND E.ID_VENDEDOR=1 AND E.ID_SUC_VENDEDOR=1
and e.id_sucursal_tercero=1 and e.id_auxiliar =13050501
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

respectivamente construyo exactamente esta misma cadena en el SP y lo llamo desde el ibconsole


Código SQL [-]
 
SELECT * FROM cartera_proveedores_cadena(" "," ",4,4," and (cast('09/09/2004' as date) - d.vencimiento) "," "," "," "," "," "," ")

O

Código SQL [-]
 
SELECT * FROM cartera_proveedores_cadena(' ',' ',4,4,' and ('09/09/2004' - d.vencimiento) ',' ',' ',' ',' ',' ',' ')

y arroja
ISC ERROR MESSAGE:
Variable type (position 6) in EXECUTE STATEMENT 'SELECT SUM(e.DEBITO-e.CREDITO) AS SALDO, e.ID_AUXI' INTO does not match return

No he podido con esto!!
Este mensaje de error indica que alguno de los valores que devuelve la consulta no es del mismo tipo que las variables conde intentamos asignarlo. Verifica el tamaño de las cadenas, decimales, etc. ...

Ánimo, cada vez estas más cerca de lograr que funcione.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 18-09-2004 a las 20:28:31.
Responder Con Cita
  #27  
Antiguo 21-09-2004
aurafern aurafern is offline
Miembro
 
Registrado: dic 2003
Posts: 34
Poder: 0
aurafern Va por buen camino
Tenias toda la razon en lo de los tipos de datos, estaba colocando en las variables del into una de tipo smallint y en la tabla estaba como double. Pero sigo sin resolver lo de la fecha.

Ahora: la variable pfecha la declaro como date

Código SQL [-]

 EMPRESA VARCHAR(100),
    SUCURSAL VARCHAR(100),
    MODELO VARCHAR(15),
    NO_RANGOS INTEGER,
    PFECHA DATE)

declare variable P_DATA_D VARCHAR(200);
declare variable P_DATA_H VARCHAR(200);

 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 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, ';
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
DO

lo ejecuto desde IB-Expert personal y sigue devolviendo el error

Unsuccessful execution caused by a system error that preclude
successful execution of subsequent statements
Dynamic SQL Error
expression evaluation not supported

le coloque los parametros asi

empresa and e.id_empresa=1
sucursal and e.id_sucursal=1
modelo 4
no_rango 4
pfecha 09/20/2004

entonces sigo sin entender...

En el ibAdmin como si lo puedo ejecutar paso a paso
observo que la cadena SQL_INS, se construye bien.

Código SQL [-]
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, 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=1 and e.id_sucursal=1
  AND ('20-SEP-2004' - D.VENCIMIENTO) >= -9999 AND ('20-SEP-2004' - D.VENCIMIENTO) >= -30
  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

voy al IBConsole pego esta cadena resultante de sql_ins y la ejecuto y funciona ....entonces no entiendo porque mientras está en el procedimiento almacenado no funciona.

Saludos.

Muchas gracias por el interes prestado!

Última edición por aurafern fecha: 21-09-2004 a las 00:41:36.
Responder Con Cita
  #28  
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.

El caso es que este error suele aparecer cuando la base de datos está corrupta. Prueba a hacer un Backup y posterior Restore de la Base de Datos (con esto la vuelves a construir y te aseguras de que es totalmente coherente).

Otro problema que le veo, es que SUM(e.DEBITO-e.CREDITO) quizá no es del tipo que te esperas. Será mejor que hagas un CAST del resultado, es decir que lo sustituyas por cast(sum(e.DEBITO-e.CREDITO) as numeric(18,4)) (He puesto numeric(18,4) pero tienes que poner el tipo que utilizas en la variable que lo va a recoger).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #29  
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
  #30  
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
  #31  
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
  #32  
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
  #33  
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
  #34  
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 22:07:04.


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