tranhai_vn > 06-09-15, 04:16 PM
tranthanhan1962 > 06-09-15, 05:45 PM
(06-09-15, 04:16 PM)tranhai_vn Đã viết: Hiện em muốn xây dựng một Access chạy mạng lan nhiều người dùng, nhưng em nghỉ tới 1 vấn đề là em muốn lưu thời gian nhập liệu của từng người lại để tiện theo dõi nhưng nếu máy tính người đó chạy sai ngày giờ vậy có cách nào kiểm tra đồng bộ hay thông báo ngày giờ thực không. Mong các Bác chia sẽ. Trân trọng!
Noname > 06-09-15, 09:58 PM
tranthanhan1962 > 07-09-15, 01:22 AM
tranhai_vn > 07-09-15, 08:45 AM
Trích dẫn:Ý của bạn ấy là thế này, khi 1 kế toán viên làm sai, hoặc cố ý làm lùi ngày giờ lại để hợp thức hóa chứng từ. Như vậy sẽ không đúng ý đồ của người quản trị.Cám ơn Bác Noname, nhưng em định làm file Access WorkGoup các máy khác đều chạy bằng shorcut. Như Bác gợi ý nếu như vậy lần đâu tiên khi máy trạm chạy sai giờ thì sẽ không thể kiểm tra ra, như vậy phải lồng thêm hàm so sánh giờ với máy chủ. Nhưng lại đặt ra vấn đề là máy chủ chỉ mở mà không nhất thiết thao tác thường xuyên như vậy cũng không thể giải quyết vấn đề. Bác có cách nào giúp so sánh với thời gian chạy trên máy chủ hoặc time zone không? . Vì em cũng mới tập tành access nên cũng không rành VBA. Trân trọng!
Yêu cầu đặt ra là làm sao để ngăn cho người nhập liệu sửa ngày giờ khi mở chương trình.
Cách làm thì khá nhiều, phức tạp thì check time zone, so sánh với các đồng hồ quốc tế, hoặc đơn giản hơn là so sánh với đồng hồ server.
Nhưng theo Noname thì cách dễ làm nhất là mỗi khi người dùng mở chương trình, thao tác với chương trình thì đều tự động lưu lại: ngày giờ, thao tác.
Tham khảo bài này: http://thuthuataccess.com/forum/thread-377.html
Khi mở chương trình lên, chỉ cần so sánh ngày hiện hành của máy tính với log bảng lưu lần cuối cùng, thấy nó cũ hơn là biết người nhập liệu đã "bùa" gì đó với đồng hồ máy tính rồi. Đóng lại.
Với các hàm dùng trong link trên, bạn chế lại chút đỉnh là đáp ứng nhu cầu.
tranhai_vn > 07-09-15, 08:57 AM
Trích dẫn:Nếu chỉ kiểm tra việc bùa date/time để quay lại chỉnh sửa. Chỉ cần xử lý một form ẩn nào đó (ví dụ form login) chẳng hạn cho nó nằm vùng, lưu lại ngày giờ thoát chương trình. Khi lần kế tiếp mở lên ngày giờ không được nhỏ hơn ngày giờ thoát chương trình là xong.Cám ơn Bác đã quan tâm chủ đề này nhưng như những gì Bác nói chỉ là chung chung Bác có thể đưa ra cách làm cụ thể hơn không?, em đã tham khảo các bài viết trên diễn đàn và cũng dùng Dlookup để so sánh nhưng vấn đề không giải quyết triệt để vì máy chủ chỉ mở không ai thao tác trên đó thì không có dữ liệu so sánh được với máy trạm và nếu như cập nhật giờ vào table mà giờ máy trạm chạy sai giờ trên máy chủ chưa cập nhập kịp vào table thì các lần sau sẽ chạy sai luôn bình thường. Không kiểm soát được vẫn có kẻ lách.
maidinhdan > 07-09-15, 12:29 PM
(07-09-15, 08:57 AM)tranhai_vn Đã viết:Trích dẫn:Nếu chỉ kiểm tra việc bùa date/time để quay lại chỉnh sửa. Chỉ cần xử lý một form ẩn nào đó (ví dụ form login) chẳng hạn cho nó nằm vùng, lưu lại ngày giờ thoát chương trình. Khi lần kế tiếp mở lên ngày giờ không được nhỏ hơn ngày giờ thoát chương trình là xong.Cám ơn Bác đã quan tâm chủ đề này nhưng như những gì Bác nói chỉ là chung chung Bác có thể đưa ra cách làm cụ thể hơn không?, em đã tham khảo các bài viết trên diễn đàn và cũng dùng Dlookup để so sánh nhưng vấn đề không giải quyết triệt để vì máy chủ chỉ mở không ai thao tác trên đó thì không có dữ liệu so sánh được với máy trạm và nếu như cập nhật giờ vào table mà giờ máy trạm chạy sai giờ trên máy chủ chưa cập nhập kịp vào table thì các lần sau sẽ chạy sai luôn bình thường. Không kiểm soát được vẫn có kẻ lách.
'---------------------------------------------------------------------------------------
' Module : mod_Lay Thoi gian thuc
' Author : maidinhdan@gmail.com
' Date : 06/09/2015
' Purpose :
'---------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
Function InternetTime(Optional GMTDifference As Integer) As Date
Dim Request As Object
Dim ServerURL As String
Dim Results As String
Dim NetDate As String
Dim NetTime As Date
Dim LocalDate As Date
Dim LocalTime As Date
If GMTDifference < -12 Or GMTDifference > 14 Then
Exit Function
End If
ServerURL = "http://www.timeanddate.com/worldclock/fullscreen.html?n=95" ' Đồng hồ của Việt Nam
On Error Resume Next
Set Request = CreateObject("Microsoft.XMLHTTP")
If Err.Number <> 0 Then
Exit Function
End If
On Error GoTo 0
Request.Open "GET", ServerURL, False, "", ""
Request.Send
If Request.ReadyState = 4 Then
Results = Request.getResponseHeader("date")
Results = Mid(Results, 6, Len(Results) - 9)
NetDate = Left(Results, Len(Results) - 9) ' Lấy ngày tháng
NetTime = Right(Results, 8) ' Lấy giờ giấc
LocalDate = ConvertDate(NetDate)
LocalTime = NetTime + GMTDifference / 24
InternetTime = LocalDate + LocalTime
End If
Set Request = Nothing
End Function
Function ConvertDate(strDate As String) As Date
' Hàm chuyển Ngày tháng từ MMM thành MM tức lá từ chữ thành số
Dim MyMonth As Integer
Select Case UCase(Mid(strDate, 4, 3))
Case "JAN": MyMonth = 1
Case "FEB": MyMonth = 2
Case "MAR": MyMonth = 3
Case "APR": MyMonth = 4
Case "MAY": MyMonth = 5
Case "JUN": MyMonth = 6
Case "JUL": MyMonth = 7
Case "AUG": MyMonth = 8
Case "SEP": MyMonth = 9
Case "OCT": MyMonth = 10
Case "NOV": MyMonth = 11
Case "DEC": MyMonth = 12
End Select
ConvertDate = DateValue(Right(strDate, 4) & "/" & MyMonth & "/" & Left(strDate, 2))
End Function
Private Sub cmdLaythoigianthuc_Click()
Me.txtthoigianthuc.Value = InternetTime(7) ' Số 7 tượng trưng cho GMT+7 HaNoi-VietNam
End Sub
tranhai_vn > 07-09-15, 02:39 PM
Trích dẫn:* Cách 1: Lấy thời gian từ Internet.Cám ơn bài viết của Bác maidinhdan. Nhưng khi click giờ lấy về lớn hơn giờ thực 5 giờ, lệch AM PM
Để lấy thời gian thực trên Internet ta có thể lợi dụng trang Web sau để tạo ra 1 hàm lấy thời gian đó về nạp vào phần thời gian máy tính đó đã đăng nhập ( tức là không phục thuộc vào máy đó chỉnh thời gian năm tháng nào, miễn là chỉ cần có kết nối Internet là được.
Thời gian thực trên internet của Việt Nam theo múi HaNoi GMT+7 được mặc định là: http://www.timeanddate.com/worldclock/fu....html?n=95
Bước 1:
Ta sẽ thiết kế 02 hàm để lấy thời gian theo Link trên
Mã PHP:
'---------------------------------------------------------------------------------------
' Module : mod_Lay Thoi gian thuc
' Author : maidinhdan@gmail.com
' Date : 06/09/2015
' Purpose :
'---------------------------------------------------------------------------------------
Option Compare Database
Option Explicit
Function InternetTime(Optional GMTDifference As Integer) As Date
Dim Request As Object
Dim ServerURL As String
Dim Results As String
Dim NetDate As String
Dim NetTime As Date
Dim LocalDate As Date
Dim LocalTime As Date
If GMTDifference < -12 Or GMTDifference > 14 Then
Exit Function
End If
ServerURL = "http://www.timeanddate.com/worldclock/fullscreen.html?n=95"
On Error Resume Next
Set Request = CreateObject("Microsoft.XMLHTTP")
If Err.Number <> 0 Then
Exit Function
End If
On Error GoTo 0
Request.Open "GET", ServerURL, False, "", ""
Request.Send
If Request.ReadyState = 4 Then
Results = Request.getResponseHeader("date")
Results = Mid(Results, 6, Len(Results) - 9)
NetDate = Left(Results, Len(Results) - 9) '30 Sep 2013
NetTime = Right(Results, 8) '18:33:23
LocalDate = ConvertDate(NetDate)
LocalTime = NetTime + GMTDifference / 24
InternetTime = LocalDate + LocalTime
End If
Set Request = Nothing
End Function
Function ConvertDate(strDate As String) As Date
Dim MyMonth As Integer
Select Case UCase(Mid(strDate, 4, 3))
Case "JAN": MyMonth = 1
Case "FEB": MyMonth = 2
Case "MAR": MyMonth = 3
Case "APR": MyMonth = 4
Case "MAY": MyMonth = 5
Case "JUN": MyMonth = 6
Case "JUL": MyMonth = 7
Case "AUG": MyMonth = 8
Case "SEP": MyMonth = 9
Case "OCT": MyMonth = 10
Case "NOV": MyMonth = 11
Case "DEC": MyMonth = 12
End Select
ConvertDate = DateValue(Right(strDate, 4) & "/" & MyMonth & "/" & Left(strDate, 2))
End Function
Bước 2: Tạo 1 form: có 1 text box( tạm gọi là txtthoigianthuc) và 1 nút command ( tạm gọi là cmdLaythoigianthuc)
Chèn vào sự kiện Click form như sau
Mã PHP:
Private Sub cmdLaythoigianthuc_Click()
Me.txtthoigianthuc.Value = InternetTime()
End Sub
Demo kèm theo bên dưới, chúc bạn vui vẻ
* Cách 2: Dùng tính năng tự động cập nhật giờ của Windows. Tính năng này xuất hiện ít nhất là từ Windows XP.
(nguồn tham khảo ý này: http://www.giaiphapexcel.com/forum/showt...a-Internet)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servic es\W32Time\TimeProviders\NtpClient
- Bạn tìm khóa sau trong Regedit:
* Nếu hệ thống LAN của bạn có 1 máy tính cài đặt giờ chuẩn thì dùng 1 file BATCH dùng lệnh NET TIME đặt vào Startup (thực thi khi máy khởi động/login). Cái này không yêu cầu kết nối internet.
- Với DWORD SpecialPollInterval là thời gian (giây) máy tính của bạn sẽ nối với máy chủ time của Microsoft để cập nhật. Mặc định là 7 ngày tuy nhiên bạn còn thể chỉnh xuống tổi thiểu 1 giây.
- Để sử dụng được tính năng này thì dịch vụ Windows Time phải đang chạy. Trên Windows 7 mình đang chạy, dịch vụ này có trạng thái Stopped. Bạn chuyển Startup style về Automatic.
Nhìn có vẻ phức tạp nhưng thực hiện khá đơn giản đấy. Dùng tính năng tự động cập nhật giờ của Windows có thể coi là chuẩn nhất vì bạn được cập nhật giờ của máy chủ Microsoft. Chỉ cần bạn đặt đúng Time Zone Hà Nội thì máy tính sẽ tự cập nhật giờ Hà Nội cho bạn.
* Cuối cùng mình nghĩ bạn nên thay đổi tiêu đề cho mọi người dể suy ra ý của bạn đó là: "Lấy thời gian thực"
Thân mến!
maidinhdan > 07-09-15, 04:21 PM
(07-09-15, 02:39 PM)tranhai_vn Đã viết: Cám ơn bài viết của Bác maidinhdan. Nhưng khi click giờ lấy về lớn hơn giờ thực 5 giờ, lệch AM PM
Trân trọng!
Private Sub cmdLaythoigianthuc_Click()
Me.txtthoigianthuc.Value = InternetTime(7) ' Số 7 tượng trưng cho GMT+7 HaNoi-VietNam
End Sub
tranhai_vn > 07-09-15, 04:31 PM