FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Bug en la Funcion SetDate() 32bits
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Bug en la Funcion SetDate() 32bits
Posted: Sat Jun 30, 2007 02:16 PM

Hola estimados colegas del foro, tengo el siguiente problema ojala y alguno de ustedes lo haya resuelto, y es un tema del cual ya se hablo pero del que todavia nadie a dado respuesta

Resulta que uso la funcion SETDATE() para el cambio de fecha de Windows el cual lo uso así:

STATIC dInicial ---------->>Al inicio de la aplicacion lo he probado tambien como PUBLIC.

SET DATE TO BRITISH ---------->>Dentro de la Funcion Main
SET CENTURY ON
SET EPOCH TO 2000
dInicial:= Date()

Dentro del sistema cambio la fecha de windows con la misma funcion esto lo hago para revisar la informacion de meses pasados, ya que mi sistema usa una carpeta de informacion por mes de trabajo... aki funciona bien y sin problemas con esta funcion..

FUNCTION CambiaFecha()

LOCAL dVar1:= DATE()
LOCAL oDlg,oGet,oBtn1,oBtn2
LOCAL lSal:= .F.

DEFINE DIALOG oDlg RESOURCE "SELFECHA" TITLE "Cambiar Fecha de Trabajo" OF oWndMain
REDEFINE BTNGET oGet VAR dVar1 ID 102 OF oDlg RESOURCE "B_CALE" SPINNER;
ON UP (++dVar1,oGet:REFRESH()) ON DOWN (--dVar1,oGet:REFRESH());
ACTION (aRect := GetCoors(oGet:hWnd),;
dVar1 := FwCalendar(dVar1,aRect[1],aRect[4],oDlg),;
oGet:REFRESH())
REDEFINE BUTTON oBtn1 ID 107 OF oDlg ACTION (SetDate( DAY( dVar1 ), MONTH( dVar1 ), YEAR( dVar1 ) ), SYSREFRESH(), CambMes(dVar1), CreArchi(), Indexa(), lSal:= .T., oDlg:END())
REDEFINE BUTTON oBtn2 ID 108 OF oDlg ACTION (lSal:= .T., oDlg:END()) CANCEL

                ACTIVATE DIALOG    oDlg CENTERED  VALID (lSal)

Return nil

Hasta aki todo bien..

SetDate( DAY(dInicial), MONTH(dInicial), YEAR(dInicial) ) ---------->> Esto lo hago al salir la aplicacion por si el usuario se olvida de regresar la fecha de windows a la fecha inicial, la cual la tome al principio.

Por una extraña razon al momento de hacer el cambio de fecha la atrasa un dia, y lo hace por cada vez que salgo del programa entre las 9 y 11 de la noche, y en horarios diferentes durante el día, cosa que no pasaba con 16bits, ya revise el código fuente de esta funcion y son exactamente iguales, si hago esto:

SetDate( DAY(dInicial)+1, MONTH(dInicial), YEAR(dInicial) )

le sumo 1 día más pa que no regrese y que es una de las soluciones posteadas en este foro, tambien lo hace, en algunas ocaciones regresa hasta 2 días atras..

Alguien puede explicar porque con xharbour y fivewin falla y porque no con clipper y fivewin no..?

Maestraso Antonio Linares... Ahi le dejo esta carta al aire..

No creo sel el único con este problema....

FHW 2.6 + xHarbour 0.45 Flex

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Re: Bug en la Funcion SetDate() 32bits
Posted: Fri Jul 06, 2007 07:39 PM
cuatecatl82 wrote:Hola estimados colegas del foro, tengo el siguiente problema ojala y alguno de ustedes lo haya resuelto, y es un tema del cual ya se hablo pero del que todavia nadie a dado respuesta

Resulta que uso la funcion SETDATE() para el cambio de fecha de Windows el cual lo uso así:

STATIC dInicial ---------->>Al inicio de la aplicacion lo he probado tambien como PUBLIC.

SET DATE TO BRITISH ---------->>Dentro de la Funcion Main
SET CENTURY ON
SET EPOCH TO 2000
dInicial:= Date()

Dentro del sistema cambio la fecha de windows con la misma funcion esto lo hago para revisar la informacion de meses pasados, ya que mi sistema usa una carpeta de informacion por mes de trabajo... aki funciona bien y sin problemas con esta funcion..

FUNCTION CambiaFecha()

LOCAL dVar1:= DATE()
LOCAL oDlg,oGet,oBtn1,oBtn2
LOCAL lSal:= .F.

DEFINE DIALOG oDlg RESOURCE "SELFECHA" TITLE "Cambiar Fecha de Trabajo" OF oWndMain
REDEFINE BTNGET oGet VAR dVar1 ID 102 OF oDlg RESOURCE "B_CALE" SPINNER;
ON UP (++dVar1,oGet:REFRESH()) ON DOWN (--dVar1,oGet:REFRESH());
ACTION (aRect := GetCoors(oGet:hWnd),;
dVar1 := FwCalendar(dVar1,aRect[1],aRect[4],oDlg),;
oGet:REFRESH())
REDEFINE BUTTON oBtn1 ID 107 OF oDlg ACTION (SetDate( DAY( dVar1 ), MONTH( dVar1 ), YEAR( dVar1 ) ), SYSREFRESH(), CambMes(dVar1), CreArchi(), Indexa(), lSal:= .T., oDlg:END())
REDEFINE BUTTON oBtn2 ID 108 OF oDlg ACTION (lSal:= .T., oDlg:END()) CANCEL

ACTIVATE DIALOG oDlg CENTERED VALID (lSal)
Return nil

Hasta aki todo bien..

SetDate( DAY(dInicial), MONTH(dInicial), YEAR(dInicial) ) ---------->> Esto lo hago al salir la aplicacion por si el usuario se olvida de regresar la fecha de windows a la fecha inicial, la cual la tome al principio.

Por una extraña razon al momento de hacer el cambio de fecha la atrasa un dia, y lo hace por cada vez que salgo del programa entre las 9 y 11 de la noche, y en horarios diferentes durante el día, cosa que no pasaba con 16bits, ya revise el código fuente de esta funcion y son exactamente iguales, si hago esto:

SetDate( DAY(dInicial)+1, MONTH(dInicial), YEAR(dInicial) )

le sumo 1 día más pa que no regrese y que es una de las soluciones posteadas en este foro, tambien lo hace, en algunas ocaciones regresa hasta 2 días atras..

Alguien puede explicar porque con xharbour y fivewin falla y porque no con clipper y fivewin no..?

Maestraso Antonio Linares... Ahi le dejo esta carta al aire..

No creo sel el único con este problema....

FHW 2.6 + xHarbour 0.45 Flex


A mi me da lo mesmo bug,
Solução: no uso mas SetDate()

:-)

Salud2
Posts: 38
Joined: Thu May 11, 2006 07:41 PM
Saludos
Posted: Sat Jul 21, 2007 11:43 AM

Amigo y colega, tomalo como una simple sugerencia, trata en lo posible de independizar los manejos de las fechas, es decir maneja dentro de tu sistema tu propia fecha que sea independiente de la del WINDOWS, con alguna variable PUBLIC, o cualquier otro medio, tienes mucha mas libertad y muchos menos peligros; anteriormente yo lo hacia como tu a travez de la fecha de la computadora y en alguna ocacion se le olvido al operador REPONER la fecha original y recien nos vinimos a dar cuenta al fin de mes, como te podras imaginar; el arroz con mango que se armo en la facturacion era de padre y señor mio. Ademas hay algunos programas como por ejemplo los antivirus que monitorean los cambios de fecha de la computadora y como respuesta te salen algunos mensajes y pueden llegar ha colgarte la maquina.
Espero haberte ayudado.
Rodolfo Silva
sildata@cantv

Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Bug en la Funcion SetDate() 32bits
Posted: Sat Jul 21, 2007 03:08 PM

Estimado Rodolfo Silva:

Agradesco tu humilde opinión y coincido contigo, ya decidi dejar esa función SETDATE() para el cambio de fecha, ya que no hay una solución para este ENORME BUG , creo que como nosotros muchos han pasado por este pequeñisimo inconveniente y han tenido que elegir otras opciones puesto que no nos dan una solución eficaz o en su defecto una corrección o codigo fuente que funcione, te comento que ya trabajo sobre esto y espero en estos días poder corregirlo, tengo pensado escribir algo de codigo para crea una nueva función para todos aquellos que necesitamos esta valiosa función .

En cuento lo tenga la subo al foro para todos los que la necesiten.

Saludos desde Chiapas, México

:):twisted::evil::idea::P

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
Bug en la Funcion SetDate() 32bits
Posted: Sun Jul 22, 2007 09:10 AM
Yo tenia el mismo problema y lo solucioné con la librería funcky:

oFuncky := TOleAuto():New("funcky")
oDate := oFuncky:CreateDate()

oDate:Set("mm/dd/aa") // siempre en formato mm/dd/aa


y listo, la función devuelve .t. si la fecha del sistema se cambió con éxito, .f. si hubo algún problema
Saludos

R.F.
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Bug en la Funcion SetDate() 32bits
Posted: Mon Jul 23, 2007 11:15 PM

Saludos RF:

Gracias por aportar ideas a la causa, pero tengo dudas sobre la libreria funcky..

1.- Es una libreria de terceros pagada..?

2.- En donde puedo adquirirla..?

He buscao en la red pero no la encuentro..

Abrazos..

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Bug en la Funcion SetDate() 32bits
Posted: Tue Jul 24, 2007 12:57 AM

es de pago,

aqui hay informacion,

http://www.abox.com/productos.asp?pid=295

saludos.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Bug en la Funcion SetDate() 32bits
Posted: Tue Jul 24, 2007 02:14 PM

Gracias por su respuesta:

He Revisado la pagina y no es nada barata la lib. ( :x Aprox. $4000.00 Mex.),
creo que seguiré con mi proyecto de escribir alguna función para toda la comunidad que la necesite..

Saludos..

Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
Bug en la Funcion SetDate() 32bits
Posted: Tue Jul 24, 2007 03:19 PM

Efectivamente, no es barata, pero las mas de 2,000 funciones que tiene y que hacen practicamente de todo (correo con autenticacion, FTP, scaneo de red, operaciones con bits, etc etc etc) ademas se pueden usar no solo con Fivewin sino con xHarbour en modo consola o bien con cual otra GUI.

Saludos

R.F.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Bug en la Funcion SetDate() 32bits
Posted: Wed Jul 25, 2007 10:52 AM

FWH usa la función SetSystemTime() del API de Win32 desde la función SetDate(). Esta es la documentación de SetSystemTime():

The SetSystemTime function sets the current system time and date. The system time is expressed in Coordinated Universal Time (UTC).

BOOL SetSystemTime(

CONST SYSTEMTIME *lpSystemTime  // address of system time to set

);

Parameters
lpSystemTime

Points to a SYSTEMTIME structure that contains the current system date and time.
The wDayOfWeek member of the SYSTEMTIME structure is ignored.

Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError
.

Remarks
Windows NT: The SetSystemTime function fails if the calling process does not have the SE_SYSTEMTIME_NAME privilege. This privilege is disabled by default. Use the AdjustTokenPrivileges function to enable this privilege and again to disable it after the time has been set. For more information about security privileges, see Privileges.
Windows 95: Security privileges are not supported or required.

See Also
AdjustTokenPrivileges, GetSystemTime, SetSystemTimeAdjustment, SYSTEMTIME, SystemTimeToTzSpecificLocalTime

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion