Noname > 13-08-10, 10:29 PM
Private Sub Form_Current()
‘ Nội dung 4 đáp án liệt kê mỗi lần chuyển sang câu khác
lblTraLoi1.Caption = Me.TraLoi1
lblTraLoi2.Caption = Me.TraLoi2
lblTraLoi3.Caption = Me.TraLoi3
lblTraLoi4.Caption = Me.TraLoi4
grpTraLoi = Me.DapAnDuocChon
End Sub
Private Sub grpTraLoi_Click()
Me.DapAnDuocChon = grpTraLoi ‘ Khi thí sinh chọn đáp án
End Sub
Private Sub cmdChonDe_Click()
Dim db As Database, tbDeThi As Recordset, tbNganHang As Recordset
Dim rsTamThoi As Recordset
Dim nSoLuongCau As Byte, I As Byte, sSQL As String
Dim nTongSoCauTrongNH As Long, nSoNgauNhien As Long
nSoLuongCau = 30 ' Giả sử 30 câu
Set db = CurrentDb
' Tạm thời không kiểm tra trường hợp số lượng câu hỏi cần chọn có lớn hơn
' hay bằng tổng số câu trong ngân hàng đề thi không
Set tbNganHang = db.OpenRecordset("NganHangCauHoi")
tbNganHang.MoveFirst
If tbNganHang.EOF Then
MsgBox "Không có câu hỏi trong ngân hàng dữ liệu đề thi !"
tbNganHang.Close
db.Close
Exit Sub
End If
' Xóa đề trước đó
sSQL = "DELETE * FROM DeThiVaKetQua;"
db.Execute sSQL
' Tính tổng số câu hỏi trong ngân hàng đề thi
sSQL = "SELECT Max(SoThuTu) AS TongSoCauHoi FROM NganHangCauHoi"
Set rsTamThoi = db.OpenRecordset(sSQL)
rsTamThoi.MoveFirst
nTongSoCauTrongNH = rsTamThoi!TongSoCauHoi
rsTamThoi.Close
Set tbDeThi = db.OpenRecordset("DeThiVaKetQua")
' Tạo đề mới
tbNganHang.Index = "SoThuTu"
For I = 1 To nSoLuongCau
Do While True
nSoNgauNhien = Int((nTongSoCauTrongNH * Rnd) + 1) ‘ Chọn số thứ tự ngẫu nhiên
tbNganHang.Seek "=", nSoNgauNhien
If Not tbNganHang.NoMatch Then ' chắc chắn tìm thấy
If Not tbNganHang!DaDuocChon Then ' Câu này chưa chọn
tbDeThi.AddNew
tbDeThi!SoThuTu = I
tbDeThi!NoiDung = tbNganHang!NoiDung
tbDeThi!TraLoi1 = tbNganHang!TraLoi1
tbDeThi!TraLoi2 = tbNganHang!TraLoi2
tbDeThi!TraLoi3 = tbNganHang!TraLoi3
tbDeThi!TraLoi4 = tbNganHang!TraLoi4
tbDeThi!DapAnDung = tbNganHang!DapAnDung
tbDeThi!DapAnDuocChon = 0
tbDeThi.Update
' Đánh dấu đã chọn câu này để đưa vào bộ đề thi rồi
tbNganHang.Edit
tbNganHang!DaDuocChon = True
tbNganHang.Update
Exit Do
End If
End If
Loop
Next
tbDeThi.Close
' Đánh dấu chưa được chọn đối với các câu hỏi trong ngân hàng đề thi
tbNganHang.Close
sSQL = "UPDATE NganHangCauHoi SET DaDuocChon = False WHERE DaDuocChon = True"
db.Execute (sSQL)
db.Close
' Bộ đề mới đã tạo xong, hiển thị lại trên biểu mẫu
Me.Requery
SoThuTu.SetFocus ‘ Để có thể disable nút Chọn đề
cmdChonDe.Enabled = False ‘ Không cho chọn đề khác nữa
End Sub
Private Sub cmdKetQua_Click()
Dim nTongDiem As Byte, rs As Recordset
Set rs = Me.Recordset
nTongDiem = 0
With rs
.MoveFirst
While Not .EOF
nTongDiem = nTongDiem + IIf(!DapAnDuocChon = !DapAnDung, 1, 0)
.MoveNext
Wend
.MoveFirst
End With
MsgBox "Tổng số điểm đạt được là: " & nTongDiem, vbInformation, Me.Caption
Set rs = Nothing
End Sub
haquocquan > 18-11-10, 12:46 PM
Noname > 18-11-10, 12:54 PM
nguyenbalai > 05-01-11, 08:36 PM
nguyenbalai > 07-01-11, 08:54 PM
ngocduc003 > 09-05-11, 12:12 AM
quanghoasla > 23-05-11, 04:13 PM
huynguyenbd > 31-10-11, 03:32 PM
huonglan12 > 22-11-12, 12:11 AM
huonglan12 > 26-11-12, 10:22 AM