Tìm thủ thuật nhanh hơn với chức năng tìm trong Blog

5/8/12

Bài 1 : Sắp xếp tiếng Việt theo font chữ VNIWindows (VNI)

Nguồn:  Thủ Thuật Access
Tác giả: Xuân Thanh 
----------------------------
Có nhiều bạn hỏi về cách sắp xếp tiếng Việt trong Access. Hôm nay tôi xin chia sẻ với các bạn một số thủ thuật này. Trước hết xin lỗi những ai là thầy cô giáo vì cách sắp xếp tiếng Việt được hiểu theo nhiều cách khác nhau. Ở đây tôi xin sắp xếp theo thứ tự sau
1/ Xếp từ phải sang
2/ Xếp theo thứ tự của bảng chữ cái tiếng Việt
3/ Về dấu, thứ tự ưu tiên sẽ là không dấu, huyền, sắc, hỏi, ngã, nặng
thủ thuật ở đây là dùng chuỗi mã hóa đễ chuyển về thứ tự như đã nói ở trên
Chúng ta cùng nghiên cứu nhé



Bài 1 : Sắp xếp tiếng Việt theo font chử VNIWindows (VNI)
Các bạn chép hàm sau vào một modul của Access

Mã PHP:
Public Function SuaCau(CauVan)
    
CauMoi Trim(CauVan)
    
ViTri InStr(1CauMoiSpace(2))
    Do While 
ViTri 0
        CauMoi 
Left(CauMoiViTri) & Trim(Mid(CauMoiViTri))
        
ViTri InStr(1CauMoiSpace(2))
    
Loop
    SuaCau 
CauMoi
End 
Function 

Mã PHP:
Public Function XepABC(HoTen)
    
Ten SuaCau(Trim(HoTen))
    
TenMoi Space(0): One Space(0): Two Space(0)
    
One One "a aùaøaûaõaïaêaéaèaúaüaëaâaáaàaåaãaä"
    
One One "o oùoøoûoõoïoâoáoàoåoãoäô ôùôøôûôõôï"
    
One One "e eùeøeûeõeïeâeáeàeåeãeäi í ì æ ó ò "
    
One One "y yùyøyûyõî u uùuøuûuõuïö öùöøöûöõöïd ñ"
    
Two Two "aaabacadaeafagahaiajakalamanaoapaqar"
    
Two Two "oaobocodoeofogohoiojokolomonooopoqor"
    
Two Two "eaebecedeeefegeheiejekeliaibicidieifyaybycydyeyf"
    
Two Two "uaubucudueufuguhuiujukuldadb"
    
ViTri InStr(1TenSpace(1))
    Do While 
ViTri 0
        TenMoi 
Left(TenViTri) & TenMoi
        Ten 
Mid(TenViTri 1)
        
ViTri InStr(1TenSpace(1))
    
Loop
    OldS 
Trim(Ten Space(1) & TenMoi)
    
NewS Space(0): LenOf Len(OldS): ViTri 1
    
Do While ViTri <= LenOf
        KyTu 
Mid(OldSViTri1)
        If 
KyTu Space(1Then
            NewS 
NewS KyTuViTri ViTri 1
        
Else
            
LowK LCase(KyTu): OldP InStr(1OneLowK)
            If 
OldP 0 Then
                NewS 
NewS KyTuViTri ViTri 1
            
Else
                
KeTiep LCase(Mid(OldSViTri2))
                
NewP InStr(1OneKeTiep)
                If 
NewP 0 Then
                    NewS 
NewS Trim(IIf(Asc(KyTu) = Asc(LCase(KyTu)), Mid(TwoOldP2), UCase(Mid(TwoOldP2))))
                    
ViTri ViTri 1
                
Else
                    
NewS NewS Trim(IIf(Asc(KyTu) = Asc(LCase(KyTu)), Mid(TwoNewP2), UCase(Mid(TwoNewP2))))
                    
ViTri ViTri Len(Trim(KeTiep))
                
End If
            
End If
        
End If
    
Loop
    XepABC 
Trim(NewS)End Function 

1/ hàm SuaCau để chuyển câu chữ về đúng cách viết tiếng Việt(giữa hai từ chỉ có 1 khoảng trắng mà thôi)
2/ hàm XepABC để sắp xếp theo cách đã trình bày ở trên

Để sử dụng, các bạn đưa vào query. Giả sử ta muốn sắp xếp dữ liệu HotenHs trong table Hocsinh. Trong cửa sổ Queries ta thiết kế một Query và chèn một field với dữ liệu là chuỗi ký tự được mã hoá từ hàm XepABC([Hocsinh]![HotenHs]). Field được chèn chọn Sort là Ascending (Nếu sắp theo chiều giảm chọn Descending), không hiển thị field này nên bỏ chọn CheckBox thuộc tính Show. Khi mở Query này, ta có dữ liệu được sắp xếp theo thứ tự chuẩn tiếng Việt

Chúc các bạn vui với thủ thuật này

Các bạn thắc mắc, vui lòng thảo luận tại bài viết: Sắp xếp tiếng Việt trong Access của tác giả Xuân Thanh

1 nhận xét:

  1. Chào tác giả Xuân Thanh!

    Mình rất cảm ơn vì bài viết của bạn thật hữu ích. Sau khi áp dụng: Bài 1 : Sắp xếp tiếng Việt theo font chử VNIWindows (VNI) mình đã sắp xếp được dữ liệu. Tuy nhiên khi mình đưa vào chương trình (chương trình mình viết bằng c#) thì lại báo lỗi: Undefined function 'XepABC' in expression.

    Mong bạn tư vấn!

    Quang Quốc.
    ngoquangquoc@gmail.com

    Trả lờiXóa

» Hãy để lại tên, email của bạn khi bạn post comment, để mình có thể dễ dàng trả lời comment của bạn khi cần.
» Có thể sử dụng các thẻ < b>,< i>,< a>. Và các icon thông dụng trên YM