Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2014
satelit satelit is offline
Registrado
 
Registrado: abr 2007
Posts: 6
Poder: 0
satelit Va por buen camino
Consulta SQL devuelve valor erroneo

Saludos. solicito ayuda sobre el siguiente caso.

Uso firebird 2.5, delphi 7 y recupero fechas desde un procedimiento almacenado el cual recibe un parámetro de la siguiente manera.

Código SQL [-]
 select fUltima from OBT_ULTIMAFECHACIERRE(:id_igl);

La estructura interna de dicho procedimiento es esta.

Código SQL [-]
  for select max(c_fecha) from cierre  where (c_id_igl = :id_igl)  
into :fUltima do  
suspend;

Debo aclarar que ejecutando esta consulta devuelve la fecha correcta, pero hay no es el problema, el problema esta cuando intento utilizar la fecha devuelta por esta consulta para realizar otra consulta que es la siguiente:

Procedimiento que ejecuto desde delphi dentro de un ibquery:
Código SQL [-]
 SELECT * FROM OBT_FECHASTESOROCIERRE(:id_igl, :fecha0, :fecha1)

Esta es la estructura interna del procedimiento en el servidor:
Código SQL [-]
for select distinct(t_fechaingreso) from tfonigl
  where (t_fechaingreso between :fUltima and :fechaActual)and(t_id_igl = :id_igl)
  into :fechas_dcierre do
  suspend;

En vez de devolverme las fechas en el rango especificado en el Where, también devuelve las fechas anteriores a la primera fecha (fUltima) lo cual es incorrecto.
Responder Con Cita
  #2  
Antiguo 18-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Habría que ver exactamente qué valores le pasas, tu código fuente delphi, etc.

Por cierto, aquí no hace falta el for:
Código SQL [-]
for select max(c_fecha) from cierre  where (c_id_igl = :id_igl)  
  into :fUltima do  
  suspend;
Responder Con Cita
  #3  
Antiguo 18-04-2014
satelit satelit is offline
Registrado
 
Registrado: abr 2007
Posts: 6
Poder: 0
satelit Va por buen camino
Gracias por tu pronta respuesta.
Este el codigo donde ejecuto el procedimiento almacenado dentro de una funcion que devuelve un valor TDate. El campo en la DB es Date:
Código Delphi [-]
   with Datos.IBQr_Obt_UltimaFechaCierre do
    begin
      Close;
      Params[0].Value:=Id_Igl;
      Open;
    end;
  Result:=Datos.IBQr_Obt_UltimaFechaCierreC_ULTIMAFECHA.AsDateTime;

Y este es el codigo de la consulta que recibe el valor de la funcion arriba citada:
Código Delphi [-]
with IBQr_FechaTCierre do
        begin
          Close;
          Params[0].Value:=Id_Igl;
          Params[1].Value:=UltimaFechaCierre; //Esta es la fecha que devuelve la funcion de arriba
          Params[2].Value:=DateOf(DTP_4.Date);
          Open;
        end;
Lo curioso para mi es que si en lugar de la variable UltimaFechaCierre de tipo TDate colocara esto strToDate('fecha a discrecion') funciona perfectamente.
Responder Con Cita
  #4  
Antiguo 18-04-2014
satelit satelit is offline
Registrado
 
Registrado: abr 2007
Posts: 6
Poder: 0
satelit Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje

Por cierto, aquí no hace falta el for:
Código SQL [-]
for select max(c_fecha) from cierre  where (c_id_igl = :id_igl)  
  into :fUltima do  
  suspend;
Gracias por la aclaración. Antes tenia la consulta asi:
Código SQL [-]
fUltima = (select max(c_fecha) from cierre  where (c_id_igl = :id_igl));
suspend;

Pero en el intento de búsqueda de alguna solución, cambie, claro con los mismos resultados.
Responder Con Cita
  #5  
Antiguo 18-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por satelit Ver Mensaje
Gracias por la aclaración. Antes tenia la consulta asi:
Código SQL [-]fUltima = (select max(c_fecha) from cierre where (c_id_igl = :id_igl)); suspend;


Pero en el intento de búsqueda de alguna solución, cambie, claro con los mismos resultados.

Solamente necesitas quitar el for porque se usa para recorrer una serie de registros, y no es el caso.
Responder Con Cita
  #6  
Antiguo 18-04-2014
satelit satelit is offline
Registrado
 
Registrado: abr 2007
Posts: 6
Poder: 0
satelit Va por buen camino
Pero en ambos casos el problema persiste y no logro que la fecha recuperada al intentar otra consulta funcione.

Si ingreso una fecha convirtiéndola de string a Date si funciona.
Responder Con Cita
  #7  
Antiguo 18-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya, pero es que no has contestado todo lo que pregunté: ¿qué valores le pasas?, ¿has visto exactamente lo que tiene la variable que le envías?, ¿qué valores hay en la base de datos?, etc
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
edit.text muestra un valor erróneo :S ioco Lazarus, FreePascal, Kylix, etc. 3 03-03-2010 18:19:34
RecNo devuelve valor -1 jandok238 MySQL 1 27-11-2009 22:01:23
Help: Funcion Cos() me arroja un valor erroneo rubencho C++ Builder 3 22-07-2008 04:40:52
No me devuelve valor un funccion creada dentro de una DLL albertoP Varios 3 17-04-2006 21:58:54
Select Max siempre devuelve valor FernanGil Conexión con bases de datos 3 06-10-2003 15:55:36


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


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