• Thứ Năm, 20/11/2008 15:03 (GMT+7)

    Lập trình sinh mã tự động

    Câu hỏi :
    Tôi có 3 bảng dữ liệu Access sau:
     - HSDT bao gồm các trường: Mã HSDT, ten KH, dia chi ...
     - CVDT bao gồm các trường: Mã HSDT, Mã CV , ngày lập,...
     - SLDT bao gồm các trường: Mã CV, ten sp, so luong, don gia ...
     Tôi muốn đánh số tự động cho Mã CV ví dụ như :
     Mã HSDT là 001.07/HSDT thì Mã CV sẽ là 001.07-01, 001.07-02, ...
     Mã HSDT là 002.07/HSDT thì Mã CV sẽ là 002.07-01, 002.07-02, ...
     Đề nghị hướng dẫn.
      

    Trả lời :
    Yêu cầu đánh số tự động cho mã CV đã rõ ràng, vậy bạn hãy phân tích yêu cầu và viết code thực hiện yêu cầu đó. Thí dụ bạn có thể dùng 1 array chứa N record, mỗi record lưu cặp dữ liệu (chuỗi nhận dạng mã HSDT, chỉ số mã CV đã dùng lần cuối tương ứng). Mỗi lần cần tạo mã CV mới cho 1 record CVDT, bạn duyệt tìm trong array record quản lý mã HSDT tương ứng, rồi lấy chỉ số mã CV đã dùng lần cuối tương ứng, tăng 1 đơn vị rồi dùng giá trị này cho record CVDT mới của bạn.

    Cụ thể đoạn code VBA sau cho phép tạo mã CV tự động theo mã HSDT:
     
     Option Compare Database
     ‘định nghĩa kiểu cần dùng
     Private Type HSDTRec
     HSDT As String
     CV As Integer
     End Type
     
     ‘định nghĩa biến cần dùng
     Dim idx As Integer
     Dim lstHSDT(0 To 200) As HSDTRec
     
     ‘khởi động trị ban đầu cho các biến
     Private Sub Form_Load()
     idx = -1
     End Sub
     
     ‘hàm tạo tự động mã CV
     Private Function TaoMaCV(HSDT As String)
     Dim maHSDT As String
     ‘lấy chuỗi bên trái dấu /
     maHSDT = Left(HSDT, InStr(1, HSDT, "/", vbBinaryCompare) - 1)
     ‘tìm xem có trong danh sách quản lý chưa
     For i = 0 To idx
     If maHSDT = lstHSDT(i).HSDT Then
     ‘nếu có rồi thì lấy chỉ số đang quản lý+1
     lstHSDT(i).CV = lstHSDT(i).CV + 1
     TaoMaCV = maHSDT & "-" & lstHSDT(i).CV
     Exit Function
     End If
     Next i
     ‘nếu chưa có, tạo mới 1 record quản lý với chỉ số bắt đầu = 1
     idx = idx + 1
     lstHSDT(idx).HSDT = maHSDT
     lstHSDT(idx).CV = 1
     TaoMaCV = maHSDT & "-" & lstHSDT(idx).CV
     End Function
    Chuyên mục: Lập trình