Xuân Thanh > 08-09-21, 07:18 PM
tungthoi15 > 08-09-21, 09:12 PM
ongke0711 > 08-09-21, 10:43 PM
arrTuKhoa = Split(txtValue, " ")
sSQL = Select CompanyName From tblCustomer Where 1=1"
sWhere = ""
For i=0 to Ubound(arrTuKhoa)
sWhere = sWhere & " AND CompanyName Like '*" & arrTuKhoa(i) & "*'"
Next i
sSQL = sSQL & sWhere
CurrentDB.Execute "INSERT INTO tblResult " & sSQL, dbFailOnError
paulsteigel > 08-09-21, 11:12 PM
(08-09-21, 10:43 PM)ongke0711 Đã viết: Giải thuật chưa test nhé anh Thanh.
- Đưa tất cả từ khoá vô mảng (dùng hàm Split).
- Duyệt từng phần tử mảng và nối chuỗi SQL tìm kiếm.
Vd:
Mã PHP:arrTuKhoa = Split(txtValue, " ")
sSQL = Select CompanyName From tblCustomer Where 1=1"
sWhere = ""
For i=0 to Ubound(arrTuKhoa)
sWhere = sWhere & " AND CompanyName Like '*" & arrTuKhoa(i) & "*'"
Next i
sSQL = sSQL & sWhere
CurrentDB.Execute "INSERT INTO tblResult " & sSQL, dbFailOnError
ongke0711 > 08-09-21, 11:34 PM
paulsteigel > 08-09-21, 11:48 PM
(08-09-21, 11:34 PM)ongke0711 Đã viết:(08-09-21, 11:12 PM)paulsteigel Đã viết: Ông Kẹ phải dùng OR mới đúng chứ, sao lại là AND
Tại thấy đề bài có ghi "có các từ trùng với tất cả các từ của cụm từ khóa dù cho nó nằm ở bất kỳ vị trí nào" nên em suy ra là phải cùng lúc có đủ các từ => AND
Xuân Thanh > 09-09-21, 12:31 AM
(08-09-21, 10:43 PM)ongke0711 Đã viết: Giải thuật chưa test nhé anh Thanh.
- Đưa tất cả từ khoá vô mảng (dùng hàm Split).
- Duyệt từng phần tử mảng và nối chuỗi SQL tìm kiếm.
Vd:
Mã PHP:arrTuKhoa = Split(txtValue, " ")
sSQL = Select CompanyName From tblCustomer Where 1=1"
sWhere = ""
For i=0 to Ubound(arrTuKhoa)
sWhere = sWhere & " AND CompanyName Like '*" & arrTuKhoa(i) & "*'"
Next i
sSQL = sSQL & sWhere
CurrentDB.Execute "INSERT INTO tblResult " & sSQL, dbFailOnError
Xuân Thanh > 09-09-21, 12:34 AM
(08-09-21, 11:12 PM)paulsteigel Đã viết: Bài toán này sao cụ Xuân thanh không tư vấn cho bạn ý dùng listbox, vì thực sự chạy query như vậy sẽ làm tốn tài nguyên, vì listbox có thuộc tính recordsource hiện ngay lên!
ongke0711 > 09-09-21, 11:04 AM
(09-09-21, 12:31 AM)Xuân Thanh Đã viết: Giải thuật thì OK rồi nhưng hình như cái sSQL có vấn đề, ongke nói rõ hơn cho bạn í hiểu không?
Private Sub cmdFind_Click()
Dim arrTuKhoa() As String
Dim sSQL As String, sWhere As String, i As Integer
arrTuKhoa = Split(Me.txtValue)
sSQL = "Select CompanyName From tblCustomers Where 1=1"
sWhere = ""
For i = 0 To UBound(arrTuKhoa)
sWhere = sWhere & " AND CompanyName Like '*" & arrTuKhoa(i) & "*'"
Next i
sSQL = sSQL & sWhere
CurrentDb.Execute "INSERT INTO tblResult " & sSQL, dbFailOnError
MsgBox "Xong."
End Sub
sWhere = AND CompanyName Like '*xây*' AND CompanyName Like '*dựng*' AND CompanyName Like '*Bình*' AND CompanyName Like '*An*'
sSQL = Select CompanyName From tblCustomers Where 1=1 AND CompanyName Like '*xây*' AND CompanyName Like '*dựng*' AND CompanyName Like '*Bình*' AND CompanyName Like '*An*'
INSERT INTO tblResult Select CompanyName From tblCustomers Where 1=1 AND CompanyName Like '*xây*' AND CompanyName Like '*dựng*' AND CompanyName Like '*Bình*' AND CompanyName Like '*An*'
paulsteigel > 09-09-21, 02:43 PM
(09-09-21, 11:04 AM)ongke0711 Đã viết: arrTuKhoa = Split(Me.txtValue)Ông kẹ ơi, không cần thiết phải có 1=1 đâu, chỉ cần sqlWhere = mid(sqlWhere,4) để bỏ từ khóa AND đầu chuỗi đi. Nếu để 1=1 thì tốc độ sẽ bị chậm chút ít. Lệnh execute sẽ chạy theo điều kiện mà ông kẹ làm rồi! Có tìm được thì đẩy vào, không có thì thôi!
sSQL = "Select CompanyName From tblCustomers Where 1=1"