Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Jeronimo en Enero 17, 2014, 08:16:57 pm

Título: Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 08:16:57 pm
¡Hola!
Me encuentro ante una situación determinada y quiero comentarles cómo creo que podría resolverla para ver qué opinión les merece.
Debo instalar un sistema en un lugar donde habrá una pc que actuará de servidor y contendrá la base de datos (a esa no tendrá acceso prácticamente nadie) y varias pc donde se ejecutará mi aplicación.
Lo que quiero es proteger la fecha y la hora para que si cambian esa información en Windows o en el bios no afecte a mi aplicación.
Podría hacer que las pc "clientes" sincronicen la fecha y la hora con el servidor, pero como el mantenimiento de las computadoras no lo hago yo, podría pasar que se reinstale el sistema operativo en una de ellas, o se haga algún mantenimiento, y eso deje de funcionar (o vaya uno a saber por qué otra razón).
Entonces se me ocurrió lo siguiente. Cada vez que mi aplicación inicia toma la hora del servidor MySQL instalado en la pc que hace de servidor. A su vez toma el tiempo en milisegundos desde el inicio de Windows en la pc "cliente" (con GetTickCount u otra instrucción que he visto por este foro y ahora no recuerdo). Y cada vez que necesito saber la hora tomo nuevamente el tiempo desde el inicio de Windows, le resto el valor anterior y el resultado lo sumo (con formato de hora) a la hora inicial. Incluso, con chequeos periódicos podría saber si ya cambió la fecha también.
¿Qué les parece? ¿Es una animalada?
Muchas gracias.

Jerónimo
Título: Re:Proteger fecha y hora
Publicado por: YAcosta en Enero 17, 2014, 08:44:44 pm
Hola amigo, pero y ¿porque no sigues con el mismo método de tomar la hora del MySQL?, toda transacción que realice el usuario viaja pero tomando la fecha y hora del servidor, asi tengan 30/02/2014 hará caso omiso a esa fecha puesto que en el sql en ese campo le indicas (no se como se hace en MySQL, me la se con manzanas haha, no mentira, la se con FB) que tome la fecha y hora del servidor.
Adicionalmente y como referencia podrías agregar un campo mas de fecha y hora de la PC cliente que pudiera servir para otros temas de auditoria pero transaccionalmente la que vale es la del servidor.

Saludos
Título: Re:Proteger fecha y hora
Publicado por: raul338 en Enero 17, 2014, 08:46:22 pm
Lo mejor es usar la hora del servidor, ya sea los ultimos 5 logueos en MySQL y el resto con algun script PHP en un archivo de texto
Título: Re:Proteger fecha y hora
Publicado por: YAcosta en Enero 17, 2014, 08:50:46 pm
Antes el foro avisaba cuando alguien escribia que ya había otra publicación jeje. Bueno mejor asi.

Para aclarar lo que expuse, con el Firebird (sorry es lo que me se de plano) haria algo asi:

fechahora = "SELECT CURRENT_DATE, CURRENT_TIME FROM RDB$DATABASE"

Con eso obtengo la fecha y hora y en el insert meto el dato obtenido todo esto dentro de una transacción naturalmente. Ahora, lo mas trucho incluso es que ni siquiera le mandes fecha y hora, eso podría fácilmente ser un trigger y se acabo el chiste. Por alli juega el tema.

Saludos
Título: Re:Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 09:25:48 pm
Gracias, muchachos.
Efectivamente, Yván, eso pensaba hacerlo como describiste. Pero lo que no puedo resolver de esa manera es cuando tengo que comprar alguna fecha contra la fecha actual, o alguna hora contra la hora actual. Y no quería tener que acudir al servidor MySQL cada vez que tuviera que hacerlo.
Quiero decir que para insertar datos en la base de datos lo haría como decís, que en MySQL sería algo así:
Código: (SQL) [Seleccionar]
INSERT INTO tabla (campo1, fecha, hora, campo2...) VALUES ('valor1', CURDATE(), CURTIME(), 'valor2', ...)Pero si ahora quiero comparar la fecha de una factura con la fecha actual, o una hora determinada con la hora actual (no para escribir datos en la base), debiera recurrir al servidor MySQL para tomar la fecha o la hora y me parecía innecesario. No sé si me explico.
Muchas gracias.

Jerónimo
Título: Re:Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 09:27:30 pm
Perdón, Raúl, pero no entendí tu sugerencia. ¿Me podés ejemplificar, por favor?
Muchas gracias.

Jerónimo
Título: Re:Proteger fecha y hora
Publicado por: YAcosta en Enero 17, 2014, 09:36:40 pm
Doc, pero alli ya el espiritu es el mismo pero el asunto es otro.

La fecha y hora de transacción es una sola, es la fecha que usamos para decir que la transacción ocurrió a una fecha y hora especifica e inamovible.
La fecha del documento puede ser otra, la fecha en que se paga el documento puede ser otra, la fecha en que se acepta el documento puede ser otra, en una grabacion de factura guardo en la tabla 3 fechas (2 de ellas al inicio son Null).

Lo que no comprendo es la inquietud, ¿si quieres comparar la fecha de la factura con la fecha actual? eso no entiendo doc, quiza si me cuentas porque quieres comparar entienda que quieres hacer te pueda sustentar o retractar el metodo planteado.

No se si sirva, pero de plano al arrancar el aplicativo en el terminal ya tomo la fecha y hora del servidor y con un simple timer mantengo una fecha y hora coherente con el servidor, siempre iran de la mano asi cambien la fecha de windows de esa pc
Título: Re:Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 09:58:40 pm
Citar
No se si sirva, pero de plano al arrancar el aplicativo en el terminal ya tomo la fecha y hora del servidor y con un simple timer mantengo una fecha y hora coherente con el servidor, siempre iran de la mano asi cambien la fecha de windows de esa pc
Exactamente eso, aunque seguramente con desprolijidad, es lo que planteé en el primer post.

Citar
Lo que no comprendo es la inquietud, ¿si quieres comparar la fecha de la factura con la fecha actual? eso no entiendo doc, quiza si me cuentas porque quieres comparar entienda que quieres hacer te pueda sustentar o retractar el metodo planteado.
Voy a poner un ejemplo un poco caprichoso.
Supongamos que tengo en un ListView un reporte de facturas en las que se vendió X producto. Ahora, partiendo de ahí quisiera saber cuántas son de hoy. Allí podría recorrer el ListView comparando las fechas de las facturas con la de hoy y así ir sumando según corresponda.
Seguramente estarás pensando "¿Y por qué no traés el dato con un COUNT?", o algo parecido. Y mi respuesta sería: ¡Porque no soy tan organizado! jeje No, la verdad es que, como dije, es un ejemplo un poco caprichoso. Además, el reporte podría tener una cantidad x de filtros y tal vez no encaje el COUNT (o yo no sepa cómo emplearlo en una consulta muy compleja).
Título: Re:Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 10:02:44 pm
Buscando en mi código encontré algo más concreto.
En una matriz guardo diferentes datos con respecto a unas cuotas (pasadas, actuales y futuras): fecha, importe, etcétera. Y en una parte del proceso debo saber cuántas son anteriores a la fecha actual y cuántas son posteriores. Eso lo haría (en mi modo rudimentario de hacer las cosas) recorriendo la matriz y comparando las fechas con la actual.
Título: Re:Proteger fecha y hora
Publicado por: raul338 en Enero 17, 2014, 10:19:01 pm
Lo que podes hacer es en algún momento de la aplicación (cada 2 horas por ej) es obtener la fecha/hora del servidor y mantener un timer (clase, no el control, habia una clase cTimer que era bastante exacta por lo que decían) y a partir de ahí sacar la diferencia y tiempo actual.

Y listo! :P
Título: Re:Proteger fecha y hora
Publicado por: Jeronimo en Enero 17, 2014, 10:24:00 pm
Al principio iba a usar un timer, pero luego vi que si muestro un form en modal desde el form que tiene el timer, este se detiene hasta que se cierra el form modal. Por eso había pensado hacerlo con GetTickCount u otra api cuyo nombre no recuerdo pero que también sugirieron en este foro.
¿Cuál sería el beneficio de hacerlo con la clase timer?