Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tìm kiếm Record ngay khi gõ trong Combobox - Class
#1
Chào các bạn,

Trong thực tế có những Combobox có RowSource lên tới chục ngàn dòng do vậy, việc chỉ cần gõ từ khóa trực tiếp ngay trong Combobox thì nó sẽ tự động lọc dữ liệu liên quan đến từ khóa đó để chọn sẽ nhanh hơn rất nhiều.
Trên mạng cũng đã có nhiều bài hướng dẫn cách tạo "Smart combobox" như vậy rồi. Kỹ thuật xử lý thì cũng không khác gì mấy, chủ yếu là làm sao để chạy trơn tru khi thao tác tìm kiếm ngay trong combobox. Lần này tôi giới thiệu với các bạn cách xử lý thông qua class module.

[Hình: 42721276545_95964066e4_o.png]

Cách làm:
- Dùng sự kiện On Change của combobox để bắt chuỗi tìm kiếm khi gõ.
- Thay thế RecordSource của combobox bằng Recordset mới đã lọc dữ liệu theo chuỗi tìm kiếm vừa gõ.
- Trong demo này tôi dùng Class module để có thể gọi sử dụng lại cho nhiều combobox trong cùng 1 Form (nếu có).
- Tôi mượn dữ liệu mẫu của bạn thanhtruong để làm RecordSource cho combobox <=> 17.000 dòng để test.

Lưu ý: Class này dùng Recordset của Combobox nên bắt buộc combobox phải có RowSource là "Table hoăc Query " mới chạy được.

Tôi thấy nó cũng chưa chạy thực sự trơn tru lắm nhưng cũng đáp ứng yêu cầu đặt ra. 
Các bạn test thử và cùng đóng góp các kiểu code khác để cải tiến cho hiệu quả hơn.

- Code gọi trong Form chứa Combobox cần áp dụng: chỉ cần gọi class ở sự kiện On Load() của Form.

Mã PHP:
Option Compare Database
Option Explicit

Private faytCbHoTen     As New clsFAYTCombo

Private Sub Form_Load()
   Dim rsHoTen As DAO.Recordset
   
   Set rsHoTen 
CurrentDb.OpenRecordset(Me.cboNhanVien.RowSource)
   Set Me.cboNhanVien.Recordset rsHoTen
   faytCbHoTen
.InitalizeFilterCombo Me.cboNhanVien"HoTen"False
   
End Sub 



Mã PHP:
Option Compare Database
Option Explicit

'TÊN Class Module: clsFAYTCombo
'
NOI DUNGTìm kiemloc thong tin records ngay trong Combobox "Find As You Type"
'          Dùng Recordset và thuoc tinh Filter cua no thay the cho câu lenh SQL.
'
TAC GIADuoc chinh sua tu code cua MajP ben Tek-tips.com
'
'
CÁC THAM SÔ:
'  faytComBoName: Tên cua Combobox ma ban muon áp dung
 FilterFieldNameTên Field mà ban dung de loc du lieu dang Chuoi (String)
'  FilterFromStart: Xác dinh muon loc chuoi "text" tu dau dòng hay o bat ky doan nào cua dòng.
                  TRUEtìm tu dau dongFALSEtìm o vi trí bat ky.
'
'
*******CODE dùng trong FORM*******************
'
Option Compare Database
' Option Explicit
Priavte faytCBX As New clsFAYTCombo
'
Private Sub Form_Load()
'   faytCbHoTen.InitalizeFilterCombo Me.cboNhanVien, "HoTen", False
End Sub
'
'
**********************************************

Private 
WithEvents mCombo   As Access.ComboBox
Private WithEvents mForm    As Access.Form
Private mFilterFieldName    As String
Private mRsOriginalList     As DAO.Recordset
Private mFilterFromStart    As Boolean

Private Sub mCombo_Change()
   If Len(Nz(Trim(mCombo.Text), "")) <> 0 Then
       Call FilterList
   Else
       Call unFilterList    
'không set muc nay cung ok'
   End If
End Sub

Private Sub mCombo_GotFocus()
   mCombo.Dropdown
End Sub

Private Sub mCombo_AfterUpdate()
   Call unFilterList
End Sub

Private Sub mCombo_Click()
   Call unFilterList
End Sub

Private Sub mForm_Current() 'De reset lai combobox vê RowSource ban dau'
   Call unFilterList
End Sub

Private Sub FilterList()
   On Error GoTo errHandler
   
   Dim rsTemp 
As DAO.Recordset
   Dim strText 
As String
   Dim strFilter 
As String

   
'Không chay Filter khi chon item tu trong list combobox; Giai quyet van de: khi KeyDown tu dong chon dong dau tien'
   If mCombo.ListCount And mCombo.ListIndex >= 0 Then Exit Sub

   strText 
Trim(mCombo.Text)
   If mFilterFieldName "" Then
       MsgBoxUni 
"Ph" ChrW(7843) & "i cung c" ChrW(7845) & "p tham s" ChrW(7889) & " [Tên Field] " ChrW(273) & ChrW(7875) & " l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u."
       Exit Sub
   End 
If

   If mFilterFromStart True Then
       strFilter 
mFilterFieldName " Like '" strText "*'"
   Else
       strFilter 
mFilterFieldName " Like '*" strText "*'"
   End If
   Set rsTemp mRsOriginalList.OpenRecordset
   rsTemp
.Filter strFilter
   Set rsTemp 
rsTemp.OpenRecordset
   If rsTemp
.RecordCount 0 Then
       Set mCombo
.Recordset rsTemp
       mCombo
.Dropdown
   Else
       
' Khi khong tìm thay record, không dropdown list cua combobox.'
       mCombo.RowSource ""
       Beep
   End 
If
   'Set rsTemp = Nothing'
   Exit Sub

errHandler
:
   If Err.Number 3061 Then
       MsgBoxUni 
"Không l" ChrW(7885) & "c " ChrW(273) & ChrW(432) & ChrW(7907) & "c d" ChrW(7919) & " li" ChrW(7879) & "u." vbCrLf _
                 
"Ki" ChrW(7875) & "m tra l" ChrW(7841) & "i tên tr" ChrW(432) & ChrW(7901) & "ng (Field)  c" ChrW(7847) & "n l" ChrW(7885) & "c."vbCritical"L" ChrW(7895) & "i l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u"
   Else
       MsgBoxUni 
"Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i:" Err.DescriptionvbCritical"Thông báo"
   End If
   
End Sub

Private Sub unFilterList()
   On Error GoTo errHandler
   
   Set mCombo
.Recordset mRsOriginalList
   Exit Sub

errHandler
:
   If Err.Number 3061 Then
       MsgBoxUni 
"Không l" ChrW(7885) & "c " ChrW(273) & ChrW(432) & ChrW(7907) & "c d" ChrW(7919) & " li" ChrW(7879) & "u." vbCrLf _
                 
"Ki" ChrW(7875) & "m tra l" ChrW(7841) & "i tên tr" ChrW(432) & ChrW(7901) & "ng (Field)  c" ChrW(7847) & "n l" ChrW(7885) & "c."vbCritical"L" ChrW(7895) & "i l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u"
   Else
       MsgBoxUni 
"Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i:" Err.DescriptionvbCritical"Thông báo"
   End If
   
End Sub

Public Property Get FilterFieldName() As String
   FilterFieldName 
mFilterFieldName
End Property

Public Property Let FilterFieldName(ByVal theFieldName As String)
   mFilterFieldName theFieldName
End Property

Private Sub Class_Terminate()
   Set mForm Nothing
   Set mCombo 
Nothing
   Set mRsOriginalList 
Nothing
End Sub

Public Sub InitalizeFilterCombo(faytComBoName As Access.ComboBoxFilterFieldName As StringOptional FilterFromStart True)

   On Error GoTo errHandler

   If Not faytComBoName
.RowSourceType "Table/Query" Then
       MsgBoxUni 
"Class ch" ChrW(7881) & " ho" ChrW(7841) & "t " ChrW(273) & ChrW(7897) & "ng khi Combobox có RowSource là Table ho" ChrW(7863) & "c Query."
       Exit Sub
   End 
If

   Set mCombo faytComBoName
   Set mForm 
faytComBoName.Parent

   mFilterFieldName 
FilterFieldName
   mFilterFromStart 
FilterFromStart

   mForm
.OnCurrent "[Event Procedure]"
   mCombo.OnGotFocus "[Event Procedure]"
   mCombo.OnChange "[Event Procedure]"
   mCombo.AfterUpdate "[Event Procedure]"
   mCombo.OnNotInList "[Event Procedure]"

   With mCombo
       If 
.ListCount Then Else
       .SetFocus
       
.AutoExpand True
   End With

   Set mRsOriginalList 
mCombo.Recordset.Clone

   Exit Sub

errHandler
:
   MsgBoxUni "Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i: " Err.DescriptionvbCritical"Thông báo"

End Sub

Private Sub mCombo_NotInList(NewData As StringResponse As Integer)

   MsgBoxUni "D" ChrW(7919) & " li" ChrW(7879) & "u b" ChrW(7841) & "n tìm không có." vbCrLf _
             
"Vui lòng ch" ChrW(7885) & "n trong danh sách."vbInformation"Thông báo"
   Response acDataErrContinue

End Sub 

Link file demohttp://www.mediafire.com/file/a4dq717q7u...accdb/file


----------------------------------------------------------------------------------------

BỔ SUNG TÌM KIẾM NHIỀU FIELD TRONG COMBOBOX

Bạn gõ ký tự tìm kiếm và Combobox sẽ tự động tìm trong tất cả các field của combobox để tìm. Field nào cần đưa vào để tìm kiếm phải khai báo ở sự kiện Form_Load() 

[Hình: 44169368764_29036c2625_o.png]

Link file demo: http://www.mediafire.com/file/0spbf2rsshjronf/FAYTComboboxMultiFields_Class.mdb/file
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huuduy.duy , thanhtruong , tranthanhan1962
#2
Em gỏ thử 
DD  thì ra chủ DĐ
Trần thì ra Traần

Ghi chú: dùng bộ gỏ EVkey 3.3.0
ღღღღღTài sản của huuduy.duy (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
(25-07-18, 02:13 PM)huuduy.duy Đã viết: Em gỏ thử 
DD  thì ra chủ DĐ
Trần thì ra Traần

Ghi chú: dùng bộ gỏ EVkey 3.3.0

Cái lỗi font chữ này không liên quan đến Class.
Lỗi này là khi gõ tiếng Việt trong Combobox có RowSource là chính cái table Nhân viên thì bị lỗi, nếu Rowsource là table khác hoặc không có Source thì không bị lỗi font chữ này. Tôi cũng chưa biết cách khắc phục lỗi này. Có file thì bị lỗi này, có file không bị. Không biết Access phiên bản khác có bị không? Máy tôi Access 2013.
Nhiều khi Access nó cũng trời thần lắm.

(PS: Đã thay table Nhân Viên)
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huuduy.duy
#4
(25-07-18, 03:32 PM)ongke0711 Đã viết:
(25-07-18, 02:13 PM)huuduy.duy Đã viết: Em gỏ thử 
DD  thì ra chủ DĐ
Trần thì ra Traần

Ghi chú: dùng bộ gỏ EVkey 3.3.0

Cái lỗi font chữ này không liên quan đến Class.
Lỗi này là khi gõ tiếng Việt trong Combobox có RowSource là chính cái table Nhân viên thì bị lỗi, nếu Rowsource là table khác hoặc không có Source thì không bị lỗi font chữ này. Tôi cũng chưa biết cách khắc phục lỗi này. Có file thì bị lỗi này, có file không bị. Không biết Access phiên bản khác có bị không? Máy tôi Access 2013.
Nhiều khi Access nó cũng trời thần lắm.

(PS: Đã thay table Nhân Viên)

Chữ Trần thì Ok rồi anh, nhưng nếu 
gỏ chử Đỗ theo kiểu DDoox thì ra thành chữ DĐỗ, nhưng nếu gõ theo kiểu DooxD thì ra đúng chữ Đỗ

Ps: em dùng Access 2016 32bit
ღღღღღTài sản của huuduy.duy (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
Gõ chữ vẫn lỗi nhiều, đã bỏ tự động điền rồi nhưng vẫn bị lỗi (Auto Expand = No)
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#6
(01-08-18, 12:30 PM)thanhtruong Đã viết: Gõ chữ vẫn lỗi nhiều, đã bỏ tự động điền rồi nhưng vẫn bị lỗi (Auto Expand = No)

Vậy bạn tạo combobox khác có Rowsource giống combobox bị lỗi rồi gõ xem có bị lỗi font chữ không?
(không khai báo class cho nó)
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhtruong
#7
BỔ SUNG TÌM KIẾM NHIỀU FIELD TRONG COMBOBOX

Bạn gõ ký tự tìm kiếm và Combobox sẽ tự động tìm trong tất cả các field của combobox để tìm. Field nào cần đưa vào để tìm kiếm phải khai báo ở sự kiện Form_Load() 

Đã bổ sung link file demo ở post #1.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huuduy.duy
#8
(25-07-18, 02:13 PM)huuduy.duy Đã viết: Em gỏ thử 
DD  thì ra chủ DĐ
Trần thì ra Traần

Ghi chú: dùng bộ gỏ EVkey 3.3.0

Đây là lỗi do sự bất cập của tiếng Việt khi gõ các ký tự 2 phím chứ không phải do ứng dụng của ongke0711. Kinh nghiệm khi xử lý ký tự 2 phím thứ 2 gõ ở cuối từ sẽ hạn chế lỗi.
Ví dụ: Đỗ             thay vì          D+d+o+o+x           (telex) thay bằng       D+o+d+o+x         hoặc      D+9+o+6+4          (vni) thay bằng      D+o+9+6+4
         Trần           thay vì          T+r+a+a+f+n        (telex) thay bằng       T+r+a+n+a+f       hoặc      T+r+a+6+2+n       (vni) thay bằng      T+r+a+n+6+2
Tất nhiên việc này chỉ khả dụng với những từ có kí tự cuối gõ 1 phím, còn những trường hợp kí tự cuối là từ gõ bằng 2 phím thì chịu.
Ví dụ chỉ gõ một ký tự Đ => DĐ hay  => AÂ. Chừng nào Việt Nam có bàn phím tiếng Việt, gõ các ký ký tự ư, ơ, ơ, ă, â, ê, đ chỉ bằng 1 phím thì mới mong có thể xử lý được lỗi 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 ongke0711 , huuduy.duy
#9
Có thể dùng cách này là chuyển từ có dấu về không dấu rồi tìm kiếm theo không dấu. Trong combo gõ không dấu là vô tư
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
(25-07-18, 12:41 PM)ongke0711 Đã viết: Chào các bạn,

Trong thực tế có những Combobox có RowSource lên tới chục ngàn dòng do vậy, việc chỉ cần gõ từ khóa trực tiếp ngay trong Combobox thì nó sẽ tự động lọc dữ liệu liên quan đến từ khóa đó để chọn sẽ nhanh hơn rất nhiều.
Trên mạng cũng đã có nhiều bài hướng dẫn cách tạo "Smart combobox" như vậy rồi. Kỹ thuật xử lý thì cũng không khác gì mấy, chủ yếu là làm sao để chạy trơn tru khi thao tác tìm kiếm ngay trong combobox. Lần này tôi giới thiệu với các bạn cách xử lý thông qua class module.

[Hình: 42721276545_95964066e4_o.png]

Cách làm:
- Dùng sự kiện On Change của combobox để bắt chuỗi tìm kiếm khi gõ.
- Thay thế RecordSource của combobox bằng Recordset mới đã lọc dữ liệu theo chuỗi tìm kiếm vừa gõ.
- Trong demo này tôi dùng Class module để có thể gọi sử dụng lại cho nhiều combobox trong cùng 1 Form (nếu có).
- Tôi mượn dữ liệu mẫu của bạn thanhtruong để làm RecordSource cho combobox <=> 17.000 dòng để test.

Lưu ý: Class này dùng Recordset của Combobox nên bắt buộc combobox phải có RowSource là "Table hoăc Query " mới chạy được.

Tôi thấy nó cũng chưa chạy thực sự trơn tru lắm nhưng cũng đáp ứng yêu cầu đặt ra. 
Các bạn test thử và cùng đóng góp các kiểu code khác để cải tiến cho hiệu quả hơn.

- Code gọi trong Form chứa Combobox cần áp dụng: chỉ cần gọi class ở sự kiện On Load() của Form.

Mã PHP:
Option Compare Database
Option Explicit

Private faytCbHoTen     As New clsFAYTCombo

Private Sub Form_Load()
   Dim rsHoTen As DAO.Recordset
   
   Set rsHoTen 
CurrentDb.OpenRecordset(Me.cboNhanVien.RowSource)
   Set Me.cboNhanVien.Recordset rsHoTen
   faytCbHoTen
.InitalizeFilterCombo Me.cboNhanVien"HoTen"False
   
End Sub 



Mã PHP:
Option Compare Database
Option Explicit

'TÊN Class Module: clsFAYTCombo
'
NOI DUNGTìm kiemloc thong tin records ngay trong Combobox "Find As You Type"
'          Dùng Recordset và thuoc tinh Filter cua no thay the cho câu lenh SQL.
'
TAC GIADuoc chinh sua tu code cua MajP ben Tek-tips.com
'
'
CÁC THAM SÔ:
'  faytComBoName: Tên cua Combobox ma ban muon áp dung
 FilterFieldNameTên Field mà ban dung de loc du lieu dang Chuoi (String)
'  FilterFromStart: Xác dinh muon loc chuoi "text" tu dau dòng hay o bat ky doan nào cua dòng.
                  TRUEtìm tu dau dongFALSEtìm o vi trí bat ky.
'
'
*******CODE dùng trong FORM*******************
'
Option Compare Database
' Option Explicit
Priavte faytCBX As New clsFAYTCombo
'
Private Sub Form_Load()
'   faytCbHoTen.InitalizeFilterCombo Me.cboNhanVien, "HoTen", False
End Sub
'
'
**********************************************

Private 
WithEvents mCombo   As Access.ComboBox
Private WithEvents mForm    As Access.Form
Private mFilterFieldName    As String
Private mRsOriginalList     As DAO.Recordset
Private mFilterFromStart    As Boolean

Private Sub mCombo_Change()
   If Len(Nz(Trim(mCombo.Text), "")) <> 0 Then
       Call FilterList
   Else
       Call unFilterList    
'không set muc nay cung ok'
   End If
End Sub

Private Sub mCombo_GotFocus()
   mCombo.Dropdown
End Sub

Private Sub mCombo_AfterUpdate()
   Call unFilterList
End Sub

Private Sub mCombo_Click()
   Call unFilterList
End Sub

Private Sub mForm_Current() 'De reset lai combobox vê RowSource ban dau'
   Call unFilterList
End Sub

Private Sub FilterList()
   On Error GoTo errHandler
   
   Dim rsTemp 
As DAO.Recordset
   Dim strText 
As String
   Dim strFilter 
As String

   
'Không chay Filter khi chon item tu trong list combobox; Giai quyet van de: khi KeyDown tu dong chon dong dau tien'
   If mCombo.ListCount And mCombo.ListIndex >= 0 Then Exit Sub

   strText 
Trim(mCombo.Text)
   If mFilterFieldName "" Then
       MsgBoxUni 
"Ph" ChrW(7843) & "i cung c" ChrW(7845) & "p tham s" ChrW(7889) & " [Tên Field] " ChrW(273) & ChrW(7875) & " l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u."
       Exit Sub
   End 
If

   If mFilterFromStart True Then
       strFilter 
mFilterFieldName " Like '" strText "*'"
   Else
       strFilter 
mFilterFieldName " Like '*" strText "*'"
   End If
   Set rsTemp mRsOriginalList.OpenRecordset
   rsTemp
.Filter strFilter
   Set rsTemp 
rsTemp.OpenRecordset
   If rsTemp
.RecordCount 0 Then
       Set mCombo
.Recordset rsTemp
       mCombo
.Dropdown
   Else
       
' Khi khong tìm thay record, không dropdown list cua combobox.'
       mCombo.RowSource ""
       Beep
   End 
If
   'Set rsTemp = Nothing'
   Exit Sub

errHandler
:
   If Err.Number 3061 Then
       MsgBoxUni 
"Không l" ChrW(7885) & "c " ChrW(273) & ChrW(432) & ChrW(7907) & "c d" ChrW(7919) & " li" ChrW(7879) & "u." vbCrLf _
                 
"Ki" ChrW(7875) & "m tra l" ChrW(7841) & "i tên tr" ChrW(432) & ChrW(7901) & "ng (Field)  c" ChrW(7847) & "n l" ChrW(7885) & "c."vbCritical"L" ChrW(7895) & "i l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u"
   Else
       MsgBoxUni 
"Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i:" Err.DescriptionvbCritical"Thông báo"
   End If
   
End Sub

Private Sub unFilterList()
   On Error GoTo errHandler
   
   Set mCombo
.Recordset mRsOriginalList
   Exit Sub

errHandler
:
   If Err.Number 3061 Then
       MsgBoxUni 
"Không l" ChrW(7885) & "c " ChrW(273) & ChrW(432) & ChrW(7907) & "c d" ChrW(7919) & " li" ChrW(7879) & "u." vbCrLf _
                 
"Ki" ChrW(7875) & "m tra l" ChrW(7841) & "i tên tr" ChrW(432) & ChrW(7901) & "ng (Field)  c" ChrW(7847) & "n l" ChrW(7885) & "c."vbCritical"L" ChrW(7895) & "i l" ChrW(7885) & "c d" ChrW(7919) & " li" ChrW(7879) & "u"
   Else
       MsgBoxUni 
"Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i:" Err.DescriptionvbCritical"Thông báo"
   End If
   
End Sub

Public Property Get FilterFieldName() As String
   FilterFieldName 
mFilterFieldName
End Property

Public Property Let FilterFieldName(ByVal theFieldName As String)
   mFilterFieldName theFieldName
End Property

Private Sub Class_Terminate()
   Set mForm Nothing
   Set mCombo 
Nothing
   Set mRsOriginalList 
Nothing
End Sub

Public Sub InitalizeFilterCombo(faytComBoName As Access.ComboBoxFilterFieldName As StringOptional FilterFromStart True)

   On Error GoTo errHandler

   If Not faytComBoName
.RowSourceType "Table/Query" Then
       MsgBoxUni 
"Class ch" ChrW(7881) & " ho" ChrW(7841) & "t " ChrW(273) & ChrW(7897) & "ng khi Combobox có RowSource là Table ho" ChrW(7863) & "c Query."
       Exit Sub
   End 
If

   Set mCombo faytComBoName
   Set mForm 
faytComBoName.Parent

   mFilterFieldName 
FilterFieldName
   mFilterFromStart 
FilterFromStart

   mForm
.OnCurrent "[Event Procedure]"
   mCombo.OnGotFocus "[Event Procedure]"
   mCombo.OnChange "[Event Procedure]"
   mCombo.AfterUpdate "[Event Procedure]"
   mCombo.OnNotInList "[Event Procedure]"

   With mCombo
       If 
.ListCount Then Else
       .SetFocus
       
.AutoExpand True
   End With

   Set mRsOriginalList 
mCombo.Recordset.Clone

   Exit Sub

errHandler
:
   MsgBoxUni "Có l" ChrW(7895) & "i phát sinh. Vui lòng liên h" ChrW(7879) & " ng" ChrW(432) & ChrW(7901) & "i qu" ChrW(7843) & "n tr" ChrW(7883) & " h" ChrW(7879) & " th" ChrW(7889) & "ng." vbCrLf _
             
"Mã l" ChrW(7895) & "i:" Err.Number vbCrLf _
             
"N" ChrW(7897) & "i dung l" ChrW(7895) & "i: " Err.DescriptionvbCritical"Thông báo"

End Sub

Private Sub mCombo_NotInList(NewData As StringResponse As Integer)

   MsgBoxUni "D" ChrW(7919) & " li" ChrW(7879) & "u b" ChrW(7841) & "n tìm không có." vbCrLf _
             
"Vui lòng ch" ChrW(7885) & "n trong danh sách."vbInformation"Thông báo"
   Response acDataErrContinue

End Sub 

Link file demohttp://www.mediafire.com/file/a4dq717q7u...accdb/file


----------------------------------------------------------------------------------------

BỔ SUNG TÌM KIẾM NHIỀU FIELD TRONG COMBOBOX

Bạn gõ ký tự tìm kiếm và Combobox sẽ tự động tìm trong tất cả các field của combobox để tìm. Field nào cần đưa vào để tìm kiếm phải khai báo ở sự kiện Form_Load() 

[Hình: 44169368764_29036c2625_o.png]

Link file demo: http://www.mediafire.com/file/0spbf2rsshjronf/FAYTComboboxMultiFields_Class.mdb/file

Cái này em thêm cái mã để tìm nữa, với lại sau khi chọn xong, ấn enter thì nó chọn luôn cái mã nó tìm được ở tại vị trí con trỏ (bôi đen)
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Help] Ẩn những record theo điều kiện nam8384 4 98 Hôm qua, 04:58 PM
Bài mới nhất: nam8384
  Set combobox = ADOrecordset mrsiro 8 510 22-10-18, 01:27 AM
Bài mới nhất: ongke0711
  [Hỏi] Cách tạo Cbo để lọc các mặt hàng trong Sub Form samacxanh 3 253 17-10-18, 10:33 AM
Bài mới nhất: vulhu06
  Tạo thêm trường số thứ tự trong subform? feeling 1 117 05-10-18, 08:08 AM
Bài mới nhất: cpucloi
  [Help] Sự kiện gotforcus và after update ko đúng trong Main-sub form NguyenDungAnh 9 381 09-09-18, 11:03 PM
Bài mới nhất: NguyenDungAnh

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ơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line