Foros del Web » Programación para mayores de 30 ;) » .NET »

llamar hora del servidor!

Estas en el tema de llamar hora del servidor! en el foro de .NET en Foros del Web. Saludos,, tengo el sig problema! Tengo una aplicacion de escritorio que trabaja en red, hecha en VB.net 2005, con BD de MySQL. El problema es ...
  #1 (permalink)  
Antiguo 09/02/2010, 08:22
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
llamar hora del servidor!

Saludos,, tengo el sig problema!

Tengo una aplicacion de escritorio que trabaja en red, hecha en VB.net 2005, con BD de MySQL.

El problema es que no se como hacer para mandar a llamar la hora del servidor.

Lo unico que puedo guardar es la fecha actual pero de la PC que esta usando el sistema, no la hora del servidor.
La consulta SQL que utilizo es la siguiente:

"update nombre_tabla set hora='" & Format(Date.Now, "hh:mm tt") & " 'where folio='" & folio.text & "'")

Lo que consigo con este codigo es guardar la hora en la que el usuario realiza algun cambio, pero evidentemente el problema es que si el usuario modifica la fecha y la hora de su equipo, estare metido en graves problemas. En su caso lo que deberia de guardar es la fecha y hora del servidor, pero en este momento no se como hacerle.!
De antemano gracias y si tienen alguna sugerencia es bienvenida. Un abrazo!
  #2 (permalink)  
Antiguo 09/02/2010, 08:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: llamar hora del servidor!

Cita:
el problema es que si el usuario modifica la fecha y la hora de su equipo, estare metido en graves problemas.
Acá lo que tienes que hacer, más que llamar a la hora del servidor, es tener un proceso de validación de la hora en la aplicación del lado del cleinte que verifique que no se haya movido la fecha y hora del sistema
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/02/2010, 08:29
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

un proceso de validacion en el cliente?, creo que eso queda fuera de mi alcance, ,, o mas bien no sabria como hacerlo!,,, y me pareceria que para eso tambien necesito compararlo con la hora del servidor,?.!!! no sabria como!!!!!
  #4 (permalink)  
Antiguo 09/02/2010, 08:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: llamar hora del servidor!

Nostros manejamos en una de las aplicaciones ciertos registros encriptados (en el Registry de Windows, por caso) donde guardamos datos de configuración e instalación. Una de las cosas que guardamos es precisamente la fecha y hora de la última ejecución de la aplicación, con lo que cuando se abre nuevamente se puede detectar (en una validación que lleva apenas seis líneas), si la fecha ha sido alterada.
Otra posibilidad es invocar un servicio de la web que te devuelva la hora para la región en que la computadora está funcionando y verifique contra ella.

Las posibles formas de resolver el problema de la alteración del sistema son muchas, y no necesitas lidiar con el TimeZone del servidor de la base de datos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/02/2010, 08:46
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

me parece bastante acertado lo que comentas, (he de confesar que no tengo mucha idea de como hacer lo que comentas). pense que el problema seria algo mas facil como una funcion que llamara la fecha y hora del servidor, agradeceria mucho pudieras explicarme un poco mas ampliamente, o en su defecto si tienes alguna pagina o informacion que compartir donde pueda leer sobre el tema. en serio que no se como hacerlo.Saludos!
  #6 (permalink)  
Antiguo 09/02/2010, 12:34
 
Fecha de Ingreso: marzo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Respuesta: llamar hora del servidor!

puedes hacer lo siguiente:

"update nombre_tabla set hora= CONVERT(varchar,getdate(),108) & " 'where folio='" & folio.text & "'")

para que guarde la hora directamente del servidor... ahora si quieres ponerte a comparar que la fecha y/o hora del servidor sean las mismas q las de tu cliente... puedes utilizar esta simple sentencia

SELECT GETDATE();

lo transformas a un DateTime y la comparas con la fecha del cliente y puedes hacer las validaciones necesarias...


espero que te sirva de algo...
__________________
GuzZpaWn
  #7 (permalink)  
Antiguo 09/02/2010, 15:06
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

ok, me parece muy bueno el codigo que compartes devilguzz, el problema es que marca error, por ejemplo dice:


("update nombre_tabla set fecha_busqueda= '" & Convert(varchar, getdate(), 108) & "',hora_busqueda='" & Label5.Text & "' where folio='" & folio.text & "'")

1.-me dice que conver es un tipo y no puede usarse como expresion
2.- no se ha declarado varchar
3.- no se ha declarado el nombre getdata

entonces no se que acer, falta importar una libreria o algo asi???
Saludos
  #8 (permalink)  
Antiguo 09/02/2010, 15:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

ok, me parece muy bueno el codigo que compartes devilguzz, el problema es que marca error, por ejemplo dice:


("update nombre_tabla set fecha_busqueda= '" & Convert(varchar, getdate(), 108) & "',hora_busqueda='" & Label5.Text & "' where folio='" & folio.text & "'")

1.-me dice que conver es un tipo y no puede usarse como expresion
2.- no se ha declarado varchar
3.- no se ha declarado el nombre getdata

entonces no se que acer, falta importar una libreria o algo asi???
Saludos
  #9 (permalink)  
Antiguo 09/02/2010, 15:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: llamar hora del servidor!

Te paso un par de detalles del modo en que una de nuestras aplicaciones registra y verifica que no se haya movido la fecha de sistema hacia atrás.
Cada vez que el login sale bien:
Código vb.net:
Ver original
  1. Public Function UltimoInicio()
  2.         Dim regData As RegistryKey
  3.         Const PathKey As String = "SOFTWARE\\..."
  4.         If regData Is Nothing Then
  5.             Exit Function
  6.         End If
  7.         regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
  8.         regData.SetValue("DATA71", DateTime.Now.)
  9.         regData.Close()
  10.     End Function
"..." sería la ruta de la clave en el Registry que se crea al iniciar por primera vez la aplicación.

Luego, esta función se invoca en el Load del formulario principal, antes de iniciar el login. Valida varias cosas, por lo que la respuesta de esta función tiene un Select Case:
Código vb.net:
Ver original
  1. Public Function VerificarUpdate() As Integer
  2.         Try
  3.             Dim regData As RegistryKey
  4.             Const PathKey As String = "SOFTWARE\\..."
  5.             If Registry.LocalMachine.OpenSubKey(PathKey) Is Nothing Then
  6.                 Return 1000
  7.             End If
  8.             ' -----------------------------------------------------------
  9.             Dim Data71 As DateTime
  10.             ' -----------------------------------------------------------
  11.             ' Variables para lectura de propiedades de archivos
  12.             '  ...
  13.             '  Data71. Ultimo ingreso registrado.
  14.             ' -----------------------------------------------------------
  15.             ' Listado de valores de retorno
  16.             ' -----------------------------------------------------------
  17.             ' -1:   Se ha producido un error no clasificado.
  18.             ' 2001: Fecha de instalación original posterior a la actual.
  19.             '       El usuario ha alterado la fecha del sistema.
  20.             ' 2002: ...
  21.             ' 2003: La fecha de la ultima sesión es posterior a la fecha actual.
  22.             '       El usuario ha alterado la fecha del sistema.
  23.             ' 2004: ...
  24.             ' -----------------------------------------------------------
  25.             regData = Registry.LocalMachine.OpenSubKey(PathKey, True)
  26.             ' -----------------------------------------------------------
  27.             ' ...
  28.             ' -----------------------------------------------------------
  29.             Data71 = regData.GetValue("DATA71")
  30.             regData.Close()
  31.             ' -----------------------------------------------------------
  32.             oDia = Data71
  33.             ' -----------------------------------------------------------
  34.             If oDia > DateTime.Now Then
  35.                 Return 2003
  36.             End If
  37.         Catch ex As Exception
  38.             Return -1
  39.         End Try
  40.     End Function
Si la respuesta no es la esperada en el Select Case, aparece una advertencia y la aplicación se cierra sin que pueda evitarse.
Esta función esta creada en una clase específica, que también contiene la función anterior, y que sólo se instancia en otra clase, la cual a su vez no puede ser accedida desde afuera del form principal.

¿La idea te sirve?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/02/2010 a las 17:35
  #10 (permalink)  
Antiguo 09/02/2010, 16:42
 
Fecha de Ingreso: marzo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Respuesta: llamar hora del servidor!

Cita:
Iniciado por mcofy Ver Mensaje
ok, me parece muy bueno el codigo que compartes devilguzz, el problema es que marca error, por ejemplo dice:


("update nombre_tabla set fecha_busqueda= '" & Convert(varchar, getdate(), 108) & "',hora_busqueda='" & Label5.Text & "' where folio='" & folio.text & "'")

1.-me dice que conver es un tipo y no puede usarse como expresion
2.- no se ha declarado varchar
3.- no se ha declarado el nombre getdata

entonces no se que acer, falta importar una libreria o algo asi???
Saludos
1. que tipo de dato es fecha_busqueda y hora_busqueda
2. CONVERT(varchar,GETDATE(),108) es una expresion del MSSQL... asi q no debes asignarla como si fuera una variable... debe ir algo asi
"UPDATE <tabla> SET <campo>=CONVERT(varchar,GETDATE(),108), hora_busqueda='"& label5.Text & "' WHERE folio='"& folio.text & "'"
__________________
GuzZpaWn
  #11 (permalink)  
Antiguo 12/02/2010, 07:06
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

devilguzz, me sigue dando errores la consulta, me suena bien logico lo que comentas, pero esa consulta necesita ser enviada bajo ese formato,

... quizas ese getdate es solo de asp,,,,, o que otra cosa se te ocurre??????

por que de funcionarme asi, seria genial!!!!!!!!!!!!!!
  #12 (permalink)  
Antiguo 12/02/2010, 07:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: llamar hora del servidor!

Ocurre que devilguzz no se ha fijado correctamente y te está poniendo una función de MSSQL (MS SQL Server) y no de MySQL, que es lo que tú estás trabajando, con lo que siempre te dará error.
Lo que él te propone es que conviertas la fecha del servidor en VARCHAR para meterlo en ese campo (Ver SQL Helper).
Intersante, usual en SQL Server, pero no es lo que tu estás pidiendo.

Si quieres que tome la fecha y hora del servidor, tienes que hacerlo en el SQL mismo:
Código MySQL:
Ver original
  1. UPDATE nombre_tabla SET hora=CURTIME()
  2. WHERE folio= valor;

Ahora bien, si quieres enviar la hora de la máquina cliente, debes hacerlo desde la programación:
Código vb.net:
Ver original
  1. Dim sSQL as string = "UPDATE nombre_tabla SET hora='" & DateTime.Now.ToString("HH:mm:ss") & "' WHERE folio= valor;"

El método es rústico, pero eficiente. Asegúrate de que en el string el valor quede entre apóstrofes (').
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 15/02/2010, 09:07
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: llamar hora del servidor!

devilguzz , gnzsoloyo

He checado sus respuestas y finalmente he podido hacer lo que necesitaba,
en efecto la solucion es usar "CURDATE()" y para la hora "CURTIME()"
Este es el codigo que utilizo, y me queda a la perfeccion.

"update externa_movimientos set fecha=curdate(), where folio='" & Label11.Text & "'")

Muchisismas Gracias, un abrazo.
GRACIAS POR SU INTERES.

Etiquetas: llamar, servidores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:53.