Danh sách được sắp xếp ngẩu nhiên

phatnq2002

Tích cực giảm cân...
Hội viên mới
Có một bạn hỏi tôi về cách làm thế nào để sắp xếp một danh sách có sẵn theo thứ tự ngẩu nhiên: Lần đầu có thể thế này, lần sau lại khác đi.
Tôi đã hướng dẫn cho bạn đó thực hiện. Theo tôi đây cũng là vấn đề mà một số bạn cũng quan tâm, thế nên tôi public một bài cơ bản về vấn đề này cho các bạn ngâm nhé.

Giả sử có một table DanhsachNhanVien (nhanvien_ma, nhanvien_hoten, ...)
Tôi tạo một cái table tạm đặt tên DanhSachNgauNhien (stt, nhanvien_ma, nhanvien_hoten)
 
Sửa lần cuối:
Ðề: Danh sách được sắp xếp ngẩu nhiên

Sao ko hdẫn nốt đi chứ bác?
 
Ðề: Danh sách được sắp xếp ngẩu nhiên

Bác nên post bài access bác đang làm nên để anh em nghiên cứu cái, bác hướng dẫn em đọc đi đọc lại rốt cục chẳng hiểu các gì cả
 
Ðề: Danh sách được sắp xếp ngẩu nhiên

Bác nên post bài access bác đang làm nên để anh em nghiên cứu cái, bác hướng dẫn em đọc đi đọc lại rốt cục chẳng hiểu các gì cả

Xin lỗi các bạn. Cái này không phải do tôi không đưa hết nội dung lên.
Tôi đã cố gắng đưa nhưng tôi không rõ forum có vấn đề gì không mà toàn bộ bài của tôi không thể đăng được, chỉ đưa được có nhiêu đó mà thôi.

Tôi vẫn đang cố gắng đưa lại đây.
-----------------------------------------------------------------------------------------
Công việc sẽ làm là sẽ tạo một thủ tục thực hiện những phần việc sau:
- Đọc dữ liệu của DanhSachNhanVien vào một mảng có số dòng = số record của DanhSachNhanVien và số cột = 3 chứa mã số, họ tên, stt.
- Dùng Randomize để gán một số ngẩu nhiên không trùng lặp vào cột chứa stt của mỗi dòng trên mảng.
- Xoá dữ liệu hiện có trong DanhSachNgauNhien và đưa dữ liệu từ mảng đã tạo vào DanhSachNgauNhien.
- Trên một form có 1 listbox, 2 nút lệnh: một nút để sắp xếp, một nút cho lấy lại thứ tự vật lý của danh sách. Gán các lệnh thích hợp cho 2 nút lệnh này.
-----------------------------------------------------------------------------------------
Sau đây là nội dung của thủ tục mà tôi đề cập. Thủ tục này tôi sẽ đặt trong một module dùng chung. Nếu muốn các bạn cũng có thể đặt trong form module chứa listbox và nút lệnh cũng được, nhưng khi đó bạn đổi lại từ khoá Private thay vì Public.
-----------------------------------------------------------------------------------------
Public Sub SapXepNgauNhien ()
Dim rs As DAO.Recordset
Set rs = CurrentDB.OpenRecordset("DanhSachNhanVien", dbOpenSnapshot)
On Error Resume Next
rs.MoveLast
rs.MoveFirst
On Error Goto 0
If rs.RecordCount = 0 Then
MsgBox "Co du lieu dau ma sap xep"
Set rs = Nothing
Exit Sub
End If
-----------------------------------------------------------------------------------------
Dim sorecord As Integer
sorecord = rs.RecordCount
ReDim mang(sorecord - 1, 2) ' Do phần tử đầu tiên có chỉ số là 0 và nhớ ReDim chứ không là Dim, vì Dim không cho dùng biến trong xác định số phần tử
Dim i As Integer, j As Integer, songaunhien As Integer, coroi As Boolean
-----------------------------------------------------------------------------------------
' Đổ dữ liệu ra mảng
i = 0
Do While Not rs.EOF
mang(i, 0) = rs("nhanvien_ma")
mang(i, 1) = rs("nhanvien_ten")
mang(i, 2) = 0
i = i + 1
rs.MoveNext
Loop
Set rs = Nothing
-----------------------------------------------------------------------------------------
' Tạo số ngẩu nhiên đưa vào mảng
Randomize
For i = 0 to sorecord - 1
Do While True
coroi = False
songaunhien = CInt(sorecord * Rnd) + 1
-----------------------------------------------------------------------------------------
If i = 0 Then
Exit Do
Else
For j = 0 to i - 1 ' Bảo đảm số không bị trùng lặp
If mang (j, 2) = songaunhien Then
coroi = True
Exit For
Next
End If
If coroi Then Exit Do
Loop
mang(i, 2 = songaunhien
Next
-----------------------------------------------------------------------------------------
' Xoá dữ liệu hiện có trong danh sách ngẩu nhiên
CurrentDB.Execute "DELETE * FROM DanhSachNgauNhien"
-----------------------------------------------------------------------------------------
' Insert vào danh sách ngẩu nhiên
CurrentDb.Execute "INSERT INTO DanhSachNgauNhien (nhanvien_ma, nhanvien_hoten, stt) VALUES ('" & mang(i, 0) & "', '" & mang(i, 1) & "', " & mang(i, 2) & ")"
End Sub

Xong phần thủ tục rồi đó. Các bạn có thấy các gạch trong bài của tôi không? Đó là tôi phải chăm chỉ gõ từng khúc vào rồi post. Những đường gạch đó là forum tạo ra để Auto Merge bài tôi gửi lại đó. Do vậy xin các bạn cũng nên thông cảm cho tôi với, đừng "nặng lời" mà tủi thân tôi. :sweatdrop:
-----------------------------------------------------------------------------------------
Tạo một form có:
ListBox: Name: lstNhanVien, Column Count: 2, Column Widths: 1"; 3" (tuỳ ý nhé, chỉ đề nghị thôi), RowSource: SELECT nhanvien_ma, nhanvien_hoten FROM DanhSachNhanVien
Command button 1: Name: cmdSort
Command button 2: Name: cmdRemoveSort
 
Sửa lần cuối:

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top