• Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    bomnhauag > 28-04-13, 09:10 PM

    ^^ sẵn bàn thì bàn luôn. mình thấy cách dùng ký tự đầu tên như vậy cũng hay nhưng gặp trường hợp tên Ánh, Ân, Định, Được... thì mã tạo ra không đẹp lắm.

    Hơn nữa, khi người nhập gõ bằng font này, người kiếm lỡ gõ bằng font khác thì toi, trong trường hợp gặp mấy cái tên như vậy.
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    vulhu06 > 02-08-13, 04:21 PM

    Em cũng thấy việc tạo mã này hay, vô tình lang thang tìm tòi thấy bài viết này, kiến thức nông cạn nên mạnh phép hỏi anh Xuan Thanh là, function createcode đặt ở sự kiện nào, hay nút lệnh nào trong form nhập một học sinh, hoặc 01 nhân viên ??? Xin chỉ giáo
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    vulhu06 > 09-08-13, 08:40 AM

    (24-04-13, 12:31 PM)Xuân Thanh Đã viết: Khi thiết kế các chương tình quản lý Học viên, Hộ khẩu, Nhân sự...ta thường phải tạo Mã cho Học viên, Nhân Khẩu, Nhân viên... Có nhiều cách tạo mã cho các trường hợp này. Xin giới thiệu với các bạn hàm CreateCode mà tôi hay sử dụng. Hàm này dựa vào khai báo Họ Tên, Ngày Sinh, Giới tính để tạo Mã
    1/ Lấy các chữ cái đầu của Họ tên để tạo ra thành phần HOTEN
    Ví dụ : Nguyễn Văn Thanh thì HOTEN = NVT, Trần Thị Mộng Hoài thì HOTEN = TTMH
    2/ Lấy Năm của Ngày sinh, Tháng của Ngày Sinh(2 số), Ngày của Ngày Sinh(2 số) ghép lại tạo thành NGAYSINH
    Ví dụ Ngày sinh = 15/11/1958 thì NGAYSINH = 19581115, Ngày sinh = 3/7/1965 thì NGASINH = 19650703
    3/ Lấy Giới tính tạo ra GIOITINH
    Ví dụ Giới tính = Nam thì GIOITINH = M, Giới tính = Nữ thì GIOITINH = F
    Và CreateCode = HOTEN & NGAYSINH & GIOITINH
    Ví dụ Nhân viên Trần Thị Mộng Hoài, sinh 3/7/1965, giới tính nữ thì Mã Nhân Viên sẽ là NTMH19650703F
    Với cách tạo mã tự sinh như thế này thì trong một bộ hồ sơ ít xảy ra trường hợp bị trùng Mã
    Mời các bạn tham khảo hàm CreateCode

    Mã PHP:
    Function CreateCode(strName As StringstrDateOfBirth As DatestrGender As String) As String
        Dim sName 
    As String
        Dim sNowName 
    As String
        sNowName 
    Trim(strName)
        
    sName Left(sNowName1)
        
    Dim i As Integer
        
    For 1 To Len(sNowName)
            If 
    Mid(sNowNamei1) = Space(1Then
                sName 
    sName Mid(sNowName11)
            
    End If
        
    Next
        Dim sDate 
    As String
        sDate 
    Year(strDateOfBirth) & Right("0" Month(strDateOfBirth), 2) & Right("0" Day(strDateOfBirth), 2)
        
    Dim sGender As String
        sGender 
    IIf(strGender "Nam""M""F")
        
    CreateCode sName sDate sGender
    End 
    Function 

    Chúc các bạn vui
    Thân mến

    Chào Anh Xuan Thanh, em cũng đang tìm code tạo mã tự động, may quá gặp bài viết này. Có một số vấn đề xin chỉ giáo
    1. Như ta đã biết thì Mã hocsinh, manv,... được chỉ định làm khóa chính trong table, vậy thì khi nhập liệu thì phải nhập field này trước, nếu thế thì làm gì đã có hoten, ngaysinh để có cơ sở tạo mahv,manv được
    2. Code này là hàm tự tạo, vậy ta sẽ đặt vào đâu, sự kiện nào để cập nhật?
    Xin cảm ơn anh
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    Xuân Thanh > 11-08-13, 01:10 PM

    1/ Table tblHocSinh gồm MaHS, HoTen, NgaySinh, GioiTinh.....
    2/ Tạo Form nhập liệu lấy nguồn từ table này, không nhập trực tiếp vào txtMaHS
    3/ Các Event AfteUpdate của các txtHoTen, txtNgaySinh, txt GioiTinh gọi hàm CreateCode như sau

    Mã:
    Private Sub txtHoTen_AfteUpdate()
        Me.txtMaHS = CreateCode(Me.txtHoTen, Me.txtNgaySinh, Me.txtGioiTinh)
    End Sub

    Thân mến
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    nguyendinhvinh0410 > 25-02-14, 11:49 AM

    Mình làm không ra bạn ạ, mong được chỉ giáo cụ thể.
    Mình làm theo thứ tự sau:
    1/ Mình chọn Modules, kích New để mở một modules mới, lưu lại với tên CreateCode
    2/ Sau đó tạo Table tblHocSinh gồm MaHS, HoTen, NgaySinh, GioiTinh.....
    3/ Tạo Form nhập liệu lấy nguồn từ table này, không nhập trực tiếp vào txtMaHS
    4/ Các Event AfteUpdate của các txtHoTen, txtNgaySinh, txt GioiTinh gọi hàm CreateCode như sau
    Mã:
    Private Sub txtHoTen_AfteUpdate()
        Me.txtMaHS = CreateCode(Me.txtHoTen, Me.txtNgaySinh, Me.txtGioiTinh)
    End Sub[/quote]
    5/ Mở form đã tạo bước 4 ở chế độ View. Ô Mahs mình không điền, ô hoten mình điền thì nó báo lỗi như hình:

    [Hình: 58810417.untitled.png]

    Mong XuanThanh giúp đỡ!
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    tranthanhan1962 > 03-11-14, 04:46 AM

    Tạo mã như bạn bomnhauag nói không cần phải liên tục rất đúng, nhưng nếu sử dụng right("00000" & id, 5) thì vần có thể bị trùng. Ví dụ Học sinh có ID=1 và học sinh có ID=100001 sẽ có cùng mã là HS00001. Cách tạo mã của bạn Xuân Thanh có cái hay riêng nhưng nếu gặp phải hai người có tên trùng hợp lại trùng ngày sinh như: Nguyễn Văn Minh và Nguyễn Văn Mạnh trùng ngày sinh có STT=1 và STT=100001 cũng vẫn bị trùng. Trước giờ tôi có cách tạo mã không bao giờ bị trùng là thêm phía trước Format(Now(),"yyyymmddhhnnss"). Tức là ghép vào năm, tháng, ngày, giờ, phút... khi nhập. Ví dụ khi nhập tên đối tượng HS lúc 10g15'28" ngày 1/1/2014 mã học sinh đó sẽ là "20040101101528HS" thứ tự sắp xếp của mã này vẫn theo thứ tự nhập dữ liệu. Có một điều khi tôi viết mã là Format(Now(),"YYYYMMDDhhmmss"). M=tháng, m=phút thì Access tự động đổi thành Format(Now(),"yyyymmddhhnnss") =>n =phút. Chả hiểu ra sao cả. chắc nó sợ bị hiểu nhằm m là month chứ không phải là minute. Riêng phần STT thường thì khi nào xuất ra report cần sắp xếp theo tên, họ, ngày sinh thì xử lý sau. Có nếu muốn có trường thứ tự cho đẹp Form hay dùng vào việc gì thì viết code cho event Unload của form

    Private Sub Form_Unload(Cancel As Integer)
    Dim DANHSACHHOCSINH As Recordset
    Dim TT As Integer

    Set DANHSACHHOCSINH = Me.RecordsetClone
    TT = 1
    DANHSACHHOCSINH.MoveFirst
    Do While Not DANHSACHHOCSINH.EOF
    DANHSACHHOCSINH.Edit
    DANHSACHHOCSINH![SOTHUTU] = TT
    TT = TT + 1
    DANHSACHHOCSINH.Update
    DANHSACHHOCSINH.MoveNext
    Loop
    DANHSACHHOCSINH.Close

    End Sub

    Khi nào Close form SOTHUTU sẽ được tạo lại liên tục dù có record bị xóa
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    Minh Tiên > 03-11-14, 04:35 PM

    Chào cả nhà !
    1. Tiên cũng đã làm theo cách tương tự "tranthanhan1962". Tạo mã tự động theo 1 quy luật nào đó bất kể miễn không trùng mã.
    2. Khi cần hiển thị theo Stt thì tạo Stt, có thể tạo Stt trong Query (Như bài A.Noname đã hướng dẫn trên diễn đàn) hoặc tạo bằng Code như "tranthanhan1962".

    Theo Tiên thì nên tạo Stt trong Query thuận tiện hơn, nếu tạo code như "tranthanhan1962" thì đối với table có số record ít chứ với table có số lượng record nhiều nhiều thì tốn nhiều thời gian nhâm nhi coffee.
    Như thế đỡ phải đau cái đầu về việc quản lý mã có liên tục hay ko liên tục.
    Thân chào !
  • RE: Hàm tạo Mã (dùng cho Học Sinh, Sinh Viên, Cán Bộ, Hộ Khẩu....)

    tranthanhan1962 > 04-11-14, 12:25 AM

    Đồng ý với bạn Minh Tiên. Thông thường STT khi nào xuất ra Report mình mới tạo 1 textbox sử dụng thuộc tính data running sun cho nó sắp xếp chứ không tạo field STT cho nặng nề. Còn ở Form chỉ cần tạo 1 textbox = CurrentRecord và 1 textbox = RecordCount cho nó nhẹ nhàng. Còn code làm STT nêu trên mình chỉ làm khi cần thiết làm tham số xử lý này nọ cho nó nhẹ hơn khi sử dụng mã làm tham số. Bởi vì bản thân nó cũng gần giống mã vì STT này cũng không trùng. Vã lại code này được xử lý khi close Form nên sự chờ đợi cũng không đáng là bao.