Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

2/3/10

Set Mặc Định định dạng ngày tháng

Hỏi: Nếu như trong phần mềm của mình định dạng Format cho trường Date là dd/mm/yyyy mà ngày tháng hệ thống là mm/dd/yyyy thì sẽ dẫn đến lẫn lộn ngày tháng khi nhập vào CSDL .Nếu như mình nhập 12/06/2009 thì nó sẽ hiển thị 6/12/2009.
Vậy có cách nào để khi mình mở phần mềm lên nó sẽ tự kiểm tra ngày hệ thống để trả về định dạng dd/mm/yyyy không ?
Đừng bảo mình chuyển trong Control Panel nhé ,vì như thế cứ mang pm đi máy nào cũng phải chỉnh lại mất công lắm,mà không pro

Đáp: ( dongnamnb- Danketoan)
Bạn có thể giải quyết bằng hàm API. Cách làm như sau:

1. Copy đoạn code sau vào 1 module

Option Compare Database

Public Const LOCALE_SSHORTDATE = &H1F
Public Const WM_SETTINGCHANGE = &H1A
'same as the old WM_WININICHANGE
Public Const HWND_BROADCAST = &HFFFF&

Public Declare Function SetLocaleInfo Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As _
Long, ByVal lpLCData As String) As Boolean
Public Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetSystemDefaultLCID Lib "kernel32" _
() As Long
Public Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal _
lpLCData As String, ByVal cchData As Long) As Long

Sub SetSysDate()
Dim lLocal As Long
Dim Length As Long
Dim dwLCID As Long
Dim Buf As String * 1024

On Error GoTo SetSysDate_Error
lLocal = GetSystemDefaultLCID()
Length = GetLocaleInfo(lLocal, LOCALE_SSHORTDATE, Buf, Len(Buf))
If Not Left$(Buf, Length - 1) = "dd/MM/yyyy" Then
dwLCID = GetSystemDefaultLCID()
If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = False Then
MsgBox "Khong doi duoc dinh dang ngay he thong.", 64, "Thong bao"
Exit Sub
End If
PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0

End If


Exit Sub

SetSysDate_Error:
MsgBox "Unexpected Error No. " & Err.Number & _
" in procedure SetSysDate of Form Main. " _
& vbCrLf & vbCrLf & Err.Description, 64, "Dish Care Centre"
End Sub
Ở sự kiện Form_Load của form startup của bạn, bạn gọi thủ tục SetSysDate như sau:
Private Sub Form_Load()

SetSysDate

End Sub
 Như vậy mỗi lần chạy chương trình của bạn thì định dạng ngày hệ thống sẽ tự động chuyển thành dạng dd/mm/yyyy
____________________________________________________________________________________
Thảo luận thêm: http://thuthuataccess.co.cc/forum

10 comments:

  1. Sao chương trình báo lỗi ngay thủ tục gọi hàm SetSysDate. Lỗi như sau :
    "Sub or function not defined". Xin chỉ giáo. Cám ơn nhiều!

    ReplyDelete
  2. Có lẽ thủ tục SetSysDate bị khai báo là Private nên mới có hiện tượng trên. Bạn khai báo lại thành public thử.

    ReplyDelete
  3. Nó báo lỗi "Type-declaration character doesn't match declared data type" tại hàm left$

    ReplyDelete
  4. Bạn thử bỏ dấu $

    ReplyDelete
  5. vay minh viet doan code nay vao cho nao trong access ji,minh cung gap phai truong hop nay khi lam acess,xin thinh~ giao

    ReplyDelete
  6. Thủ thuật này rất hay, chương trình đã chạy tốt trên máy của mình. Xin hỏi có thủ thuật nào tương tự để set dấu phân các và dầu thập phân: Ví dụ: Mặc định dấu phân cách nhóm là "," và dấu thập phân: "." (theo hệ Mỹ). Vậy có thủ thuật nào để sét về tương ứng: "." và ",". Ths

    ReplyDelete
  7. sao mình làm ko dc nhỉ

    ReplyDelete
  8. vậy muốn đổi thành yy/mm/dd thì sửa đoạn code lại như thế nào bạn. Vui lòng chỉ giúp

    ReplyDelete
  9. mình sửa đoạn code để set hệ thống theo định dạng yy/mm/dd thì như thế nào, bạn vui lòng chỉ giúp.

    ReplyDelete
  10. Thủ thuật này rất hay, chương trình đã chạy tốt trên máy của mình.
    Xin hỏi có thủ thuật nào tương tự để set dấu phân các và dầu thập phân:
    Ví dụ: Mặc định dấu phân cách nhóm là "," và dấu thập phân: "." (theo hệ Mỹ).
    Vậy có thủ thuật nào để sét về tương ứng: "." và ",". Thanks.
    thucnv@yahoo.com

    ReplyDelete

» Hãy để lại tên, email của bạn khi bạn post comment, để mình có thể dễ dàng trả lời comment của bạn khi cần.
» Có thể sử dụng các thẻ < b>,< i>,< a>. Và các icon thông dụng trên YM