IDENTIFICAR A DATA DO SERVIDOR

EDINALDOLA 28/08/2009 07:08:42
#321192
Tenho um sistema no qual, em várias situações, necessita da data do sistema para realizar algumas validações. Acontece que nem sempre as estações de trabalho estão com as datas corretas, causando erros. Gostaria de saber como faço para que a data a ser utilizada no sistema seja a do servidor e não as das estações. Grato
Edinaldo
LCSD 28/08/2009 08:08:31
#321197
Para capturar a data do servidor SQL, faça assim:

Select getdate()
EDINALDOLA 05/09/2009 19:16:37
#322123
Luiz não consegui capturar a data com a sintaxe que você escreveu. Seria possível você me dá algum exemplo.
RICART 05/09/2009 19:51:11
#322128
Vc precisa informar qual é o SGBD. Se bd access, vc precisa utilizar uma função que chama a data de qualquer computador pelo ip.
No oracle, usamos de sysdate, no firebird e postegree current_timestamp, no sqlserver getDate(), mysql curdate().
é só vc inserir estas funções na própria sql, procedures, etc.
MARCELO.TREZE 05/09/2009 19:59:13
#322129
TECLA 06/09/2009 10:21:15
#322146
A melhor solução, acredito que seja pegar o horário do SGBD.
Mas, se precisar pegar o horário de um PC da rede... tente o POG abaixo:

Dim Linha As String
Shell [Ô]cmd /C net time \\192.168.1.2 > C:\Temp\horapc.txt[Ô], vbHide
Open [Ô]C:\Temp\horapc.txt[Ô] For Input As #1
Line Input #1, Linha
Text1 = Mid(Linha, InStr(1, Linha, [Ô]:[Ô]) - 2, 5)
Close #1
EDINALDOLA 05/03/2015 15:39:41
#445005
Ainda não consegui resolver o problema. Preciso identificar a data do computador onde ficam as tabelas do meu sistema desenvolvido no access2000, ou seja, o back-end. Preciso saber esta data para quando o operador fizer login no sistema eu possa comparar esta data com a data do computador onde está sendo locado e, caso haja discrepância, eu mande uma mensagem para o operador para que faça a correção data.
Grato
NILSONTRES 05/03/2015 16:09:38
#445006
Pessoal, vi umas dicas ai acima, mas o horário do próprio servidor de banco não é o mesmo da maquina ?
Eu tenho um arquivo asp no meu servidor web, consulto ele e atualizo o relogio do windows a cada vez que o sistema inicia, tem sido muito útil, inclusive meus sistemas, se o cliente mexer no relógio ele fecha automaticamente por segurança.
OCELOT 05/03/2015 17:29:08
#445014
O horário do servidor do banco de dados vai ser o da máquina em que ele está instalado, porém isso se aplica apenas a bancos de dados com um sistema de cliente/servidor, como no caso é o Access acredito que vá ser o horário do PC que rodou a query e não do que o banco de dados está, já que é basicamente um arquivo que o programa está lendo e gravando, não existe realmente um servidor.

E neste caso não existe nada garantido que vá funcionar, nem mesmo o comando que o TECLA passou é garantido funcionar, tudo depende da configuração de rede e permissões do usuário, eu diria que deve falhar na maioria dos casos.

Então sem um servidor de banco de dados que seria a forma mais fácil de se pegar esta data/hora acho que só colocando algum outro programa para rodar no servidor (e não, não conheço nada que sirva para isso, seria algo que teria que ser criado), ou fazendo como o NILSONTRES falou, tendo uma página na internet para consultar o horário, o que acho que seria mais fácil mas precisaria ter sempre acesso a internet, porém discordo da parte de atualizar a data/hora do PC, até não permitir usar o programa se não arrumar ela tudo bem, agora modificar a data/hora não é responsabilidade do programa, e dependendo do caso o usuário pode nem ter permissão para isso.

ERINALDO 11/03/2015 17:08:07
#445158
Já vi várias pessoas perguntando como recuperar data e hora de um servidor, afinal a aplicação precisava ter o relógio da máquina em que está rodando sincronizado com o da máquina do banco de dados.

Sincronia de hora é, sem dúvida, trabalho do administrador da rede. A sincronia é tipicamente feita através de scripts de login que são atribuidos aos usuários. Coloca-se no script de login (um arquivo .bat) a instrução NET TIME <SERVIDOR> /SYNC /YES

Desta forma, sempre que o usuário se logar o horário das máquinas será sincronizado. Se você tem problemas desse tipo com horário, reclame com o administrador de sua rede.

Mas, como muitos programadores VB querem realmente recuperar a data/hora do servidor remotamente, vai então uma chamada de API para fazer isso. Para testar basta inserir uma textbox e um botão em um form, incluir este código no módulo do form e, no clique do botão, chamar a função. A chamada da função pode ficar assim :

MsgBox BuscarDataHora(Text1.Text)

Eis o código :

Option Explicit
Private Declare Function NetRemoteTOD Lib [Ô]NETAPI32.DLL[Ô] (ByVal server As String, buffer As Any) As Long
Private Declare Function NetApiBufferFree Lib [Ô]NETAPI32.DLL[Ô] (ByVal buffer As Long) As Long
Private Declare Sub CopyMemory Lib [Ô]KERNEL32[Ô] Alias [Ô]RtlMoveMemory[Ô] (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Type TIME_OF_DAY
t_elapsedt As Long
t_msecs As Long
t_hours As Long
t_mins As Long
t_secs As Long
t_hunds As Long
t_timezone As Long
t_tinterval As Long
t_day As Long
t_month As Long
t_year As Long
t_weekday As Long
End Type

[ô]
[ô] Função para retornar a Data/Hora de um computador na rede
[ô] RETORNO:
[ô] string no formato dd/mm/yyyy-hh:mm:ss
[ô] PARAMETROS:
[ô] sComputador: Nome de um computador da rede. Ex: \\SERVIDOR1
[ô]
Private Function BuscarDataHora(sComputador As String) As String
Dim sRetorno As String
Dim todTime As TIME_OF_DAY
Dim ptrTime As Long
Dim lRetorno As Long
Dim sServidor As String
Dim dRemoto As Date
On Error GoTo ERRO
sRetorno = [Ô][Ô]
Screen.MousePointer = vbHourglass
sServidor = StrConv(sComputador, vbUnicode)
lRetorno = NetRemoteTOD(sServidor, ptrTime)
If lRetorno = 0 Then
CopyMemory todTime, ByVal ptrTime, Len(todTime) [ô]COPIA O PONTEIRO RETORNADO PARA A ESTRUTURA TIME_OF_DAY
dRemoto = DateSerial(70, 1, 1) + (todTime.t_elapsedt / 60 / 60 / 24) [ô]CONVERTE O TEMPO DECORRIDO DESDE 1/Jan/70 PARA UMA DATA
dRemoto = dRemoto - (todTime.t_timezone / 60 / 24) [ô]AJUSTAR PARA DIFERENÇAS DO TimeZone
sRetorno = Format(dRemoto, [Ô]dd/mm/yyyy[Ô]) & [Ô]-[Ô] & Format(dRemoto, [Ô]hh:mm:ss[Ô])
NetApiBufferFree (ptrTime) [ô]LIBERA O PONTEIRO DA MEMÓRIA
Else
[ô]Erro 53: cannot find server
MsgBox [Ô]Não pode encontrar o servidor.[Ô] & vbCrLf & vbCrLf & sServidor, vbExclamation, [Ô]Atenção[Ô]
End If
GoTo FIM
ERRO:
MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, [Ô]Erro[Ô]
FIM:
Screen.MousePointer = vbDefault
BuscarDataHora = sRetorno
Exit Function
End Function
Tópico encerrado , respostas não são mais permitidas