Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Giúp] chuyễn đoạn code sau theo vòng lặp For
#1
em có đoạn code để ghi mã lớp sau:
Mã:
Public Sub Lopvh()
Dim rs As DAO.Recordset


DoCmd.SetWarnings False

Set rs = CurrentDb.OpenRecordset("TableTemp", dbOpenDynaset)
rs.MoveFirst
i = 1
If Not rs.BOF And Not rs.EOF Then
      
      Do Until rs.EOF
            rs.Edit
                  If i > 0 And i <= 45 Then
                      rs![Lopvh] = Me.TXT_LOP & "1" & Year(Date)
                  ElseIf i > 45 And i <= 90 Then
                      rs![Lopvh] = Me.TXT_LOP & "2" & Year(Date)
                  ElseIf i > 90 And i <= 135 Then
                      rs![Lopvh] = Me.TXT_LOP & "3" & Year(Date)
                  ElseIf i > 135 And i <= 180 Then
                      rs![Lopvh] = Me.TXT_LOP & "4" & Year(Date)
                  End If
             i = i + 1
                  
             rs.Update
             rs.MoveNext
       Loop
End If
rs.Close
Set rs = Nothing

Me.Refresh


End Sub
đoạn code trên chạy đc rồi nhưng nếu có mấy nghìn học sinh thì chẳng lẽ lại viết mấy chục dòng if nên nó cồng kềnh quá với lại không khoa học nữa,
giờ em muốn chuyển qua hàm For chạy từ i tới n, với n là tổng số học sinh.
Các số "1","2","3"... là bội của 45 nhưng không quá tổng số học sinh.
ví dụ:
em có 1800 học sinh cần xếp lớp
n = 1800
k = 40

thì mã lớp là :
HS từ 1 - 45 : A1
HS từ 46 - 90 : A2
...
HS từ 1755 - 1800: A40

còn đây là cái em viết: chạy xong treo Access luôn Confused_smile
Mã:
Public Sub Lopvh1()
Dim rs As DAO.Recordset
Dim k, i, N As Integer
DoCmd.SetWarnings False

Set rs = CurrentDb.OpenRecordset("TableTemp", dbOpenDynaset)
  
rs.MoveFirst
i = 1
k = 1
N = Me.Text60 ' tong so hoc sinh
If Not rs.BOF And Not rs.EOF Then
      
      Do Until rs.EOF
            For i = 1 To N
                If k <= Round(N / 45, 0) Then
                    rs.Edit
                        rs![Lopvh] = Me.TXT_LOP & k & Year(Date)
                End If
                    i = i + 1
                    k = k + 1
                    rs.Update
                    rs.MoveNext
                Next i
                
       Loop
      
      
End If


rs.Close
Set rs = Nothing

Me.Refresh


End Sub
Demo file của em đây: http://www.mediafire.com/?3134sbgek1d7i1b
GIÚP EM SỬA VỚI NHÉ. CÁM ƠN MỌI NGƯỜI ĐÃ DỌC TIN.60_6060_60
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
Có nhiều cách. Đây là cách mà gợi ý bạn.
Dowload file và xem code trong MODULE1


File đính kèm
.zip   DEMO FOR.zip (Kích cỡ: 339.22 KB / Tải về: 85)
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dieuchinhlu
#3
Anh Quân ơi, làm dưới 45 hs thì add vô đc rồi, còn trên 45 thì nó không add đc, nó để trống luôn..
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
Bạn xem TableTemp trong file mình post. Mình đã cho TableTemp trên 45 rồi đó. Vẫn chạy được mà. Bạn chạy trực tiếp module1 (Sub Xeplop) sẽ thây: ---> 276 SV, chia thành 7 lớp, trong đó lớp 7 chỉ có 6 SV. Nếu bạn không chạy được, post file bạn làm lên để mình xem (nêu rõ code ở đâu nhé)
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dieuchinhlu
#5
(15-06-11, 03:37 PM)haquocquan Đã viết: Bạn xem TableTemp trong file mình post. Mình đã cho TableTemp trên 45 rồi đó. Vẫn chạy được mà. Bạn chạy trực tiếp module1 (Sub Xeplop) sẽ thây: ---> 276 SV, chia thành 7 lớp, trong đó lớp 7 chỉ có 6 SV. Nếu bạn không chạy được, post file bạn làm lên để mình xem (nêu rõ code ở đâu nhé)

em call cái Xeplop1234 ở nút đồng ý lun., chỉ chạy mỗi cái module1 thôi. mà cũng hem ra luôn.
chắc tại lúc mở form F_XEPLOP_VH_2 thì TableTemp bị xóa hết rồi nên em không để ý có 276 hs.Confused_smile

lúc lọc thì chỉ đc 43 hs là cao rồi( dữ liệu ví dụ thôi). em sửa trong module cái nào 45 thì thành 10 để xem nó có chạy không mà nó không có chạy.( ý em là có 43 hs thì xếp ra 5 lớp đó xem nó có ghi đc vào TableTemp không, mà vô TableTemp xem thì nó trống, nên cũng bó tay Confused_smileConfused_smile).
anh Quân thử chạy cái F_XEPLOP_VH_2 xem sao, anh chọn xếp theo ban ý là đc số học sinh nhiều nhất. rồi xếp thử theo 1 lớp 10 hs cho em xem thử nha.
bài em đây anh xem thử em đặt đúng hem: http://www.mediafire.com/download.php?w5jpiqtpqabmch6
Cám ơn anh Quân nhiều.
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
Xem kỹ bài cuat bạn, mình thấy thế này: khi bạn xếp lớp, bạn chọn trình độ văn hóa và lớp nghề: nhiều trường hợp một lớp nghề có nhiều trình độ văn hóa khác nhau. Ví dụ lớp nghề BVTV K9 có các trình độ văn hóa 9, 10, 11, 12. Các lớp nghề khác cũng tương tự. Có nghĩa là mỗi lớp nghề bạn sẽ có 4 lớp văn hóa. Như vậy có hợp lý không? Các lớp văn hóa phân theo khoa cũng vậy.
Bạn đưa lại ý tưởng cụ thể xem sao và các nút lệnh của bạn trên FORM có ý nghĩa gì nhé.
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#7
(15-06-11, 07:19 PM)haquocquan Đã viết: Xem kỹ bài cuat bạn, mình thấy thế này: khi bạn xếp lớp, bạn chọn trình độ văn hóa và lớp nghề: nhiều trường hợp một lớp nghề có nhiều trình độ văn hóa khác nhau. Ví dụ lớp nghề BVTV K9 có các trình độ văn hóa 9, 10, 11, 12. Các lớp nghề khác cũng tương tự. Có nghĩa là mỗi lớp nghề bạn sẽ có 4 lớp văn hóa. Như vậy có hợp lý không? Các lớp văn hóa phân theo khoa cũng vậy.
Bạn đưa lại ý tưởng cụ thể xem sao và các nút lệnh của bạn trên FORM có ý nghĩa gì nhé.

Đầu tiên khi mở form thì em xoá hết dữ liệu ở TableTemp.
sau đó chọn cách xếp lớp, có thể chọn theo lớp nghề hoặc theo ban.
Chọn theo ban thì có 2 điều kiện lọc: là Trình độ văn hoáBan.
Chọn theo lớp nghề cũng có 2 điều kiện lọc: là Trình độ văn hoálớp nghề

vd em chọn theo ban. Em chọn trình độ văn hoá là 9, ban là ban A. thì dưới Sub form xếp lớp sẽ hiển thị những hs thoả 2 điều kiện này từ bảng HOCSINH. vd đc 105 hs đi.
Các HS này đc lưu tạm vào TableTemp. Vậy là chọn xong 2 cái combobox trên thì em có các hs thoả đk trên lưu vào bảng Temp rồi.
Rồi ấn nút đồng ý
- Đầu tiên em sẽ đếm tổng số hs trong TableTemp rồi update LopVh vào trong TableTemp dựa theo điều kiện 45 hs là 1 lớp.
vậy nếu như trên có 105 hs thì LopVh trong TableTemp sẽ là:
hs từ 1 --> 45 mang mã lớp A1 B1 nếu chọn ban là B, C1 nếu chọn ban là C
hs từ 46 --> 90 mang mã lớp A2 B2 nếu chọn ban là B, C2 nếu chọn ban là C
hs từ 90--> 105 thì A3,B3 hoặc C3 tuỳ theo mình chọn ban.
sau khi update Malopvh vào TableTemp xong.

ít thế này thì em xài mấy cái hàm if cũng ra đc rồi. Nhưng nếu mình lọc như trên đc 1 lần mấy ngàn hs thì viết if khùng luôn nên em mới nghĩ ra for. viết for ra thì máy treo luôn 47_47 nên pó tay từ lúc đó luôn. ^o^
Về Form thì chỉ có Nút ĐỒNG Ý thôi, mấy nút kia thì không có gì hết ^^.
Form F_XEPLOP_VH_2 này làm việc thế này:
Load Form thì xóa sạch dữ liệu ờ TableTemp.
- Chọn 2 cbx dưới:
+ chọn cbx_trinhdovh + cbx_lopnghe
hoặc
+ chọn cbx_trinhdovh + cbx_ban
thì em chạy câu Query "Make TableTamp" bằng sự kiện After Update của các cbx.
các hs sẽ đc lưu vào TableTemp.
rồi mới Click vào nút đồng ý để ghi lớp Vh vào TableTemp.
nút ĐỒNG Ý làm việc thế này:
- Update LopVh vào TableTemp thông qua tổng số hs trong Tabletemp như vd trên.
- Chạy Query "Append LopVh" để ghi các LopVh vào bảng LOPVH ( đây là bảng cha phải có khóa trc)
- Chạy Query " Append XepLop" để ghi các MSSV và Lopvh vào bảng XEPLOPVH.
- END
FORM em làm việc chỉ thế thôi, chỉ bị mắc mỗi cái Update MaLopVh vào TableTemp thôi ( với vòng For ý). hi vọng anh Quân hiểu ý em, ^^. viết dài dòng mà thật ra có tí thôi. hjhj
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
Có 2 file này
- DEMO FOR dùng query
- DEMO FOR1 dùng code
Bạn tham khảo nhé
Link 1: http://www.mediafire.com/?tv5axo7nxvddytj
Link 2: http://www.mediafire.com/?5a6d3bz5384duvl
Hy vọng đúng ý bạn. Mình có thay đổi một chút thiết kế :F_Sub_XeplopVH2 và cách xử lý tabletemp, các cbobox
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dieuchinhlu
#9
Cái nào cũng ghi đúng hết anh Quân ơi. Ghi vào bảng LOPVH,PHANLOPVH đc rồi, ghi đúng và không bị lặp, nhưng sao khi mình click nút đồng ý thì nó lại nhân đôi số hs lên vậy nhỉ, Anh Quân có bị thế không? Nó nhân đôi vái sub với cái Temp luôn anh. mình có cách nào khắc phục nó không anh?
Chữ ký của dieuchinhlu
Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Cao nhân tất hữu cao nhân trị
CAO NHÂN TẮT THỞ VÔ PHƯƠNG TRỊ
ღღღღღTài sản của dieuchinhlu (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
Bạn bỏ dòng lệnh DoCmd.OpenQuery "MakeTemp" dưới nút lệnh ĐỒNG Ý là được (mình quên chưa bỏ)
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dieuchinhlu


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Photo [Thủ Thuật] Code chia sẽ hàng thừa Phung Duc 3 72 1 Giờ trước
Bài mới nhất: Phung Duc
  Tìm mã theo một mã cho trước toanle 4 115 08-12-16, 01:17 PM
Bài mới nhất: ongke0711
  [Hỏi] Số Thứ Tự Theo Nhóm Hàng Hóa Trong Access pherotao 2 148 02-11-16, 03:05 PM
Bài mới nhất: pherotao
  [Hỏi] Viết code có điều kiện " lệnh Chạy tiếp khi đóng tbl cho sẵn" Trần Linh 3 140 21-10-16, 11:11 AM
Bài mới nhất: Minh Tiên
  Giải thích ý nghĩ của đoạn code feeling 3 198 06-10-16, 10:18 AM
Bài mới nhất: vulhu06

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ