Trang 1 trên 1

Tìm kiếm nhiều điều kiện

Đã gửi: T.Bảy 02/06/2018 12:59 am
gửi bởi allthing1
Mình có bài tập như file đã gửi. Mình muốn tìm theo nhiều điều kiện khác nhau khi tích vào checkbox.
Nếu check vào đâu thì nó sẽ tìm theo diều kiện check. Còn không thì ngược lại.
Cái cách mình làm có khả năng ra nhưng nó dài và không thông minh cho lắm.
Các bạn giúp mình tìm cách tối ưu. Thanks.

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Hai 04/06/2018 2:25 pm
gửi bởi xuanha
Toàn bộ bài của bạn được sửa lại như dưới đây, tại sao lại làm vậy thì bạn suy nghĩ một chút nhé
  1. Private Sub txthoten_Change()
  2. Check2.Tag = "hoten='" & txthoten.Text & "'"
  3. End Sub
  4.  
  5. Private Sub txtlop_Change()
  6. Check1.Tag = "lop='" & txtlop.Text & "'"
  7. End Sub
  8.  
  9. Private Sub txtnamsinh_Change()
  10. Check3.Tag = "namsinh='" & txtnamsinh.Text & "'"
  11. End Sub
  12.  
  13. Private Sub Command1_Click()
  14. Dim clt As Control
  15. Dim x As String
  16. If Check1.Value = 0 And Check2.Value = 0 And Check3.Value = 0 Then Exit Sub
  17. For Each clt In Me.Controls
  18. If TypeOf clt Is CheckBox Then
  19. If clt.Value = 1 Then x = IIf(x <> "", x & " and " & clt.Tag, x & clt.Tag)
  20. End If
  21. Next
  22. If rs.State = 1 Then: rs.Close
  23. rs.Open "Select *From test where " & x, cn, adOpenDynamic, adLockBatchOptimistic
  24. Set DataGrid1.DataSource = rs
  25. End Sub
  26.  
  27. Private Sub Form_Load()
  28. ketnoi
  29. End Sub

Untitled.png

Tham khảo file đính kèm
testmoi1.rar
(14.07 KiB) Đã tải 23 lần

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Hai 04/06/2018 9:55 pm
gửi bởi allthing1
Cái này đúng là nằm ngoài khả năng của mình.
Hôm trước mình có làm cái này để hiểu nhưng ứng dụng sang database thì chưa biết. Thanks bạn
Cái hôm trước mình làm thế này.

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Hai 04/06/2018 11:02 pm
gửi bởi allthing1
Bạn cho mình hỏi nếu mình thêm 1 textbox về năm sinh. Có nghĩa Tìm kiếm từ năm này đến năm này thì phải dùng thêm điều kiện gì nữa không ?

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Ba 05/06/2018 2:56 am
gửi bởi allthing1
Mình thêm 1 trường năm sinh nữa trong Access ( cũng để ở dạng TEXT)
Nhưng khi chạy lên thì không được. Nó chỉ chạy dc năm cố định thôi.
Còn khoảng cách giữa các năm thì datagrid không hiển thị.
Nếu chạy câu lệnh between thì text năm sinh phải ở dạng số.
Nhưng mình thấy điều kiện ở đây là "and" vậy sao nó không kết hợp giữa 2 ô năm sinh với nhau đc nhỉ
Trong khi đó chỉ có 1 trong 2 ô năm sinh kết hợp đc với các checkbox còn lại.
Nhờ bạn chỉ giúp.

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Ba 05/06/2018 8:41 am
gửi bởi xuanha
1. Mình không hiểu bạn dùng between thì lấy trường nào hoặc tiêu chí nào để thực hiện.
2. Năm sinh 1 và năm sinh 2 có giá trị bằng nhau thì không có khoảng cách giữa chúng.
3. Chuyển đổi dữ liệu về cùng một kiểu số để so sánh thì không có gì khó. VD: val(namsinh) between 1978 and 2001.

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Ba 05/06/2018 9:56 am
gửi bởi allthing1
Vậy trong trường hợp này không dùng between thì dùng điều kiện nào để lọc dữ liệu trong khoảng cách các năm. Mình thử đủ kiểu theo hiểu biết của mình rồi vẫn không ra.

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Ba 05/06/2018 11:12 am
gửi bởi xuanha
Bạn có thể dùng bất kỳ phương thức nào cũng được, miễn là ra được kết quả và nhanh, gọn nhất. Nhưng bạn dùng nó vào mục đích gì trong bài này

Re: Tìm kiếm nhiều điều kiện

Đã gửi: T.Tư 06/06/2018 6:17 pm
gửi bởi allthing1
Mình sử dụng cách: bỏ check.tag 2 giá trị nam sinh. Sử dụng cậu truy vấn: rs.Open "Select *From test where ns between " & val(txtns1.text)&" and " &val(txtns2.text) &" and "& x &"", cn, adOpenDynamic, adLockBatchOptimistic.