¿Cómo obtener hora del servidor?

Necesito que al registrar un movimiento en los campos campos fecha_graba y hora_graba quede registrado la fecha y hora donde está en Back End. Esto para evitar que si el usuario modifica la fecha u hora del PC quede registrado el movimiento con esta fecha y hora.

Tengo 2 casos:

1. Back End en Access y servidor local Windows

2. Back End en servidor en la nube, base de datos en PostgreSQL.

2 Respuestas

Respuesta
1

Martha, escríbame a [email protected] y le suministro la respuesta porque me está dando error el servidor de TodoExpextos.

  1. Servidor local Windows Access Back End

Se puede obtener la fecha y hora utilizando el comando

net time \\192.168.56.1

Y de paso ¿Cuál dominio?

Ahora, hacemos los mismo, pero con VBA. Para esto he preparado el siguiente formulario.

CÓDIGO DEL BOTÓN SERVIDOR LOCAL

Private Sub btnServidorLocal_Click()
 Me.fecha = fecha_hora_servidor("192.168.56.1", 1)
 Me.ctlhora = fecha_hora_servidor("192.168.56.1", 2)
End Sub

Continuación respuesta...

Copie este código en un módulo:

 CÓDIGO DE LA FUNCIÓN FECHA_HORA_SERVIDOR

Me da error al copiar este código. Seguramente por algunos caracteres.

Con esta función tiene el control cuando se requiera la fecha y hora del sistema. Veo que muchos usuarios cometen el error de utilizar NOW() y están grabando es con la hora la PC del usuario.

Continuación respuesta...

2. Servidor en la nube PostgreSQL (mi preferido)

FUNCIÓN HORASERVIDOR POSTGRESQL

Public Function horaservidor() As Date
'Función para extraer la fecha y hora del servidor PostgreSQL:
  On Error Resume Next
    Dim rs As New ADODB.Recordset
    rs.Open "SELECT current_timestamp;", CnRemota, adOpenStatic, adLockReadOnly
    horaservidor = rs.Fields(0)
    rs.Close
    Set rs = Nothing
End Function

Cambie CnRemota por el nombre de su conexión.

Un ejemplo de uso puede ser mostrar en el formulario la información de fecha y hora, Por ejemplo

Private Sub Form_Timer()
  Me.lblFecha.Caption = Format(horaservidor, "dddd, d mmm yyyy h:m:s am/pm")
End Sub

Intervalo de cronómetro=1000, en formulario quedaría así.

En mi caso utilizo el servidor en la nube de Cloud Cluster, a pesar de que está en Estados Unidos, tengo configurado el PostgreSQL con hora GMT Bogotá. Esto permite que todos los registros de los usuarios se les asigne la fecha del servidor y no la del PC. Si no entiende algo me puede escribir al correo [email protected] 

Respuesta

Solución común a ambos casos:

Crear un dominio y restringir por política la manipulación de la hora.

Enrique como sería creando un dominio ¿Puede explicarlo por favor?. Gracias

El dominio no es de Access ni de PGSql, pertenece al entorno (la intranet), desde el se controlan todos los recursos informáticos de la empresa, se conceden permisos y se crean las políticas de uso.

Se puede crear una regla que impida a las maquinas del dominio acceder a los recursos de la propia maquina (como cambiar la fecha o incluso el fondo de pantalla).

Si se sospecha de manipulaciones inadecuadas en los datos (puede ser la fecha, la cantidad o un cliente/venta inventado) se verifica y se cambia de tarea al responsable o se le expulsa si los daños que ocasiono lo justificase.

Es un nivel que no tienen o dominan muchos programadores y que es básico en una empresa que se precie de serlo (si la empresa no tiene un dominio en la intranet, informáticamente es como tener las puertas y ventanas abiertas sin control = sin restricciones = sin seguridad).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas