Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Function] Code Xếp hạng
#1
Trên Forum các bạn cũng đã có hướng dẫn một vài phương pháp để xử dụng xếp hạng (Cái này access dỡ hơn excel). Mình cũng gởi đến “góp vui cùng các bạn” một code xếp hạng trước đây mình xử dụng để xếp hạng khi còn đi dạy. Lúc trước do yêu cầu xếp hạng theo điểm nên functon này chỉ xếp được điểm lớn thì hạng cao. Nhưng để hoàn chỉnh mình xử lý cả 2 dạng: Điểm lớn hạng cao, điêm nhỏ hạng thấp và ngược lại (Ví dụ thi bơi lội thì thời gian càng ít hạng càng cao).
Tạo một module chứa
 

Mã PHP:
Function XepHang(TenQuery As StringFieldXepHang As StringFieldID As StringValueIDKieuxep As Integer) As String
On Error 
GoTo BiLoi
        Dim CSDL 
As Database
        Dim Bang 
As Recordset
        Dim Duocxephang 
As Long
        Dim Xep 
As Double
        Dim TrungHang 
As Double
    Xep 
1
    TrungHang 
0
    Set CSDL 
CurrentDb
    Set Bang 
CSDL.OpenRecordset(TenQuerydbOpenDynasetdbReadOnly)
    
    Bang
.FindFirst FieldID " = " ValueID
    
If Is_Null(Bang(FieldXepHang)) Then Exit Function
    Duocxephang Bang(FieldXepHang)
    Bang.MoveFirst
    
Select 
Case Kieuxep
    
Case ' Lon hang cao
            Do Until Bang.EOF
                If Bang(FieldXepHang) > Duocxephang Then Xep = Xep + 1
                If Bang(FieldXepHang) = Duocxephang Then TrungHang = TrungHang + 1
                Bang.MoveNext
            Loop
            If TrungHang > 1 Then
                XepHang = Xep & "="
            Else
                XepHang = Xep
            End If
            Bang.Close
                Set Bang = Nothing
            Set CSDL = Nothing
 
    Case 1 ' 
Nho hang cao
              
Do Until Bang.EOF
                
If Bang(FieldXepHang) < Duocxephang Then Xep Xep 1
                
If Bang(FieldXepHang) = Duocxephang Then TrungHang TrungHang 1
                Bang
.MoveNext
            Loop
            
If TrungHang 1 Then
                XepHang 
Xep "="
            Else
                XepHang Xep
            End 
If
            Bang.Close
            Set Bang 
Nothing
            Set CSDL 
Nothing
    
Case Else
    
End Select
    
BiLoi
:
 
End 
Function 

 
Trong đó biến Kieuxep là 0 thì giá trị FieldXepHang càng cao thì hạng càng cao, biến Kieuxep càng thấp thì hạng càng cao.
Để xử lý hàm này thì table của bạn phải có field ID Primary Key.
 
Ví dụ Bạn có table với các field: ID, TenHS, Diem
Tạo query: BangXepHangHocTap


Mã PHP:
SELECT DiemHocTap.IDXepHang("BangXepHangHocTap","Diem","ID",[ID],0) AS ThuHangDiemHocTap.TenHSDiemHocTap.Diem
FROM DiemHocTap
ORDER BY DiemHocTap
.Diem

 
Vài điểm cần lưu ý
Field ThuHang có function:
 
ThuHang: XepHang("BangXepHangHocTap","Diem","ID",[ID],0)
 
- "BangXepHangHocTap" là tên của query nó đang xử lý.
- "Diem", là Field để căn cứ giá trị lớn nhỏ để xếp hạng.
- "ID" và [ID] là Tên và giá trị Field Primary Key chỉ mục để vòng lặp xử lý việc xếp hạng. Nhớ là một cái trong " " và một cái trong [ ].
- Giá trị 0 để xếp hạng lớn Diem trước nhỏ sau, giá trị 1 để xếp hạng Diem nhỏ trước lớn sau.
- Nhớ Thay thế từ Is_Null = IsNull trong đoạn mã
Mong rằng function này sẽ hỗ trợ được cho các bạn trong công việc
 
 Function Xep Hang
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , bvchauthanh , Noname
#2
Bạn cho hỏi,nếu xếp hạng theo từng lớp của một trường học thì phải làm sao. Xin cám ơn
Chữ ký của tracanhtam Hãy chia sẻ kinh nghiệm cùng mình trên ThuThuatAccess nhé! Chúc vui vẻ rose
Reply
Những người đã cảm ơn
#3
(21-07-15, 07:47 AM)tracanhtam Đã viết: Bạn cho hỏi,nếu xếp hạng theo từng lớp của một trường học thì phải làm sao. Xin cám ơn

Ok, Câu hỏi rất hay. Có lẽ mình phải nghiên cứu them phần xếp hạng theo nhóm và nếu không xử lý được mình sẽ viết thêm phần này
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn bvchauthanh
#4
Cách của bạn tranthanhan1962 rất hay, cho mình hỏi về vấn đề trùng hạng => bị nhảy hạng (VD trùng hạng 2 thì hạng kế tiếp sẽ không liên tục được (Xem hình bên dưới)
[Hình: Xephang.png]

Và mình xin góp 1 cách khác mà không dùng đến modul để xếp hạng (nhưng vẫn bị lỗi như trên)
ai có cách giải quyết không? xin chỉ giáo

Mượn lại file của bạn tranthanhan1962 nhé. Mình đã làm với 2 query hoàn toàn không sài đến modul, và kết quả ra tương tự.


File đính kèm
.zip   XepHang.zip (Kích cỡ: 15.29 KB / Tải về: 8)
Chữ ký của bvchauthanh
rose"Luôn luôn lắng nghe
Lâu lâu mới.... hiểu." rose
Reply
Những người đã cảm ơn tranthanhan1962 , Noname
#5
Xem bài của mình đi: khi dùng Query nó cũng thế

http://thuthuataccess.com/forum/thread-8333.html

[Hình: codeSQLXephang.jpg]
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tranthanhan1962 , bvchauthanh , Noname


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hàm] Demo Hàm đổi tên Table hàng loạt maidinhdan 2 699 18-09-15, 12:33 AM
Bài mới nhất: maidinhdan
  [Hàm] Demo Hàm đổi tên Query hàng loạt. maidinhdan 0 414 12-04-15, 10:04 PM
Bài mới nhất: maidinhdan
  Code số thứ tự tăng theo điều kiện thanhtruong 1 599 30-03-15, 11:08 PM
Bài mới nhất: maidinhdan
  Hướng Dẫn Demo Code Xếp hạng trong Query giống như hàm Rank trong Excel maidinhdan 0 1,198 02-03-15, 01:01 AM
Bài mới nhất: maidinhdan

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ơ