กระทู้เก่าบอร์ด อ.Yeadram
1,625 8
URL.หัวข้อ /
URL
สอบถามการเขียนโค๊ดแสดงลำดับที่
เรียนอาจารย์ทุกท่านครับ คือสมมุติว่าผมมี ฟิลด์ที่เป็น text อยู่ 7 ฟิลด์ ดังตารางด้านล่าง
Id name math sci eng summark rank
11001 ก 15 3 7 25
11002 ข 15 3 10 28
11003 ค 15 3 4 22
11004 ง 15 3 4 22
11005 จ 16 3 3 22
11006 ฉ 15 3 1 19
11007 ช 12 3 4 19
ผมต้องการสร้างปุ่มคำสั่ง เพื่อเขียนโค๊ดคำสั่ง ให้ ฟิลด์ text ที่ชื่อ rank คำนวนหาลำดับที่ ให้เป็นเหมือนด้านล่าง
Id name math sci eng summark rank
11001 ก 15 3 7 25 2
11002 ข 15 3 10 28 1
11003 ค 15 3 4 22 4
11004 ง 15 3 4 22 4
11005 จ 16 3 3 22 3
11006 ฉ 15 3 1 19 6
11007 ช 12 3 4 19 7
โดยมีข้อแม้ว่า
1. คะแนนรวม (summark) สูงสุด ให้ได้ลำดับที่ 1 เช่น id 11002
2. คะแนนรวม (summark) รองลงมา ให้ได้ลำดับที่ 2 เช่น id 11001
3. ถ้าคะแนนรวม (summark) เท่ากัน ให้ได้ลำดับที่เท่ากัน ( เหมือน id 11003 กับ id 11004
4. ถ้าคะแนนรวม (summark) เท่ากัน ให้ไปดูว่าถ้า คะแนน math สูงกว่าตามตัวอย่างจะได้ลำดับที่ 3
5.จากข้อ 4 ถ้าถ้าคะแนนรวม (summark) เท่ากัน และคะแนน math เท่ากันอีก ให้ไปดู คะแนน sci ว่าใครสูงกว่า จะได้ลำดับที่ (rank) ดีกว่า
*****ผมต้องเขียนโค๊ดคำสั่งอย่างไรครับให้ rank คำนวนและแสดงลำดับที่ออกมา ****
Id name math sci eng summark rank
11001 ก 15 3 7 25
11002 ข 15 3 10 28
11003 ค 15 3 4 22
11004 ง 15 3 4 22
11005 จ 16 3 3 22
11006 ฉ 15 3 1 19
11007 ช 12 3 4 19
ผมต้องการสร้างปุ่มคำสั่ง เพื่อเขียนโค๊ดคำสั่ง ให้ ฟิลด์ text ที่ชื่อ rank คำนวนหาลำดับที่ ให้เป็นเหมือนด้านล่าง
Id name math sci eng summark rank
11001 ก 15 3 7 25 2
11002 ข 15 3 10 28 1
11003 ค 15 3 4 22 4
11004 ง 15 3 4 22 4
11005 จ 16 3 3 22 3
11006 ฉ 15 3 1 19 6
11007 ช 12 3 4 19 7
โดยมีข้อแม้ว่า
1. คะแนนรวม (summark) สูงสุด ให้ได้ลำดับที่ 1 เช่น id 11002
2. คะแนนรวม (summark) รองลงมา ให้ได้ลำดับที่ 2 เช่น id 11001
3. ถ้าคะแนนรวม (summark) เท่ากัน ให้ได้ลำดับที่เท่ากัน ( เหมือน id 11003 กับ id 11004
4. ถ้าคะแนนรวม (summark) เท่ากัน ให้ไปดูว่าถ้า คะแนน math สูงกว่าตามตัวอย่างจะได้ลำดับที่ 3
5.จากข้อ 4 ถ้าถ้าคะแนนรวม (summark) เท่ากัน และคะแนน math เท่ากันอีก ให้ไปดู คะแนน sci ว่าใครสูงกว่า จะได้ลำดับที่ (rank) ดีกว่า
*****ผมต้องเขียนโค๊ดคำสั่งอย่างไรครับให้ rank คำนวนและแสดงลำดับที่ออกมา ****
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R21932
ยังไม่มีคำตอบเลยครับ
2 @R21933
โค้ดที่เขียนนี้ จะนำค่าไปใส่ใน rank ส่วนคุณจะนำออกมาแสดงยังไง โดยคิวรี่ หรือโดยฟอร์ม ก็ตามแต่ต้องการเลยครับ ได้โค้ดไปแล้ว ลองศึกษาดูว่าโค้ดทำงานยังไงด้วยนะครับ เพราะอัลกอริธึมนี้เป็นระดับพื่นๆเอง
Private Sub InsertRank( )
Dim DB as DAO.Database
Dim RS as DAO.Recordset
Dim NextRank as Integer
Dim LastSumMark as integer
Dim LastMath as integer
Dim LastSci as integer
NextRank = 0
Set DB = CurrentDB
Set RS = DB.OpenRecordset("select * from ชื่อเทเบิล order by SumMark desc, Math desc, Sci desc")
With RS
Do While Not .EOF
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
NextRank = NextRank + 1
End If
.Edit : !Rank = NextRank : .Update
LastSumMark = !SumMark
LastMath = !Math
LastSci = !Sci
.MoveNext
Loop
End With
RS.Close: Set RS = Nothing
End Sub
หมายเหตุ : โค้ดอาจผิดพลาดได้ เพราะไม่ได้ทดสอบนะครับ คุณไปลองเช็คผลลัพธ์ดูอีกที
Private Sub InsertRank( )
Dim DB as DAO.Database
Dim RS as DAO.Recordset
Dim NextRank as Integer
Dim LastSumMark as integer
Dim LastMath as integer
Dim LastSci as integer
NextRank = 0
Set DB = CurrentDB
Set RS = DB.OpenRecordset("select * from ชื่อเทเบิล order by SumMark desc, Math desc, Sci desc")
With RS
Do While Not .EOF
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
NextRank = NextRank + 1
End If
.Edit : !Rank = NextRank : .Update
LastSumMark = !SumMark
LastMath = !Math
LastSci = !Sci
.MoveNext
Loop
End With
RS.Close: Set RS = Nothing
End Sub
หมายเหตุ : โค้ดอาจผิดพลาดได้ เพราะไม่ได้ทดสอบนะครับ คุณไปลองเช็คผลลัพธ์ดูอีกที
3 @R21934
อาจารย์สันติสุขครับ ขึ้น
run-time error '3061':
Too few parameter. Expected 1. ครับ
และเป็นสีเหลืองที่โค๊ดตรงบรรทัดนี้ครับ
Set RS = DB.OpenRecordset("select * from M1_noi order by SumMark desc, Math desc, Sci desc")
run-time error '3061':
Too few parameter. Expected 1. ครับ
และเป็นสีเหลืองที่โค๊ดตรงบรรทัดนี้ครับ
Set RS = DB.OpenRecordset("select * from M1_noi order by SumMark desc, Math desc, Sci desc")
4 @R21935
แน่ใจหรือเปล่าว่าฟิลด์ชื่อว่า SumMark, Math และ Sci ถ้าตัวไหนไม่ถูกก็แก้ไขด้วย และแก้ทุกที่ในโค้ดด้วย
5 @R21936
ขอบคุณมากครับอาจารย์ เจอที่ผิดแล้วครับ ผมเขียนชื่อฟิลด์ผิดครับ
6 @R21937
ผลออกมาเป็นอย่างนี้ครับ
math sci summark rank
40 30 70 1
40 30 70 1
40 30 70 1
40 30 70 1
40 26 66 2
40 25 66 2
40 25 66 2
40 25 65 3
40 25 65 3
40 25 65 3
40 25 65 3
39 25 64 4
39 25 64 4
39 25 64 4
แต่ถ้าผมต้องการให้เป็นแบบนี้ครับจะแก้ไขตรงไหนครับ
math sci summark rank
40 30 70 1
40 30 70 1
40 30 70 1
40 30 70 1
40 26 66 5
40 25 66 5
40 25 66 5
40 25 65 8
40 25 65 8
40 25 65 8
40 25 65 8
39 25 64 12
39 25 64 12
39 25 64 12
หมายถึงให้นับลำดับที่ (rank) ที่เท่ากัน แต่ถ้าไม่เท่ากัน ลำดับที่ถัดมาต้องบวกลำดับที่ที่เท่ากันลงมาด้วยครับ ผมรบกวนอาจารย์มากไปไหมครับ
math sci summark rank
40 30 70 1
40 30 70 1
40 30 70 1
40 30 70 1
40 26 66 2
40 25 66 2
40 25 66 2
40 25 65 3
40 25 65 3
40 25 65 3
40 25 65 3
39 25 64 4
39 25 64 4
39 25 64 4
แต่ถ้าผมต้องการให้เป็นแบบนี้ครับจะแก้ไขตรงไหนครับ
math sci summark rank
40 30 70 1
40 30 70 1
40 30 70 1
40 30 70 1
40 26 66 5
40 25 66 5
40 25 66 5
40 25 65 8
40 25 65 8
40 25 65 8
40 25 65 8
39 25 64 12
39 25 64 12
39 25 64 12
หมายถึงให้นับลำดับที่ (rank) ที่เท่ากัน แต่ถ้าไม่เท่ากัน ลำดับที่ถัดมาต้องบวกลำดับที่ที่เท่ากันลงมาด้วยครับ ผมรบกวนอาจารย์มากไปไหมครับ
7 @R21938
เพิ่ม Dim WriteRank as Integer
เปลี่ยน
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
NextRank = NextRank + 1
End If
.Edit : !Rank = NextRank : .Update
เป็น
NextRank = NextRank + 1
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
WriteRank = NextRank
End If
.Edit : !Rank = WriteRank : .Update
เปลี่ยน
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
NextRank = NextRank + 1
End If
.Edit : !Rank = NextRank : .Update
เป็น
NextRank = NextRank + 1
If (.AbsolutePosition <> 0) and (!SumMark = LastSumMark) and (!Math = LastMath) and (!Sci = LastSci) then
' Do Nothing
Else
WriteRank = NextRank
End If
.Edit : !Rank = WriteRank : .Update
8 @R21939
ทำตามที่อาจารย์สันติสุขบอก ได้แล้วครับ ได้รับความรู้จากอาจารย์ และอีกหลายๆท่าน บอร์ดนี้มีประโยชน์มากครับ ขอขอบพระคุณอาจารย์อีกครั้งมากน๊ะครับ
Time: 0.2538s