Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL devuelve valor erroneo (https://www.clubdelphi.com/foros/showthread.php?t=85694)

satelit 18-04-2014 18:04:41

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.

Casimiro Notevi 18-04-2014 18:09:15

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;

satelit 18-04-2014 18:25:22

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.

satelit 18-04-2014 18:34:14

Cita:

Empezado por Casimiro Notevi (Mensaje 475302)

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. :D

Casimiro Notevi 18-04-2014 18:55:27

Cita:

Empezado por satelit (Mensaje 475305)
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. :D


Solamente necesitas quitar el for porque se usa para recorrer una serie de registros, y no es el caso.

satelit 18-04-2014 19:37:15

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.

Casimiro Notevi 18-04-2014 19:40:59

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


La franja horaria es GMT +2. Ahora son las 09:21:03.

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