PDA

Ver la Versión Completa : problemas con fecha en procedimiento en mssql


richy08
04-02-2010, 23:53:03
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

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


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


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