ongke0711 > 01-10-18, 12:52 PM
(01-10-18, 12:22 PM)bằng lăng Đã viết: Sao số phòng thi nó chạy không đúng bác ongke0711, ở mã 01 khu vực 1 nó đánh phòng 1, 2 rồi qua kv 2 nó lại đánh số phòng là 24, 25 chứ không phải 3, 4
bằng lăng > 01-10-18, 02:50 PM
(01-10-18, 12:52 PM)ongke0711 Đã viết:(01-10-18, 12:22 PM)bằng lăng Đã viết: Sao số phòng thi nó chạy không đúng bác ongke0711, ở mã 01 khu vực 1 nó đánh phòng 1, 2 rồi qua kv 2 nó lại đánh số phòng là 24, 25 chứ không phải 3, 4
Code của tôi là theo mã khu vực trước rồi tới mã môn: tức là xử lý xong hết mã môn của khu vực 1 rồi xử lý tiếp khu vực 2. Nếu theo mã môn trước rồi tới mã khu vực thì tổng số phòng cũng giống nhau.
ongke0711 > 01-10-18, 05:09 PM
bằng lăng > 01-10-18, 06:04 PM
(01-10-18, 05:09 PM)ongke0711 Đã viết: Vậy cùng 1 môn, khác khu vực có dồn vô chung 1 phòng không? Tức là có truờng hợp một phòng có thí sinh của 2, 3 khu vực không?
ongke0711 > 01-10-18, 09:20 PM
Private Sub cmdphongthi_Click()
On Error GoTo ErrHandler
Dim rsMaMon As DAO.Recordset
Dim rsDisplay As DAO.Recordset
Dim rsKhuVuc As DAO.Recordset
Dim soTSLop, soRec As Integer
Dim TongSoPhongThi, SoPhongThi, soTSPhanBo, stt, i As Integer
soTSLop = CInt(Me.txtsots)
Set rsKhuVuc = CurrentDb.OpenRecordset("SELECT tblDisplay.khuvuc " & _
"FROM tblDisplay " & _
"GROUP BY tblDisplay.khuvuc", dbOpenSnapshot)
Set rsMaMon = CurrentDb.OpenRecordset("tblmamon", dbOpenSnapshot)
If rsKhuVuc.EOF Or rsKhuVuc.BOF Then Exit Sub 'Không có du lieu'
If rsMaMon.EOF Or rsMaMon.BOF Then Exit Sub 'Không có du lieu'
TongSoPhongThi = 0
SoPhongThi = 0
rsMaMon.MoveFirst
Do Until rsMaMon.EOF
rsKhuVuc.MoveFirst
Do Until rsKhuVuc.EOF
Set rsDisplay = CurrentDb.OpenRecordset("SELECT * FROM tblDisplay WHERE khuvuc='" & rsKhuVuc!khuvuc & "' AND mamon ='" & rsMaMon!Mamon & "'")
If rsKhuVuc.EOF Or rsKhuVuc.BOF Then GoTo NextKhuVuc
With rsDisplay
.MoveLast
.MoveFirst
soRec = .RecordCount
If soRec \ soTSLop = 0 Then 'TH1: So thí sinh ít hon so thí sinh phân bo/phòng -> 1 phòng'
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
GoTo NextKhuVuc
End If
If soRec Mod soTSLop = 0 Then 'TH2: So thi sinh chia deu het cho cac phong thi'
TongSoPhongThi = soRec \ soTSLop
For i = 1 To TongSoPhongThi
stt = 1
SoPhongThi = SoPhongThi + i
Do Until .EOF Or stt > soTSLop
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
Next i
GoTo NextKhuVuc
End If
If soRec Mod soTSLop > 0 Then 'TH3: So thi sinh khong chia het cho cac phong thi'
TongSoPhongThi = soRec \ soTSLop - 1 'Tru bot 1 phong de chia 2 phong cuoi'
soTSPhanBo = ((soRec Mod soTSLop) + soTSLop) \ 2 'Phan bo 1/2 truoc, phan con lai chay den EOF'
If TongSoPhongThi > 0 Then
For i = 1 To TongSoPhongThi
stt = 1
Do Until stt > soTSLop
.Edit
!Phong = SoPhongThi + i
.Update
stt = stt + 1
.MoveNext
Loop
Next i
SoPhongThi = SoPhongThi + i
Debug.Print SoPhongThi
stt = 1
Do Until stt > soTSPhanBo Or .EOF
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
Else
stt = 1
SoPhongThi = SoPhongThi + 1
Do Until stt > soTSPhanBo Or .EOF
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
End If
End If
End With
NextKhuVuc:
rsKhuVuc.MoveNext
Loop
rsMaMon.MoveNext
Loop
rsKhuVuc.Close
rsMaMon.Close
Set rsKhuVuc = Nothing
Set rsMaMon = Nothing
ErrHandler_Exit:
Exit Sub
ErrHandler:
MsgBox "Ma Loi: " & Err.Number & vbCrLf & "Dien Giai: " & Err.Description
Resume ErrHandler_Exit
End Sub
NguyenDungAnh > 02-10-18, 10:59 AM
duynamvnn1208 > 02-10-18, 12:07 PM
ongke0711 > 02-10-18, 12:12 PM
(02-10-18, 10:59 AM)NguyenDungAnh Đã viết: em thấy nhiều người hay dùng errhandler nó có nghĩa là gì hả bác
NguyenDungAnh > 02-10-18, 05:59 PM
ongke0711 > 02-10-18, 07:22 PM
(02-10-18, 05:59 PM)NguyenDungAnh Đã viết: Quay trở về n bản ghi xong bắt đầu đánh số phòng tiếp
có cách nào để mình quay về n bản ghi luôn không hay phải dùng vòng lặp
ví dụ em dùng
for i =1 to n
rs2.previous
next