powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать время на сервере?
25 сообщений из 25, страница 1 из 1
Как узнать время на сервере?
    #35352953
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумляне.

Сделал я программку, фиксирующую время logon и logout. Т.е. контролирующую начало и конец работы сотрудников нашего офиса.
Так нашелся умелец, который перед логаутом менял время на своем компе на более позднее (чтобы смыться раньше в работы), и перед выключением компа ставил время на полчаса назад, потому утром мог беззастенчиво опаздывать.

Можно ли как-то фиксировать время logon и logout, но не клиентского компа, а самого сервера, к которому такие умельцы доступа не имеют? Чего-то я никак не соображу, с какого угла начинать танцевать.

Тех. данные: на сервере лежит аксессовская база (там фиксируется время), а программка (VB6) стоит на каждой машине и отсылает данные в Access.

Спасибо
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35352958
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ACCESS это не совсем то что Вам нужно, переходите например на MSSQL и не будет у Вас таких "умельцев". Можно будет SELECT GetDate() и получится время сервера всегда. А в ACCESS будет всегда время клиента, т.к. в первом случае обрабатывается ядром сервера, во втором локальным драйвером из набора MDAC
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35352968
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за оперативный ответ. Жаль, что с аксессом не получится. Не знал. К сожалению, MSSQL у нас в офисе нет, есть только лицензионный Access.
А может, как-то извернуться, чтобы Access сам вписывал время, когда в таблицу добавлялась запись именно от этого клиента?
Есть ли такое событие в VB Access "добавление записи"? Тогда я смог бы навесить на него процедурку и время бы корректировалась в самом Access?
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353048
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в поиске, по словам BeforeInsert или AfterInsert в нашем подфоруме access найдёте нужное
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353223
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Только BeforeInsert и AfterInsert работают только с формами, а у меня форм в access-е нет, полько таблицы, которые заполняются через VB-приложение на клиентской машине.
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353311
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4cd6686Спасибо за оперативный ответ. Жаль, что с аксессом не получится. Не знал. К сожалению, MSSQL у нас в офисе нет, есть только лицензионный Access.
А может, как-то извернуться, чтобы Access сам вписывал время, когда в таблицу добавлялась запись именно от этого клиента?
Есть ли такое событие в VB Access "добавление записи"? Тогда я смог бы навесить на него процедурку и время бы корректировалась в самом Access?
насколько я понимаю, все события и процедуры аксеса отрабатывают на клиентской машине. Соответственно, и время тоже будет браться с клиентского компа.
Можете на сервер поставить что-то серверное (тот-же SQL, как тут уже писали), из аксеса дергать это что-то(типа Select GetDate() - выше уже писали), а оно будет возвращать дату сервера.
Можно конечно попробовать и через DCOM что-то наваять, опять-же серверное. Но геморно это - проще бесплатный MSDE поставить и не мучиться - делов-то на 10 минут.
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353346
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 4cd6686
> Уважаемые форумляне.
>
> Сделал я программку, фиксирующую время logon и logout. Т.е.
> контролирующую начало и конец работы сотрудников нашего офиса.
> Так нашелся умелец, который перед логаутом менял время на своем компе
> на более позднее (чтобы смыться раньше в работы), и перед выключением
> компа ставил время на полчаса назад, потому утром мог беззастенчиво
> опаздывать.

Попробуй звать net time /set и синхронизировать время его компьютера со
временем сервера, прежде чем регистрировать что-либо.
Пусть он удивится ;)

> Спасибо
Да не за что, вообще такие умельцы, если не понимают по человечески,
осаждаются административными мерами в виде докладной на имя руководителя,
который ввел фиксацию прихода-ухода и по его распоряжению административное
лишение прав на изменение системного времени. Потому что он может точно
также отбирать у себя права на изменение системного времени, перед выходом и
тогда net time /set не сработает

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353538
jhonkuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в аксе использовал автозаполнение поля дата-время при добавлении новой записи (туда пишется время именно сервера)
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353870
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, Игорь Горбонос. Есть на чем подумать и поучиться.
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353880
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jhonkukв аксе использовал автозаполнение поля дата-время при добавлении новой записи (туда пишется время именно сервера)

А как установить автозаполнение поля время? В свойствах поля не нахожу такого. Если не очень затруднит, напишите поподробней.
Спасибо
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353924
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конструкторе открыть таблицу и в "значение по умолчанию" написать Now()
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35353929
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у объекта ADODB.Recordset есть событие WillChangeRecord и другие . Подойдёт?
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354518
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НАПИСАЛ АНАЛОГИЧНУЮ ПРОГРАММУ. в Экселе на ВБА. Но для одиночного компьютера...
Учитывает опоздания , неучтенные перерывы, дает возможность отработать опоздания, учитывает полные и неполные дни, фиксирует время запуска Экселя и время закрытия, фиксирует факт входа-выхода в основные программы (Экселевские), распечатку документов, которые не положено печатать, сбои электропитания...
Все реализовал на формах, чтобы доступа к файлу не было...

Запретил доступ для Юзера к времени компьютера. Вопрос закрылся сам.

Код: plaintext
1.
Не могу реализовать сброс SMS через мобильный модем встроенный в системный блок.
Не могу реализовать запрос времени через мобильный модем встроенный в системный блок.

Пока в офисах сидят девочки прокатывает, как посадим девочку - хакера, будем "посмотреть"

Есть идея - для топика на Windows
1.фиксировать факт коррекции времени в ЛОГЕ
2.Сделать кнопки OK Отмена Применить - Inhabled на форме "СВОЙСТВА ДАТА И ВРЕМЯ" (но как реализовать не знаю)... Оставить только крестик на TitleBar.
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354552
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь.
Действительно, самое простое - это решение от shady.
Просто в клиентской программе убираю строку записи времени login / logout клиента в базу данных, а в Access-е ставлю в поле "время" default = now().
УРАААА!!!

Большое всем спасибо
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354571
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Dan-K
> Есть идея - для топика на Windows
> 1.фиксировать факт коррекции времени в ЛОГЕ

Это делается настройками аудита ;)

> 2.Сделать кнопки OK Отмена Применить - Inhabled на форме "СВОЙСТВА
> ДАТА И ВРЕМЯ" (но как реализовать не знаю)... Оставить только крестик на
> TitleBar.

А это политиками безопастности, правда при этом окно вообще не показывается
;)

Когда-же матчасть будем учить, вместо изобретания велосипеда?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354608
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, не получилось. Даже если access на сервере имеет дефолтное время = Now(), а я никакой команды на изменение его не даю, то он пишет клиентское, а не серверное время.
Убиться :(
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354760
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично. Аксес не серверное приложение, просто его файл лежит на серваке. А если вы его положите на флешку, откуда он должен будет взять время?
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35354949
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FAndrewЛогично. Аксес не серверное приложение, просто его файл лежит на серваке. А если вы его положите на флешку, откуда он должен будет взять время?

Сглупил, признаю.
Придется пытаться реализовывать вариант Игоря Горбоноса с вебовским временем. Если честно, никогда такого не делал. Я ж самоучка.
Не сможет ли кто-нибудь дать ссылки на примеры. Заранее благодарю
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35355000
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 4cd6686
> Придется пытаться реализовывать вариант Игоря Горбоноса с вебовским
> временем. Если честно, никогда такого не делал. Я ж самоучка.

Да собственно говоря, я металлург по образованию ;)
Это жизнь.

> Не сможет ли кто-нибудь дать ссылки на примеры. Заранее благодарю

Перед сохранением данных
Dim dt As Date
Запоминаем текущее системное время
dt = Now
Синхронизируем с сервером, если получится по правам
Shell "cmd.exe /c net time \\имя_сервера_где_лежит_база /set /y", vbHide
и я-бы вставил
Sleep(10)
DoEvents
Получение точного времени для сохранения данных
Перевод времени в исходное
Date = dt
Time = dt
Собственно сохранение данных на сервере

Удачи

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35355701
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Игорь Горбонос, спасибо за пример, но ничего не получается пока.

Dim dt As Date
dt = Now
Shell "cmd.exe /c net time \\хх.хх.хх.хх/set /y", vbHide
Sleep (10)
DoEvents
Date = dt
Time = dt

С правами доступа на хх.хх.хх.хх у меня порядок, код ошибки не выдает, но и время не синхронизирует.
Пожалуйста, добавьте в свой код строку типа, если это возможно:
dNewTime = Время на сервере хх.хх.хх.хх.
Чтобы я мог его и записать в таблицу, потому что время на моей машине не синхронизируется с серверным, хоть убей.
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35355836
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня, пример Игоря Горбонос, сработал
Код: plaintext
1.
2.
3.
    Dim name_server As String
    name_server = "Server-1c"
    Shell "cmd.exe /c net time \\" & name_server & " /set /y", vbHide
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35355894
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 4cd6686
> Уважаемый Игорь Горбонос, спасибо за пример, но ничего не получается
> пока.
>
> Dim dt As Date
> dt = Now
> Shell "cmd.exe /c net time \\хх.хх.хх.хх /set /y", vbHide

Между именем сервера и /set должен быть пробел.

> Sleep (10)
> DoEvents
> Date = dt
> Time = dt
>
> С правами доступа на хх.хх.хх.хх у меня порядок, код ошибки не
> выдает, но и время не синхронизирует.

Может у тебя на своем компе нет прав на изменение времени? ;)
попробуй набрать это:
net time \\хх.хх.хх.хх /set /y
в командной строке. Ключ /set устанавливает время, а ключ /y говорит
автоматическое ДА на вопрос "А действительно ли мы хотим поменять время?"

> Пожалуйста, добавьте в свой код строку типа, если это возможно:
> dNewTime = Время на сервере хх.хх.хх.хх.
> Чтобы я мог его и записать в таблицу, потому что время на моей машине
> не синхронизируется с серверным, хоть убей.

Добавь модуль и в него вставь код(это немного переделаннный пример из МСДН -
HOWTO: Create a Process for Reading and Writing to a Pipe)
а потом вызывай:
sNewTime = ExecCmd("cmd.exe /c net time \\хх.хх.хх.хх ")
В переменной sNewTime будет строка вида:
Current time at \\имя сервера is 05.06.2008 9:49

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
Option Explicit

Private Declare Function CreatePipe Lib "kernel32" ( _
    phReadPipe As Long, _
    phWritePipe As Long, _
    lpPipeAttributes As Any, _
    ByVal nSize As Long) As Long

Private Declare Function ReadFile Lib "kernel32" ( _
    ByVal hFile As Long, _
    ByVal lpBuffer As String, _
    ByVal nNumberOfBytesToRead As Long, _
    lpNumberOfBytesRead As Long, _
    ByVal lpOverlapped As Any) As Long

Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

Private Type STARTUPINFO
   cb As Long
   lpReserved As Long
   lpDesktop As Long
   lpTitle As Long
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type

Private Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessID As Long
   dwThreadID As Long
End Type

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
   lpApplicationName As Long, ByVal lpCommandLine As String, _
   lpProcessAttributes As Any, lpThreadAttributes As Any, _
   ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
   ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
   lpStartupInfo As Any, lpProcessInformation As Any) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal _
   hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const STARTF_USESTDHANDLES = &H100&
Private Const STARTF_USESHOWWINDOW = &H1

Private Const SW_HIDE =  0 

Public Function ExecCmd(cmdline$) As String
    Dim proc As PROCESS_INFORMATION, ret As Long, bSuccess As Long
    Dim start As STARTUPINFO
    Dim sa As SECURITY_ATTRIBUTES, hReadPipe As Long, hWritePipe _
    As Long
    Dim bytesread As Long, mybuff As String
    Dim i As Integer
    ExecCmd = ""

    mybuff = String( 256 , Chr$( 65 ))

    sa.nLength = Len(sa)
    sa.bInheritHandle =  1 &
    sa.lpSecurityDescriptor =  0 &

    ret = CreatePipe(hReadPipe, hWritePipe, sa,  0 )
    If ret =  0  Then
        MsgBox "CreatePipe failed. Error: " & Err.LastDllError
        Exit Function
    End If

 start.cb = Len(start)
 start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
 start.hStdOutput = hWritePipe
 start.wShowWindow = SW_HIDE

 ' Start the shelled application:
 ret& = CreateProcessA( 0 &, cmdline$, sa, sa,  1 &, _
 NORMAL_PRIORITY_CLASS,  0 &,  0 &, start, proc)
 If ret <>  1  Then
     MsgBox "CreateProcess failed. Error: " & Err.LastDllError
 End If

 bSuccess = ReadFile(hReadPipe, mybuff,  100 , bytesread,  0 &)
 If bSuccess =  1  Then
     ExecCmd = Left(mybuff, bytesread)
'     List1.AddItem ExecCmd
 Else
     MsgBox "ReadFile failed. Error: " & Err.LastDllError
 End If

    ret& = CloseHandle(proc.hProcess)
    ret& = CloseHandle(proc.hThread)
    ret& = CloseHandle(hReadPipe)
    ret& = CloseHandle(hWritePipe)
End Function

Private Sub CommandButton1_Click()
' Для теста
Debug.Print ExecCmd("cmd.exe /c net time \\127.0.0.1 /y")
End Sub



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35356611
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз спасибо, что не оставляете без помощи.

1. net time \\IP сервера /set /y. Работает: поменял на компе время и дату, прогнал эту команду, все восстановилось, как на сервере. Значит, тут порядок.

2. Сделал, как было сказано.
ЗАРАБОТАЛО!!!!!!

Все, проблема решена. Теперь все логины и логауты пишутся с серверным временем. Проверено на нескольких машинах.
Огромная признательность всем и персонально Игорю :)
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35356714
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 4cd6686
> Еще раз спасибо, что не оставляете без помощи.
>
> 1. net time \\IP сервера /set /y. Работает: поменял на компе время и
> дату, прогнал эту команду, все восстановилось, как на сервере. Значит, тут
> порядок.

Если IP динамический, назначаемый сервером DHCP, то когда нибудь IP может
изменится, при правильно настроенной сетке с DNS-server'ом лучше
использовать имя компьютера, это из общения с сисадминами. Если адреса
статические, тогда лучше использовать IP адрес.

>
> 2. Сделал, как было сказано.
> ЗАРАБОТАЛО!!!!!!
>
> Все, проблема решена. Теперь все логины и логауты пишутся с серверным
> временем. Проверено на нескольких машинах.

Ну и чудесненько ;)

Удачи

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как узнать время на сервере?
    #35356966
4cd6686
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсли IP динамический, назначаемый сервером DHCP, то когда нибудь IP может
изменится, при правильно настроенной сетке с DNS-server'ом лучше
использовать имя компьютера, это из общения с сисадминами. Если адреса
статические, тогда лучше использовать IP адрес.

Нет, айпи статический. Так что проблем быть не должно, а на будущее учту
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как узнать время на сервере?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]