SISTEMA EM REDE, PROBLEMA COM A HORA

NEGRON 14/01/2013 16:09:48
#417335
Boa tarde Galera.....


tenho um sistema em rede e surgiu um problema, nos terminais da rede... porque quando a hora de um deles está errado o sistema cai.... o banco que utilizo é o firebird......... teria como assim que o terminal inicializar ele pegar a hora do servidor. trabalhar com a hora do servidor e a data tudo do servidor para evitar problema nos terminais......????????
Se tiver qual a melhor maneira de se fazer isso????

Brigadão Galera!!!!
LLAIA 14/01/2013 16:45:18
#417337
Ao iniciar seu sistema, vc pode disparar essa query:

 select current_timestamp from rdb$database



Depois vc pode tentar mudar a hora do sistema operacional passando a data que vc pegou do banco:

Time = seuRecordset(0)


Se não der, vc pode pegar a hora e acrescentando segundo a segundo com um Timer. E o seu sistema passa a trabalhar com essa hora controlada pelo seu sistema.
VELDRAME 14/01/2013 17:19:52
#417345
Segue:

Em um modulo:
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Public Declare Function SetSystemTime Lib [Ô]kernel32[Ô] (lpSystemTime As SYSTEMTIME) As Integer

Public Sub Atualiza_Sistema()
[ô]ATUALIZA A HORA
Dim lpSystemTime As SYSTEMTIME

Set rs = New ADODB.Recordset
[ô]Aqui você coloca a chamada do Firebird para pegar a data e a hora.
rs.open [Ô]Select Getdate()[Ô],conn,adOpenDynamic ,adLockReadOnly

wDataServidor = rs(0)

lpSystemTime.wYear = Format(rs(0), [Ô]yyyy[Ô])
lpSystemTime.wMonth = Format(rs(0), [Ô]MM[Ô])
lpSystemTime.wDay = Format(rs(0), [Ô]dd[Ô])
[ô]SetSystemTime lpSystemTime

lpSystemTime.wHour = Format(rs(0), [Ô]HH[Ô]) + 3
lpSystemTime.wMinute = Format(rs(0), [Ô]NN[Ô])
lpSystemTime.wSecond = Format(rs(0), [Ô]ss[Ô])
lpSystemTime.wMilliseconds = 0

[ô]Altera a hora do PC
SetSystemTime lpSystemTime

End Sub

OCELOT 14/01/2013 21:04:52
#417358
Resposta escolhida
Mudar a hora do computador vai falhar se o usuário não for administrador, eu diria para que sempre que você for pegar a hora usar o banco de dados para isso, tipo o que o LLAIA disse, só que em vez de pegar no começo do programa e ir incrementando como ele diz, simplesmente pegue de novo toda hora que precisar, e no caso de usar em inserts e tal acredito que poderia até colocar o CURRENT_TIMESTAMP direto na SQL, assim você sempre usa a hora do servidor para tudo que é importante.
Tópico encerrado , respostas não são mais permitidas