Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Vấn đề ngày tháng trong Access

    Cho mình hỏi chút nhé,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
    Thanks
    :giabo:

  2. #2
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Ðề: Vấn đề ngày tháng trong Access




    Trích dẫn Gửi bởi glasseggs
    Cho mình hỏi chút nhé,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
    Thanks
    :giabo:
    Có nhiều hướng dẫn cho vấn đề này rồi. Nhưng đa số đều khá phức tạp.
    Sau một thời gian viết vài chương trình cho các công ty Đài Loan thì tôi nghiệm ra rằng, cách nhập giá trị ngày theo kiểu của họ là OK nhất. Nghĩa là nhập theo kiểu yyyy/MM/dd.

    Cho nên một lời gợi ý là, đối với field ngày, bạn hãy nhập theo kiểu yyyy/MM/dd. Phần định dạng sẽ do Access đảm nhận. Như vậy bạn không bận tâm về định dạng của máy đang sử dụng nữa.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    137
    Ðề: Vấn đề ngày tháng trong Access

    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 modul




    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

    Private 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
    2. Ở sự kiện Form_Load của form ******* 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

    Chúc thành công!

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    Ðề: Vấn đề ngày tháng trong Access




    Trích dẫn Gửi bởi dongnamnb
    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 modul



    2. Ở sự kiện Form_Load của form ******* của bạn, bạn gọi thủ tục SetSysDate như sau:



    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

    Chúc thành công!
    Đây là một đoạn code hữu ích, nhưng như thế là "không fair" lắm, khi chương trình chạy trên một máy của người khác, mà tất cả tài liệu của họ được định dạng theo mm/dd/yyyy ????

    Bạn làm thế, khi chương trình thoát rồi mà không trả lại định dạng cũ cho người ta, lỡ người ta sơ ý, người ta nhập sai dữ liệu trong tài liệu khác thì sao?

    Do vậy cần phải có một thao tác Reset lại format cho người ta khi chương trình thoát nữa thì mới tốt.

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Vấn đề ngày tháng trong Access

    Nghe bác Phatnq2002 nói em thấy cũng có vẻ rắc rối vấn đề ngày tháng nhỉ.Mà theo bác nếu nhập theo kiểu yyyy/MM/dd thì có phải đặt Format trên Textbox Date là yyyy/MM/dd không ?

    Mà theo em nghĩ nếu ngày hệ thống đang để là MM/dd/yyyy thì khi nhập dữ liệu nó vẫn bắt mình nhập theo kiểu đó chứ.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Vấn đề ngày tháng trong Access




    Trích dẫn Gửi bởi glasseggs
    Nghe bác Phatnq2002 nói em thấy cũng có vẻ rắc rối vấn đề ngày tháng nhỉ.Mà theo bác nếu nhập theo kiểu yyyy/MM/dd thì có phải đặt Format trên Textbox Date là yyyy/MM/dd không ?

    Mà theo em nghĩ nếu ngày hệ thống đang để là MM/dd/yyyy thì khi nhập dữ liệu nó vẫn bắt mình nhập theo kiểu đó chứ.
    Thông lệ, có 2 hình thức format:
    Display format: định dạng hiển thị giá trị hiện có của control
    Edit format: định dạng giá trị khi nhập

    Cái rắc rối ở chỗ là cái Display format. Nếu Edit format = Display format thì không vần đề gì, nhưng nếu khác là có chuyện như đã, đang bàn.

    Tuy nhiên, như một ngầm định, hầu hết các ứng dụng khi nhập vào theo dạng yyyy/MM/dd (tức là Edit format) thì sẽ tự động chuyển dạng Display format theo đúng như hệ thống, hoặc theo Custom format (format do người dùng đặt).

    Bạn có thể thử trên Excel hoặc Access để thấy.

    Riêng với Excel, nếu định dạng hệ thống là MM/dd/yyyy, thì khi bạn nhập vào một giá trị ngày dạng dd/MM/yyyy nhưng có dd <= 12 thì Excel xem như đó là tháng. VD: nếu ta nhập vào ngày 12/02/2010 thì Excel hiểu là tháng 12 ngày 2 năm 2010. Nếu dd > 12 thì giá trị đó được hiểu là Text chứ không phải là Date. (Bằng chứng là giá trị đó được mặc định canh trái ô).

    Với Access, nếu định dạng hệ thống là MM/dd/yyyy, thì khi bạn nhập vào textbox một giá trị ngày dạng dd/MM/yyyy nhưng có dd <= 12 thì Access xem như đó là tháng. Nhưng nếu dd > 12 thì Access tự động hiểu đó là ngày. VD: nếu nhập ngày 12/02/2010 thì Access hiểu là tháng 12 ngày 2 năm 2010. Nếu nhập ngày 13/02/2010 thì Access hiểu là tháng 2 ngày 13 năm 2010.

    Như vậy, tùy theo tình huống, trường hợp thì nên dùng cách nào cho hợp lý và đơn giản.

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Vấn đề ngày tháng trong Access

    Em nhập thử theo kiểu yyyy/mm/dd thì nó cũng đúng theo ý bác. Nhưng như thế em thấy nó cũng không hay lắm.Em muốn ''Việt Hóa" nó theo kiểu cả Display format và Edit format giống nhau là : dd/mm/yyyy.
    Vậy có lẽ để tự người dùng muốn để kiểu nào thì họ tự chỉnh thôi vậy.

  8. #8
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Vấn đề ngày tháng trong Access




    Trích dẫn Gửi bởi phatnq2002
    Đây là một đoạn code hữu ích, nhưng như thế là "không fair" lắm, khi chương trình chạy trên một máy của người khác, mà tất cả tài liệu của họ được định dạng theo mm/dd/yyyy ????

    Bạn làm thế, khi chương trình thoát rồi mà không trả lại định dạng cũ cho người ta, lỡ người ta sơ ý, người ta nhập sai dữ liệu trong tài liệu khác thì sao?

    Do vậy cần phải có một thao tác Reset lại format cho người ta khi chương trình thoát nữa thì mới tốt.
    Khi đã có đoạn code trên thì việc reset lại format date cho hệ thống sau khi thoát chương trình tôi nghĩ không phải là việc khó đối với Programmers. Tuy nhiên để làm triệt để như bác phat nêu ra thì quả là khó.

    VD khi ta khởi động ứng dụngthì format ngày hệ thống sẽ được tự động đổi thành dd/mm/yyyy, khi thoát khỏi ứng dụng thì format ngày hệ thống lại tự động đổi lại như cũ. Thời gian từ khi mở ứng dụng làm việc đến khi đóng ứng dụng NSD vẫn có thể làm việc với các ứng dụng khác. Do đó lỗi có thể sảy ra như bác phat đã nêu là không thể tránh khỏi.

    Tuy nhiên chúng ta thường chỉ ứng dụng Access để tạo các ứng dụng nhỏ cho người Viêt Nam sử dụng, format date của người Việt là dd/mm/yyyy do đó bạn sử dụng đoạn code trên để thay đối format cho ngày hệ thống là tương đối tiện lợi, có thể chấp nhận được.

  9. #9
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Vấn đề ngày tháng trong Access

    Cho mình hỏi chút ,đoạn code trên có tác dụng trên Windows 7 không .Sao mình chạy không thấy tác dụng.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •