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 19-12-2022
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 152
Poder: 20
Tcmn Va por buen camino
Error al querer incrementar semanas con DATEADD

Hola a todos, de antemano gracias por su tiempo en leer este hilo. Fijense que estoy haciendo un procedimiento almacenado con IbExpert, Firebird 2.1 y Windows 8 en el que quiero incrementar N semanas una fecha y lo hago de la siguiente manera:
Código SQL [-]
select coalesce(count(*),0)
from interesnooro
where num_cont=:v_num_cont  
into :v_pagosant;
v_semananva=(v_pagosant+1);

select  fechaoriginal
from contratosnooro
where num_cont=:v_num_cont
into  :v_fechacont;

v_semanaquepaga=dateadd (v_semananva week to v_fechacont);

la v_semananva es SMALLINT y obviamente V_SEMANAQUEPAGA y V_FECHACONT son de tipo DATE y cuando esta activa la linea donde quiero aumentar el numero de semanas al compilar el procedimiento me manda el mensaje:

expression evaluation not supported.
expression evaluation not supported.
At procedure 'INSERTAR1PAGOFORZNOORO' line: 60, col: 1.


Ya revisé la sintaxis, tipos de variables y no encuentro por qué me sigue marcando error en la linea DATEADD, cualquier idea la agradeceré mucho.
__________________
Salu2
Responder Con Cita
  #2  
Antiguo 19-12-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
He creado el un procedimiento de prueba para comprobar lo que mencionas.
Funciona correctamente en Firebird 2.5.

Código SQL [-]
create procedure prueba_dateadd (
    fecha_ini date,
    semanas smallint)
returns (
    fecha_fin date)
as
begin
    fecha_fin = dateadd(semanas week to fecha_ini);
    suspend;
end

Escribe el código entero de tu procedimiento para ver si hay algo raro que podamos ver.
Responder Con Cita
  #3  
Antiguo 19-12-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Esta no es la forma correcta de asegurar que un valor no sea nulo

Código SQL [-]
select coalesce(count(*),0)
from interesnooro
where num_cont = :v_num_cont  
into :v_pagosant;
/* Si no hay ningún registo que cumpla "num_cont=:v_num_cont", el valor de v_pagosant no se  modificará y seguirá con el valor que tenía antes del select (nulo si no se ha definido) */

v_semananva = (v_pagosant + 1);

La forma correcta sería:
Código SQL [-]
select count(*)
from interesnooro
where num_cont = :v_num_cont  
into :v_pagosant;

v_pagosant = coalesce(v_pagosant, 0);
v_semananva = (v_pagosant + 1);

/* O resumiendo en una sola línea */
v_semananva = (coalesce(v_pagosant, 0) + 1);

Última edición por duilioisola fecha: 19-12-2022 a las 17:03:16.
Responder Con Cita
  #4  
Antiguo 19-12-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que "week" no es un parámetro válido.
Cita:
Dateadd()
Adds the specified number of years, months, days, hours, minutes, seconds or milliseconds to a date/time value.
Puedes multiplicar "days" por 7
Responder Con Cita
  #5  
Antiguo 19-12-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Es verdad, week se agregó en Firebird 2.5. En la versión 2.1 no está. Siempre me olvido de revisar versiones anteriores.

Cita:
Es que "week" no es un parámetro válido.
Cita:
Dateadd()
Adds the specified number of years, months, days, hours, minutes, seconds or milliseconds to a date/time value.
Se podría solucionar fácilmente como dice Casimiro:

Código SQL [-]
create procedure prueba_dateadd (
    fecha_ini date,
    semanas smallint)
returns (
    fecha_fin date)
as
begin
    fecha_fin = dateadd((semanas * 7) day to fecha_ini);
    suspend;
end
Responder Con Cita
  #6  
Antiguo 19-12-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por duilioisola Ver Mensaje
Es verdad, week se agregó en Firebird 2.5. En la versión 2.1 no está. Siempre me olvido de revisar versiones anteriores.
No me había fijado en la versión, he acertado por casualidad
Responder Con Cita
  #7  
Antiguo 19-12-2022
Tcmn Tcmn is offline
Miembro
 
Registrado: sep 2004
Posts: 152
Poder: 20
Tcmn Va por buen camino
Qué habil casimiro. Muchas gracias por las ideas duilioisola. En la abundancia de consejeros hay logro. Justo era WEEK, quien provocaba todo el problema. Problema resuelto. Mil gracias y buen día
__________________
Salu2
Responder Con Cita
  #8  
Antiguo 20-12-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado Tcmn, puede estar de sobra mi recomendación, pero ahí va...

Le recomiendo migrar a la última versión, trae muchas mejoras y mas...El proceso no es nada de complicado.

Saludos cordiales
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con Error al querer Abrir Formulario microbiano Varios 10 26-05-2012 05:08:47
Error al querer mostrar mensaje con JS YaninaGenia .NET 0 27-07-2006 16:00:45
Error al querer editar Luana Conexión con bases de datos 0 11-11-2005 15:51:11
error al querer eliminar un registro pablito23 Conexión con bases de datos 0 05-07-2005 08:25:07
Error al querer hacer un nuevo Reporte Betsa23 Varios 2 30-11-2004 16:34:09


La franja horaria es GMT +2. Ahora son las 11:43:11.


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