Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   problemas con fecha en procedimiento en mssql (https://www.clubdelphi.com/foros/showthread.php?t=66166)

richy08 04-02-2010 23:53:03

problemas con fecha en procedimiento en mssql
 
Que tal compañeros tengo un problema con el formato de fechas que recupero en mssql, el formato en el que estan guardado las fechas en los campos es yyyy-mm-dd sin hora ejemplo 2010-01-22 00:00:00.000 pero en el procedimiento almacenado al darle un print la fecha me la arroja en este formato y con hora :confused: Jan 22 2010 12:00AM por lo cual al hacer un select donde comparo que las fechas sean iguales siempre me arroja el cursor vacio alguna idea de que puedo hacer ya busque si existe un formatdatetime pero al parecer no existe o no lo encuentro gracias por cualquier respuesta

sinalocarlos 05-02-2010 00:10:09

Los campos donde guardas/recuperas las fechas son de tipo Datetime?

si es asi no deves de tener problemas, en realidad MSSQL guarda las fechas como un float donde la parte entera representa la fecha y los decimales la hora, el formato que ves en pantalla al tirar una consulta o darle un print a una variable datetime es en realidad solo eso, Formato, que el MSSQL le da para que nosotros simples humanos podamos entender que fecha es.

podrias publicar un fragmento de tu codigo que te da problemas?

richy08 05-02-2010 00:15:58

efectivamente los campos donde recupero y guardo son datetime este es el procedimiento almacenado
Código SQL [-]
et ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER procedure [dbo].[Frm_ProRellExcRatFillExcRat] (@Dtp_ArrDat datetime, @Dtp_deda datetime, @excrat float)
as 
declare 
 @nconf int, @darrivaldate datetime, @ddeparturedate datetime, @nrenpost int, @nrenpost1 int, @fechaAum datetime
begin
    Declare Qry_Busnconf Cursor For
    select nconf, darrivaldate, ddeparturedate from reserve 
    where @Dtp_ArrDat between darrivaldate and ddeparturedate
    open Qry_Busnconf
    FETCH NEXT from Qry_Busnconf into @nconf, @darrivaldate, @ddeparturedate
    while @@fetch_status = 0
    begin
         Declare Qry_Busnrenpost Cursor For
         select nrenpost from posteosgue p, renposteosguecon r 
         where p.npost=r.npost and nconf=@nconf
         and nexcrat is null and dfech=@Dtp_ArrDat

         open Qry_Busnrenpost
            
         FETCH NEXT from Qry_Busnrenpost into @nrenpost

         while @@fetch_status = 0
         begin
            --Qry_ModiExcrat
            update renposteosguecon set nexcrat=@excrat
            where nrenpost=@nrenpost
            --Qry_ModiExcrat

         FETCH NEXT from Qry_Busnrenpost into @nrenpost
         end
         close Qry_Busnrenpost
         deallocate Qry_Busnrenpost
      
             set @fechaAum= (DATEADD(day, 2, @Dtp_ArrDat))
             print @fechaAum
             print @ddeparturedate 
             print '**************'
         if  @fechaAum=@ddeparturedate 
         begin
              print 'adentro'
              print @ddeparturedate
             --print '**************'
             Declare Qry_Busnrenpost1 Cursor For
             select nrenpost from posteosgue p, renposteosguecon r 
             where p.npost=r.npost and nconf=@nconf
             and nexcrat is null and dfech=@ddeparturedate

             open Qry_Busnrenpost1
            
             FETCH NEXT from Qry_Busnrenpost1 into @nrenpost1
             print @nrenpost1
             
             while @@fetch_status = 0
             begin
                print @nrenpost1
                --Qry_ModiExcrat
                update renposteosguecon set nexcrat=@excrat
                where nrenpost=@nrenpost1
                --Qry_ModiExcrat

             FETCH NEXT from Qry_Busnrenpost1 into @nrenpost1
             end
             close Qry_Busnrenpost1
             deallocate Qry_Busnrenpost1
         end;     
    FETCH NEXT from Qry_Busnconf into @nconf, @darrivaldate, @ddeparturedate
    end
    close Qry_Busnconf
    deallocate Qry_Busnconf
end

y lo mando llamar desde delphi con un stored procedured de ado de esta forma

Código Delphi [-]
SP_FillExcrat.Close;
SP_FillExcrat.Prepared:=true;
SP_FillExcrat.Parameters[1].Value:=FormatDateTime('yyyy,mm,dd',Dtp_ArrDat.date);
SP_FillExcrat.Parameters[2].Value:=FormatDateTime('yyyy,mm,dd',Dtp_DeDa.date);
SP_FillExcrat.Parameters[3].Value:=Md_Gral.Qry_KindChan.fieldbyname('Kind').Value;
SP_FillExcrat.ExecProc;

lo extraño es que las primeras insercciones si las hace de manera correcta pero al llegar al if

Código SQL [-]
             set @fechaAum= (DATEADD(day, 2, @Dtp_ArrDat))
             print @fechaAum
             print @ddeparturedate 
             print '**************'
             if  @fechaAum=@ddeparturedate 
             begin

si entra pero el cursor no encuentra ningun registro aunque yo los estoy viendo en la base de datos alguna idea de cual pueda ser la razon :confused: gracias por tu tiempo

richy08 05-02-2010 00:31:49

bueno tenias toda la razon no tengo por que tener problemas, el problema es que me perdi un poco con las fechas y estaba mandando la fecha equivocada al cursor jeje despues de todo no somos maquinas y creo que el cansancio nos afecta :D as ies que creo que es hora de descansar saludos y mil gracias por tu ayuda

sinalocarlos 05-02-2010 00:59:44

je je, ya me a pasado, especialmente con el codigo de los lunes por la mañana.

Lo bueno es que lo detectaste, por que ese tipo de errores son los que mas tiempo quitan.


Un saludo


La franja horaria es GMT +2. Ahora son las 12:16:35.

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