1 post / 0 new
Sắp xếp phòng thi bằng Access
Tin này đã cũ, không liên hệ người đăng

access.jpgThắ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

hot1.gif 3Cdotcom   Advance Hosting - Hiệu quả cho doanh nghiệp” www.hosting.net.vn


Theo_http://3c.com.vn/Story/vn/34330.html

Chữ ký: Chưa cài đặt
  • Tin cũ hơn 30/08/2009

  • Đề xuất cấm hàng rong trên 62 tuyến phố >> xem (30/08/2009 15:08)
  • ADSL Router - Wi-Fi cho tất cả >> xem (30/08/2009 15:08)
  • Năm học 2008 - 2009: Thay sách lớp 12 trên toàn quốc >> xem (30/08/2009 15:08)
  • 678 Câu hỏi về PC >> xem (30/08/2009 15:08)
  • Làm sao để down Sách dạng Flash >> xem (30/08/2009 15:08)
  • Không vào được web >> xem (30/08/2009 15:08)
  • Tra cứu từ điển không cần Lạc Việt >> xem (30/08/2009 15:08)
  • W890i: "Dế" nhạc mới của Sony Ericsson >> xem (30/08/2009 15:08)
  • Mạng nội bộ >> xem (30/08/2009 15:08)
  • Cách diệt Virus Trojan.Clampi >> xem (30/08/2009 15:08)