Thắc mắc: Để sắp xếp phòng thi cho học sinh, tôi dùng hai bảng trong Access: table1 có hai cột PHONGTHI và SOLUONG, table2 có các cột SBD, HOTEN, MONTHI, PHONGTHI. Tôi muốn gán tên phòng thi ở table1 vào tên phòng thi ỏ table2 với điều kiện: những học sinh có cùng môn thi thì ở chung phòng thi và số học sinh không được quá số lượng trong table1, nếu vượt quá số lượng thì cho qua phòng kế tiếp. Xin hướng dẫn.
Kinh nghiệm:
Ví dụ sau đây dựa trên hai bảng có tên tbDSPhongThi (vai trò như table1 của bạn) và tbDSThiSinh (vai trò như table2 của bạn), trong đó field PhongThi của tbDSPhongThi có thuộc tính Index là Yes (No Duplicates) (không phải là Primary Key), và field MonThi của tbDSThiSinh cũng có thuộc tính Index là Yes (No Duplicates). Việc tạo index chỉ để sắp thứ tự các thí sinh của cùng môn thi vào một nhóm, cũng như sắp thứ tự phòng thi theo tên.
Trên form bạn vẽ một nút lệnh có tên cmdSapXepPhongThi, rồi gõ đoạn mã 2 vào thủ tục xử lý tình huống Click.
Căn cứ vào ví dụ này, bạn có thể áp dụng vào nhu cầu thực tế của mình. Bạn lưu ý: để sử dụng các đối tượng Database và Recordset, trong cửa sổ soạn thảo VBA, bạn chọn Tools > References, rồi chọn mục Microsoft DAO 3.6 Object Library (hoặc phiên bản cao nhất của DAO Object Library) trong hộp thoại References.
Đoạn mã 2
Private Sub cmdSapXepPhongThi_Click()
Dim db As Database, rsDSPhongThi As Recordset, rsDSThiSinh As Recordset
Dim sMonThi As String, nSoLuongHienHanh As Byte
Set db = CurrentDb
Set rsDSPhongThi = db.OpenRecordset("tbDSPhongThi")
Set rsDSThiSinh = db.OpenRecordset("tbDSThiSinh")
rsDSPhongThi.Index = "PhongThi" " Không phải Primary key, chỉ để sắp thứ tự
rsDSPhongThi.MoveFirst
rsDSThiSinh.Index = "MonThi" " Không phải Primary key, chỉ để sắp thứ tự
With rsDSThiSinh
nSoLuongHienHanh = 0
.MoveFirst
sMonThi = !MonThi
Do While Not .EOF
If !MonThi <> sMonThi Then " Sang môn thi khác
rsDSPhongThi.MoveNext " Sang phòng thi khác
If rsDSPhongThi.EOF Then " Hết phòng
MsgBox "Hết phòng thi rồi!"
Exit Do
End If
nSoLuongHienHanh = 0
sMonThi = !MonThi
End If
If nSoLuongHienHanh >= rsDSPhongThi!SoLuong Then " Het cho
rsDSPhongThi.MoveNext " Sang phòng thi khác
If rsDSPhongThi.EOF Then " Hết phòng
MsgBox "Hết phòng thi rồi!"
Exit Do
End If
nSoLuongHienHanh = 0
End If
.Edit
!PhongThi = rsDSPhongThi!PhongThi
.Update
nSoLuongHienHanh = nSoLuongHienHanh + 1
.MoveNext
Loop
End With
rsDSThiSinh.Close
rsDSPhongThi.Close
db.Close
End Sub
echip
3Cdotcom “Advance Hosting - Hiệu quả cho doanh nghiệp” www.hosting.net.vn
