Relógio interno
02/06/2008
0
Joaohenriquemf
Posts
02/06/2008
Javapaulomg
Não sei se seria um boa pratica, mais pode obter a data e hora do servidor atraves de uma consulta SQL, e apartir dai ir incrementando uma variável com está data e hora com um componente TTimer, espero ter ajudado.
07/08/2008
Joaohenriquemf
07/08/2008
Vitor Alcantara
procedure tConsultas.SincronizaHora; var Data:TSystemTime; ano,dia,mes,hora,segundo,minuto,ml:word; Dt:tDateTime; begin try Conexao := tConexao.create(nil,´sCom´); GetLocalTime(Data); with Conexao.Query do begin Close; SQL.Clear; SQL.Add(´SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE´); Open; Dt := Fields[0].AsDateTime; Close; end; DecodeDate(dt,ano,mes,dia); DecodeTime(dt,hora,minuto,segundo,ml); with Data do begin wYear := ano; wMonth:= mes; wDay := dia; wHour:= hora; wMinute := minuto; wSecond := segundo; end; SetLocalTime(Data); finally Conexao.Destroy; end; end;
PS: Conexao é a classe que criei pra conexão com banco de dados.
PS2 : Nescessário declarar unit DateUtils
08/08/2008
Vitor Alcantara
Do modo que coloquei acima você irá alterar a data e hora do computador cliente com a data e hora do servidor, mais a idéia é a mesma que o colega falou acima, pegar a data e hora do servidor através de uma consulta SQL por exemplo, alimentar uma váriavel e ir incrementando a mesma com um tTimer por exemplo
Você pode declarar uma váriavel do tipo datetime, dai no evento onTimer de um tTimer você pode ir acrescentando um segundo a cada disparo:
Ex:
Para pegar a data e hora num servidor Firebird por exemplo:
with Query do begin Close; SQL.Clear; SQL.Add(´SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE´); Open; VarDataHora := Fields[0].AsDateTime; Close; end;
O Evento do Timer:
VarDataHora := IncSecond(VarDataHora,1); Label1.Caption := DateTimeToStr(VarDataHora);
Ps: Para utilizar a função IncSecond é nescessário declarar a unit DateUtils na uses do teu form.
08/08/2008
álison Bissoli
não podemos desperdiçar memória... e sabemos que se consultarmos
e incrementar pode sair de sincronia se alguem alterar a data no servidor
do banco, se você procura mesmo integridade faça o seguinte:
- Ative no cliente o serviço de ´Horário do Windows´, isso fará com que
sempre que o windows carregar sincronize a hora do computador cliente
com o servidor DNS.
- Esqueça de rotinas de incremento, a cada vez que for gravar algo que
necessita de integridade de horário é só fazer o select da hora que nosso
amigo postou acima e verificar com a hora do computador colocando uma
margenzinha de tolerância de uns 5 minutos (ou quanto achar melhor) entre o retorno do select e a hora da máquina local. Caso a hora local saia
da faixa informe ao usuário a hora local e hora do servidor para que o
mesmo corrija.
Existem maneiras e maneiras de trabalhar, nosso amigo acima não está
errado, mas prefiro trabalhar assim...
um abraço e espero ter ajudado.
Clique aqui para fazer login e interagir na Comunidade :)