• Lỗi trùng mã khách hàng
  • RE: Lỗi trùng mã khách hàng

    tieu_ngao > 18-06-17, 11:04 AM

    (18-06-17, 10:52 AM)MTNQ Đã viết:
    (17-06-17, 02:23 PM)tieu_ngao Đã viết: MTNQ giải thích giùm mình đoạn này, mình chưa hiểu:
    Mã:
    datNgay_Max = DateValue(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2))
    Nếu mình muốn lấy mã theo dạng: yyyymmdd001 kiểu dữ liệu của mình là text
    thì làm thế nào?

    Xin lỗi. Hàm  DateValue  trong trường hợp này có thể trả về giá trị không như mong muốn nếu format ngày giờ trên hệ thống khác "dd/MM/yyyy" 
    Nên sửa lại như sau
    Mã:
    datNgay_Max = Format(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2), "dd/mm/yy")


    -Nếu muốn format theo kiểu yyyymmdd001 thì :
    datNgay_Max = Format(Mid(lngMaBN_Max, 7, 2) & "/" & Mid(lngMaBN_Max, 5, 2) & "/" & Left(lngMaBN_Max, 4), "dd/mm/yy")

    Tuy nhiên phải sửa hàm fcTaoMaBN lại cho phù hợp với dữ liệu kiểu text
    Cám ơn anh! Có để thể hướng dẫn cách sửa hàm fctaomabn thành dạng text dc ko anh?
  • RE: Lỗi trùng mã khách hàng

    MTNQ > 18-06-17, 11:04 AM

    (17-06-17, 09:41 AM)cannguyen Đã viết:
    (17-06-17, 06:35 AM)MTNQ Đã viết: File của bạn đây:
    http://www.mediafire.com/file/my2x1d7x7y4q7gh/PK1.rar

    Cám ơn bạn rất nhiều.
    Hiện tại mình không có máy nên chưa test được. Hi vọng là ok

    Để tránh lỗi trùng mã khi có nhiều hơn một người Enter cùng lúc thì thêm bẫy lỗi vào:

    Mã:
    Private Sub TenBN_AfterUpdate()
       If Nz(Me.TenBN, "") = "" Then Exit Sub
       
       On Error GoTo ErrorHandler
       If Nz(MaBN, 0) = 0 Then
           Me.MaBN = fcTaoMaBN
           DaLuu = "Y"
           DoCmd.RunCommand acCmdSaveRecord
       End If

    Exit_ErrorHandler:
       Exit Sub
       
    ErrorHandler:
       If Err.Number = 3022 Then
          Call XuLyTrungMaBN
          Resume Next
       Else
           MsgBox "Err Number: " & Err.Number & vbCrLf & Err.Description, , "Error: TenBN_AfterUpdate"
       End If
       Resume Exit_ErrorHandler
    End Sub

    Thủ tục xử lý lỗi:

    Mã:
    Private Sub XuLyTrungMaBN()
        Dim I As Integer
        Dim lngMaBN As Long
        
        On Error GoTo ErrorHandler
        lngMaBN = Me.MaBN
        
    TaoLaiMabn:
        lngMaBN = lngMaBN + 1
        If DCount("[MaBN]", "BenhNhan", "[MaBN] = " & lngMaBN) = 0 Then
            Me.MaBN = lngMaBN
            DoCmd.RunCommand acCmdSaveRecord
        Else
            GoTo TaoLaiMabn
        End If
        
    Exit_ErrorHandler:
        Exit Sub
        
    ErrorHandler:
        If Err.Number = 3022 Then
            I = I + 1
            If I < 100 Then
                Resume TaoLaiMabn
            Else
                MsgBox "Loi trung MaBN: vui long lien he Admin!", vbCritical, "Loi!"
            End If
        Else
            MsgBox "Err Number: " & Err.Number & vbCrLf & Err.Description, , "Error: XuLyTrungMaBN"
        End If
        Resume Exit_ErrorHandler
        
    End Sub

    MTNQ đã up lại file ở bài trên bạn tải lại nhé
  • RE: Lỗi trùng mã khách hàng

    MTNQ > 18-06-17, 05:13 PM

    (18-06-17, 11:04 AM)tieu_ngao Đã viết: Cám ơn anh! Có để thể hướng dẫn cách sửa hàm fctaomabn thành dạng text dc ko anh?

    đây:http://www.mediafire.com/file/o2yv1285k5agblr/PK2.rar

    bạn test thử nhé (Lâu rùi không làm Bound Form  014 )
  • RE: Lỗi trùng mã khách hàng

    MTNQ > 18-06-17, 05:22 PM

    (18-06-17, 11:04 AM)MTNQ Đã viết:
    (17-06-17, 09:41 AM)cannguyen Đã viết:
    (17-06-17, 06:35 AM)MTNQ Đã viết: File của bạn đây:
    http://www.mediafire.com/file/my2x1d7x7y4q7gh/PK1.rar

    Cám ơn bạn rất nhiều.
    Hiện tại mình không có máy nên chưa test được. Hi vọng là ok

    MTNQ đã up lại file ở bài trên bạn tải lại nhé

    Do hạn chế của kiểu Long Ingteger nên nếu test file ở năm 2022 trở lên sẽ báo lỗi, theo mình nếu muốn định dạng theo kiểu "năm tháng ngày" thì nên chuyển sang kiểu text
  • RE: Lỗi trùng mã khách hàng

    tieu_ngao > 19-06-17, 09:26 PM

    (18-06-17, 05:13 PM)MTNQ Đã viết:
    (18-06-17, 11:04 AM)tieu_ngao Đã viết: Cám ơn anh! Có để thể hướng dẫn cách sửa hàm fctaomabn thành dạng text dc ko anh?

    đây:http://www.mediafire.com/file/o2yv1285k5agblr/PK2.rar

    bạn test thử nhé (Lâu rùi không làm Bound Form  014 )

    Cám ơn MTNQ nhé. Để mình chạy thử có gì mình hồi âm nha.
  • RE: Lỗi trùng mã khách hàng

    advnamk > 27-06-17, 11:31 PM

    (15-06-17, 02:48 PM)cannguyen Đã viết: Chào các bạn
    Mình cần tạo form Bệnh nhân với yêu cầu Mã khách hàng sắp xếp theo ngày. Cấu trúc Mã BN như sau: Năm+Tháng+Ngày+STT. Ví dụ: 2017061501
    Mình viết lệnh cho sự kiện như sau:

    If [NgayNay] = [NgayTruoc] Then
    L2 = BNCuoi + 1
    Else
    L2 = 1
    End If
    DoCmd.GoToRecord , , acNewRec
    MaBN = Year(NgayDau) & Right(("0" & Month(NgayDau)), 2) & Right(("0" & Day(NgayDau)), 2) & Right(("00" & L2), 2)

    Nhâp 1 máy thì ok nhưng nhập nhiều máy thì lỗi trùng mã bệnh nhân. Nhờ các bạn giúp nhé
    Mình gửi kèm link: https://drive.google.com/open?id=0B7F3oA...HNoeE5nNm8

    Cám ơn các bạn

    Cái vấn đề này mình cũng đã mất nhiều thời gian.
    đây là giải pháp của mình. ban tham khảo nha.
    - Khi nhập phiếu mới. ta cho nó 1 mã số tạm. (tất cả các máy chung 1 mã số vd 20170601000 (Mỗi ngày có thể lập 999 phiếu)
    - Khi nhấn lút lưu ta mới tạo hàm chính thức trong CSDL dùng hàm tìm tất cả các phiếu có chung yyy,mm,dd (viết hàm thì hơi mất công dùng Queries với điều kiện là "yyyymmdd*" cho dễ làm rồi dùng hàm counta + 1 ) Mình cũng cỏ thể tạo 1 Textbox "Tổng Số phiếu đã nhập trong ngày :..." +1 rồi ghép cái yyyymmdd với right("000" & cái counta + 1 này) là ok.
    Chúc bạn thành công.