-
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 String, strDateOfBirth As Date, strGender As String) As String
Dim sName As String
Dim sNowName As String
sNowName = Trim(strName)
sName = Left(sNowName, 1)
Dim i As Integer
For i = 1 To Len(sNowName)
If Mid(sNowName, i, 1) = Space(1) Then
sName = sName & Mid(sNowName, i + 1, 1)
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
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:Mã:Private Sub txtHoTen_AfteUpdate()
Me.txtMaHS = CreateCode(Me.txtHoTen, Me.txtNgaySinh, Me.txtGioiTinh)
End Sub[/quote]
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.