:: Visual Foxpro, Foxpro for DOS
Как узнать время на сервере где храниться БД?
ZenTigra

Сообщений: 514
Дата регистрации: 03.12.2004
Периодически возникает проблема, из-за неверной даты и времени на клиентских машинах.

Посему вопрос.
Как сделать синхронизацию даты и времени.

1.Спросить о дате и времени у Сервера напрямую.
2.Синхронизировать через интернет (не всегда возможно)

PS.Не знаю как реализовать ни первых ни второй способ, помогите.
Ratings: 0 negative/0 positive
Re: Как узнать время на сервере где храниться БД?
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Зависит от того, насколько сеть управляемая. У нормального админа все клиенты синхронизированы по NTP.



Исправлено 1 раз(а). Последнее : pasha_usue, 04.05.20 18:20
Ratings: 0 negative/0 positive
Re: Как узнать время на сервере где храниться БД?
ZenTigra

Сообщений: 514
Дата регистрации: 03.12.2004
Я там не админ, и сеть не управляемая, и проблема в батарейке. И сделать я там ничего не смогу, кроме автоматического выставления правильной даты
Ratings: 0 negative/0 positive
Re: Как узнать время на сервере где храниться БД?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Тогда "через интернет" настроить - вообще винда по умолчанию это и делает для не-доменных машин. Я не думаю что там имеется домен, т.к. при серьёзных рассинхронах часов машины попросту выкидывает из домена - т.е. они не смогут работать с сетью.

Не админ - а решаешь админские задачи - ну тогда уж изучи вопрос. Ничего экстра-сложного в этом нет, банальный флажок включить.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как узнать время на сервере где хранится БД?
of63
Автор

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
В сети можно узнать датувремя на компе зная его сетевое имя (в доменной сети работает, в других - хз)
NETAPI32: NetRemoteTOD
Часть текста скрыта
********************************************************************************************************************************************************
* Возвращает дату/время с удаленного сервера (1С), пересчитанную с учетом часового пояса (timezone, bias) запрашивающего местного (локального) компа (LC)
* Если (1C) пусто, то возвращает просто DATETIME на самом LC
* [2]=0 - умолчание, возвращает время на удаленном сервере, пересчитанное в местное время LC, (т.е. с учетом timezone LC)
* (2)=1 - возвращает UTC (==GMT) время сервера, БЕЗ учета timezone LC
* (2)=2 - возвращает timezone (bias) LC = время в секундах, которое надо ВЫЧЕСТЬ из времени UTC, чтобы получить время на LC
* ...UTC = LC + bias, соответственно, LC = UTC - bias, для Москвы,НН bias = -240 мин
* Кстати, оказалось, что в (1C) можно задавать IP-адреса, например, 123.456.789.012
********************************************************************************************************************************************************
Function GetServerDATETIME
PARAMETE m.parServerName, m.parMODA
PRIVATE ALL LIKE ?
m.m = IIF(PCOUNT()<2, 0, m.parMODA) && вариант возвращаемого значения: 0/1/2 - LC-время/UTC-время/timezone
m.n = LTRIM(m.parServerName, 1, "\") && имя сервера, без \\ в префиксе
DO CASE
CASE m.m=0 .AND.; && при возврате времени LC
(EMPTY(m.n) .OR.; && когда имя удаленного сервера не задано, значит хотят вернуть время на LC
val(OS(3))<5 .OR.; && д.б. NT, 2000, XP и выше
LIKEeq(GETENV("COMPUTERNAME"), m.n)) && задан явно сам этот LC
m.r = DATETIME()
OTHERWISE
* Структура TIME_OF_DAY_INFO (12 4-байтовых слов):
* tod_elapsedt : DWORD;
* tod_msecs : DWORD;
* tod_hours : DWORD;
* tod_mins : DWORD;
* tod_secs : DWORD;
* tod_hunds : DWORD;
* tod_timezone : Longint; 32-целое СО ЗНАКОМ, минут смещения от Гривинча (для Москва,НН = -240 мин)
* tod_tinterval: DWORD;
* tod_day : DWORD;
* tod_month : DWORD;
* tod_year : DWORD;
* tod_weekday : DWORD
m.t = 0 && сюда будет записан АДРЕС памяти с вышеуказанной структурой дата/время, не забыть потом ее освободить!
m.u = EVL(m.n, ALLTRIM(GETENV("COMPUTERNAME"))) && при вызове с ПУСТЫМ именем сервера будем измерять время просто на LC
m.u = CURtoUNICODE("\\"+m.u + Chr(0)) && UNICODE-имя сервера, на котором надо измерить системное время, должно начинаться с \\
* STRING ServerName,; && UNICODE-имя сервера БД, должно начинаться с \\, заканчиваться CHR(0)
* INTEGER @ BufferPointer && сюда будет положен УКАЗАТЕЛЬ (адрес) на TIME_OF_DAY_INFO
EXTERNAL ARRAY NetRemoteTOD, NetApiBufferFree
IF IsDECLAREs("NETAPI32: 5 NetRemoteTOD(S,I@); 5 NetApiBufferFree(I)") && если DLL еще не подключена, то подключим ее
IF 0=NetRemoteTOD(m.u, @t) && Время на удаленном сервере, по Гривинчу (UTC==GMT)
RELEASE A
DIMENSION A[1] && сюда считаем 11 4-байтовых чисел Integer: хз, хз, 3-часы, 4-минуты, 5-сек, 6-hunds, 7-timezone, 8-tinterval, 9-день, 10-мес, 11-год, [12-weekday]
=iSUBSTR(m.t, 1, 4, @A, 11)
A[7] = iSUBSTR(m.t, -(1+((7-1)*4)), 4) && перечитаем число timezone, как со знаком. Здесь, например, (для Москва,НН) = -240 [минут, = -4 часа]
* См в хелпе про букву T (указание на формат YMD) в значении параметра вызова CTOT: CTOT("2000-10-24T13:30:00")
m.r = CTOT(iPADL(A[11], 4)+"-"+;
iPADL(A[10], 2)+"-"+;
iPADL(A[ 9], 2)+"T"+;
iPADL(A[ 3], 2)+":"+;
iPADL(A[ 4], 2)+":"+;
iPADL(A[ 5], 2))
m.r = ICASE(m.m=1, m.r,; && вернуть UTC_сервера
m.m=2, 60*A[7],; && вернуть timezone (bias) LC в секундах, для Москвы=-240*60 (-4 часа)
m.r-60*A[7]) && вернуть LC = UTC_сервера - bias_LC
RELEASE A
ELSE && API отработала НЕуспешно
m.r = ICASE(m.m=1, DATETIME(),; && вернуть UTC_сервера
m.m=2, 0,; && вернуть timezone (bias) LC в секундах, для Москвы=-240*60 (-4 часа)
DATETIME()) && вернуть LC = UTC_сервера - bias_LC
ENDIF && итак, была выполнена API, надо освободить память за ней
=NetApiBufferFree(m.t) && освобождаем память
ENDIF
ENDCASE
RETURN m.r && GetServerDATETIME

Ratings: 0 negative/1 positive
Re: Как узнать время на сервере где храниться БД?
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Оффе никакие Defox-ы не страшны за ненадобностью.
Ratings: 0 negative/0 positive
Re: Как узнать время на сервере где храниться БД?
k_dimax

Сообщений: 1
Дата регистрации: 26.12.2012
Если БД Oracle, то запрос "select sysdate from dual" вернет серверное время
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 43 hvh2007  (Гостей: 42)

© 2000-2024 Fox Club 
Яндекс.Метрика