Minh Tiên > 05-11-20, 08:57 AM
(04-11-20, 09:48 PM)thuyyeu99 Đã viết:(04-11-20, 08:06 PM)Minh Tiên Đã viết: Tiên mù API. Tiên test trên W10 32bit cũng lỗi tương tự Win10 64 bit.kỳ vậy mình win 10 64 office 32 chay đúng mà ta
Thân./.
mình đổi ngày thành d/m/yyyy chạy code noi chuyển về dd/mm/yyyy
[img][/img]
Minh Tiên > 05-11-20, 09:09 AM
(05-11-20, 08:45 AM)ongke0711 Đã viết: Tiên tắt mấy cái bẫy lỗi của 2 hàm xem nó báo lỗi dòng nào nhé.
Public Sub ChangeSysDatNumCur()
Dim lLocal As Long
Dim LenDate As Long, LenCur As Long, LenNum As Long
Dim dwLCID As Long
Dim BufDate As String * 1024, BufCur As String * 1024, BufNum As String * 1024
' On Error GoTo ChangeSysDatNumCur_Error
lLocal = GetSystemDefaultLCID()
LenDate = GetLocaleInfo(lLocal, LOCALE_SSHORTDATE, BufDate, Len(BufDate))
LenCur = GetLocaleInfo(lLocal, LOCALE_SMONTHOUSANDSEP, BufCur, Len(BufCur))
LenNum = GetLocaleInfo(lLocal, LOCALE_STHOUSAND, BufNum, Len(BufNum))
If Not Left$(BufDate, LenDate - 1) = FormatSDate Or Not Left$(BufCur, LenCur - 1) = FormatThou Or Not Left$(BufNum, LenNum - 1) = FormatThou Then 'Kiem tra ngay he thong co cung dinh dang mong muon ko?
dwLCID = GetSystemDefaultLCID()
If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, FormatSDate) = False Then 'Thiet lap thu xem co loi ko?
MsgBox "Khong doi duoc dinh dang ngay, so cua he thong.", 64, "Lien he nhan vien Quan tri he thong"
Exit Sub
Else
Change_LocaleInfo
MsgBox "Ung dung se tu khoi dong lai de cac thiet lap co hieu luc.", vbInformation, "Thông báo"
' RestartAccessApp.Restart True 'Khoi dong va Compact database Access
End If
Else
MsgBox "Dinh dang Ngay/Thang, kieu Tiên te, kieu So phu hop voi ung dung, khong can thiet lap lai." & vbCrLf _
& "- Kieu ngày: " & FormatSDate & vbCrLf _
& "- Kieu so : 1" & FormatThou & "000" & FormatDec & "00", vbInformation, "Chuc mung!"
' DoCmd.OpenForm "frmMain"
DoCmd.Close acForm, "frmDangnhap_Splash"
Exit Sub
End If
'ChangeSysDatNumCur_Error:
' MsgBox "Loi khong xac dinh No. " & Err.Number & _
' " trong thu tuc [ChangeSysDatNumCur] cua form khoi dong. " _
' & vbCrLf & vbCrLf & Err.Description, 64, "Ung dung Access"
End Sub
thuyyeu99 > 05-11-20, 09:39 AM
(05-11-20, 08:57 AM)Minh Tiên Đã viết:nếu thế thì lạ quá nhỉ máy của mình hoàn toàn không có lỗi như bạn nói cho dù chay lai bao nhiêu lần(04-11-20, 09:48 PM)thuyyeu99 Đã viết:(04-11-20, 08:06 PM)Minh Tiên Đã viết: Tiên mù API. Tiên test trên W10 32bit cũng lỗi tương tự Win10 64 bit.kỳ vậy mình win 10 64 office 32 chay đúng mà ta
Thân./.
mình đổi ngày thành d/m/yyyy chạy code noi chuyển về dd/mm/yyyy
[img][/img]
Như mình đã nói ở trên. Code vẫn đổi đúng ngày thiết đặt. Nhưng mỗi khi chạy đều báo "sẽ thiết đặt". Tức cái code kiểm tra trỏ chưa đúng vào vị trí nên luôn có sự khác biệt.
Thân./.
Minh Tiên > 05-11-20, 10:09 AM
Dim strLocale As String
Dim strLocaleSDate As String
Dim strLocaleDec As String
Dim strLocaleDig As String
Dim lngSDate As Long
Dim lngDec As Long
Dim lngDig As Long
'Get Short date format:
strLocale = Space(255) 'Mẫu chốt nằm ở đây.
lngSDate = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strLocale, Len(strLocale))
strLocaleSDate = Left(strLocale, lngSDate - 1)
'Get Decimal Format:
lngDec = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, strLocale, Len(strLocale))
strLocaleDec = Left(strLocale, lngDec - 1)
'Get Digit Format:
lngDig = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, strLocale, Len(strLocale))
strLocaleDig = Left(strLocale, lngDig - 1)
If Not strLocaleSDate = FormatSDate Or Not strLocaleDec = FormatDec Or Not strLocaleDig = FormatThou Then
MsgBox "Thiet dat lai."
Change_LocaleInfo
Else
MsgBox "Ko thiet dat lai."
End If
Minh Tiên > 05-11-20, 10:13 AM
Minh Tiên > 05-11-20, 11:49 AM
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
lLocal = GetSystemDefaultLCID()
lLocal = GetUserDefaultLCID
thuyyeu99 > 05-11-20, 05:07 PM
(05-11-20, 11:49 AM)Minh Tiên Đã viết: Mình phát hiện ra một vấn đề này nữa:Theo mình biết thì:
Ở code của ongke0711 nếu thay đổi một tí như sau thì cũng chạy trên PC của mình OK:
1. Khai báo thêm:
và thay đổi dòng code của ChangeSysDatNumCur:Mã:Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
từ:
...
'Cho ra kết quả là 1033Mã:lLocal = GetSystemDefaultLCID()
sang:
'Cho ra kết quả là 1066Mã:lLocal = GetUserDefaultLCID
...
là OK.
Mình ko rành vụ này. Không biết do cách đặt khác nhau hay sao mà có máy thì dùng GetSystemDefaultLCID(), có máy dùng GetUserDefaultLCID.
Thân./.
ongke0711 > 06-11-20, 12:20 PM
(05-11-20, 11:49 AM)Minh Tiên Đã viết:và thay đổi dòng code của ChangeSysDatNumCur:Mã:Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
từ:
sang:Mã:lLocal = GetSystemDefaultLCID()
Mã:lLocal = GetUserDefaultLCID
Minh Tiên > 06-11-20, 03:05 PM
ongke0711 > 06-11-20, 03:46 PM
(06-11-20, 03:05 PM)Minh Tiên Đã viết: ongke0711 nghiên cứu giúp SetLocalThread (Hoặc SetUserLocalLCID) từ English sang Vietnamese nhé ! Tiên chạy thử búa xua cũng ko thay cái Format từ English sang Vietnamese được.
Với strLocale = Space(255) dùng hàm:
lngCountry =GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICOUNTRY, strLocale, Len(strLocale))
và
Left(strLocale, lngCountry - 1)
Thì cho ra đúng kết quả Vietnamese là 84, English (United Kingdom) 44, English (United States) 1, ...
Nhưng không làm sao set đổi từ 1 sang 84.
Vì nếu đổi được Shortdate, Number, Curency mà không đổi Country thì việc Import dữ liệu từ Excel vào cũng ko ổn (Sai nếu có dấu thập phân Chuẩn Việt Nam).