thanhtruong > 02-01-22, 10:36 AM
Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long
Dim datNgay_Max As Date
On Error GoTo ErrorHandler
lngMaBN_Max = Nz(DMax("[maso]", "tiepdon"), 0)
If lngMaBN_Max <> 0 Then
datNgay_Max = Format(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2), "dd/mm/yy")
Debug.Print datNgay_Max
If datNgay_Max >= Date Then
If datNgay_Max > Date Then
MsgBox "Ngay thang tren he thong khong phu hop, vui long lien he Admin ", vbCritical, "Luu y"
End If
lngMaBN_New = lngMaBN_Max + 1
Else
lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
End If
Else
lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
End If
fcTaoMaBN = lngMaBN_New
Exit_ErrorHandler:
Exit Function
ErrorHandler:
MsgBox "Err Number: " & err.Number & vbCrLf & err.description, , "loi tao ma"
Resume Exit_ErrorHandler
End Function
thanhtruong > 02-01-22, 10:39 AM
Else
lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
End If
Else
lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
End If
ongke0711 > 02-01-22, 01:18 PM
thanhtruong > 02-01-22, 02:08 PM
(02-01-22, 01:18 PM)ongke0711 Đã viết: Mặt mũi cái trường [maso] của bạn như thế nào, kiểu dữ liệu, thiết lập Size cho trường này. Bạn cung cấp nhiều dữ liệu để người khác đỡ đoán, mò từ code. Theo như bạn nói thì nó vươt quá sức chứa kiểu Long. Giờ đổi sang kiểu Single/Double thử xem.
ongke0711 > 02-01-22, 02:17 PM
ongke0711 > 02-01-22, 05:16 PM
(02-01-22, 02:35 PM)thanhtruong Đã viết:(02-01-22, 02:17 PM)ongke0711 Đã viết: Đổi trong code luôn nhé.Trong code đâu có thấy chổ nào để đổi đâu nhỉ?
khi chuyển ngày giờ máy tính về năm 2020 hoặc 2019 thì nó vẫn tạo mã bình thường.
lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
lngMaBN_New = 2201020001
Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long
thanhtruong > 02-01-22, 05:25 PM
(02-01-22, 02:17 PM)ongke0711 Đã viết: Đổi trong code luôn nhé.
thanhtruong > 02-01-22, 05:37 PM
(02-01-22, 05:16 PM)ongke0711 Đã viết:(02-01-22, 02:35 PM)thanhtruong Đã viết:(02-01-22, 02:17 PM)ongke0711 Đã viết: Đổi trong code luôn nhé.Trong code đâu có thấy chổ nào để đổi đâu nhỉ?
khi chuyển ngày giờ máy tính về năm 2020 hoặc 2019 thì nó vẫn tạo mã bình thường.
Vấn đề này của bạn thuộc dạng cơ bản là hiểu về DataType của dữ liệu khi thiết lập.
Cái dòng mã dưới đây của bạn nó sinh ra số bao nhiêu?
Mã PHP:lngMaBN_New = Val(Format(Date, "yymmdd") & "0000") + 1
Nếu tôi lấy ví dụ là ngày tháng hôm nay (02/01/2022):
-->Mã PHP:lngMaBN_New = 2201020001
Sức chứa của số Long là bao nhiêu? --> từ -2,147,483,647 đến 2,147,483,647
Vậy không phải cái mã trên bạn tạo nó đã vượt quá khả năng của số Long à.
Khi bạn đổi thành năm 2019, 2020, 2021 thì mã số được tạo ra vẫn trong pham vi của Long: 1912310001,2012310001,2112310001
Trong code của bạn, trong năm 2022, khi tạo ra dãy số trên thì các biến khai báo kiểu Long trong đó sau chứa nổi, nó sẽ báo tràn số "OverFlow" thôi.
Mã PHP:Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long