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

25/8/19

Hướng dẫn Nạp RowSource cho ComboBox nhanh và hiệu quả với dữ liệu lớn

Tác Giả Bài Viết: Lê Hồng Đức.
Các bạn có thể thảo luận thêm chủ đề này ở diễn đàn Thủ Thuật Access tại Topic
https://thuthuataccess.com/forum/post-42800.html#pid42800


Khi thiết kế ứng dụng với combobox chúng ta cần hết sức quan tâm đến việc nạp nguồn dữ liệu cho combobox (RowSource) sao cho hợp lý, việc đó phải thỏa mãn yêu cầu là chỉ nạp những gì ta cần, đừng bao giờ nạp lên toàn bộ dữ liệu. Tại sao như vậy? Các Bạn thử tưởng tượng với một Danh sách khách hàng có hàng chục nghìn người, hoặc chỉ cần 5 nghìn thôi, sẽ làm cho ứng dụng chậm chạp đến bực bội.



Sau đây tôi xin đề xuất giải pháp như sau:
1. Thay vì nạp lên hết (Mã Khách hàng, hoặc Tên Khách hàng chẳng hạn), ta sẽ lọc danh sách theo dạng thức nào đó, chẳng hạn như:
+ Có ký tự đầu hoặc 2, 3 ký tự đầu là ...
+ Danh sách có từ xác định nào đó trong đó.
Thí dụ:
+ Nạp tên khách hàng bắt đầu bằng "TRẦN"
+ Nạp tên khách hàng có từ "HOA" trong tên.

2. Ta sẽ gán RowSource cho combobox khi được sổ xuống bằng việc bấm phím F4 với sự kiện là KeyDown.
Sau đây thí dụ minh họa:



Private Sub TenKH_KeyDown(KeyCode As Integer, Shift As Integer)

Dim RwSrc As String, St As String, nStart As Integer
Dim sObj
Select Case KeyCode
Case vbKeyF4
nStart = Me.TenKH.SelStart
Me.TenKH.SelLength = Me.TenKH.Width - nStart
St = Trim(Me.TenKH.SelText)
'Chuyen con tro ve dau cau
Me.TenKH.SelStart = 0
Me.TenKH.SelLength = nStart
St = Trim(Me.TenKH.SelText)
If Len(St) > 0 Then
RwSrc = "SELECT DISTINCTROW DSKhachhang.TenKH, DSKhachhang.MSKH FROM DSKhachhang"
RwSrc = RwSrc & " WHERE((DSKhachhang.TenKH) Like '*" & St & "*')"
RwSrc = RwSrc & " ORDER BY DSKhachhang.MSKH;"
Me.TenKH.RowSource = RwSrc
End If
End Select

End Sub



Như vậy vừa tiết kiệm tài nguyên của máy tính, vừa đẩy nhanh tốc độ lấy danh sách ra.
Các Bạn nghĩ mà xem: trong khi ta chỉ cần tìm tên khách hàng họ "TRẦN" hoặc có từ "HOA" trong tên, sao lại dại dột nạp tất tần tật cả nghìn cái tên, thậm chí là cả chục nghìn cái tên cho cái combobox đó.

Mời các Bạn xem video minh họa tại link sau:



Không có nhận xét nào:

Đăng nhận xét

» 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