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