-
RE: Query tìm kiếm giá trị trống
doandinhtam > 23-06-22, 04:15 PM
(21-06-22, 03:58 PM)ongke0711 Đã viết: Bạn xem file: https://www.mediafire.com/file/cwxyh6zfb...su.7z/file
Nếu dữ liệu là dạng date và muốn sử dụng hàm between để tìm kiếm từ ngày A đến ngày B thì sử dụng query như thế nào?
mình dùng điều kiện như này có được không?
Mã:Like IIf(IsNull([Forms]![frm_FNS]![ngayden1])=False,Between ([Forms]![frm_FLT]![ngayden1]) And ([Forms]![frm_FLT]![ngayden2]),"*")
-
RE: Query tìm kiếm giá trị trống
ongke0711 > 23-06-22, 06:28 PM
(23-06-22, 04:15 PM)doandinhtam Đã viết: Nếu dữ liệu là dạng date và muốn sử dụng hàm between để tìm kiếm từ ngày A đến ngày B thì sử dụng query như thế nào?
mình dùng điều kiện như này có được không?
Mã:Like IIf(IsNull([Forms]![frm_FNS]![ngayden1])=False,Between ([Forms]![frm_FLT]![ngayden1]) And ([Forms]![frm_FLT]![ngayden2]),"*")
- ngayden1 là "Từ ngày" và ngayden2 là "Đến ngày" đúng không?
- Phải có tất cả 3 điều kiện là: tất cả ngày đều trống, Từ ngày trống hoặc đến ngày trống.
- Nhớ là Null nó khác chuỗi không ký tự nhé. Nếu gõ dữ liệu vào textbox xong bấm nút xóa tất cả các ký tự thì khi đó Textbox đó không Is Null mà là: ="". Bạn tự ngâm cứu đi.
Mã:= IIf([Forms]![frm_FNS]![TuNgay] Is Null AND [Forms]![frm_FNS]![DenNgay] Is Null,"*", IIf([Forms]![frm_FNS]![TuNgay] Is Null,<= [Forms]![frm_FNS]![DenNgay], IIf([Forms]![frm_FNS]![DenNgay] Is Null,>= [Forms]![frm_FNS]![TuNgay], Between [Forms]![frm_FLT]![TuNgay] And [Forms]![frm_FLT]![DenNgay])))
-
RE: Query tìm kiếm giá trị trống
doandinhtam > 24-06-22, 09:45 AM
SQL của mình như này nhưng khi nhập giá trị vào ô NGAYDEN1 hoặc NGAYDEN2 là đều không ra dữ liệu. Ongke xem giùm mình.Mã:SELECT tbl_LT.HOVATEN, tbl_LT.NGAYDEN
FROM tbl_LT
WHERE (((tbl_LT.HOVATEN) Like "*" & [Forms]![frm_FLT]![tkten] & "*") AND (([tbl_LT]![NGAYDEN] & "") Like IIf(Len([Forms]![frm_FLT]![ngayden1] & "")=0 And Len([Forms]![frm_FLT]![ngayden2] & "")=0,"*",IIf(Len([Forms]![frm_FLT]![ngayden1]&"")=0,([tbl_LT]![NGAYDEN] & "")<=[Forms]![frm_FLT]![ngayden2],IIf(Len([Forms]![frm_FLT]![ngayden2]&"")=0,([tbl_LT]![NGAYDEN] & "")>=[Forms]![frm_FLT]![ngayden1],([tbl_LT]![NGAYDEN] & "") Between [Forms]![frm_FLT]![ngayden1] And [Forms]![frm_FLT]![ngayden2])))));
Ngayden1 là tìm từ ngày A
Ngayden2 là tìm đến ngày B
field NGAYDEN mình định dạng dd/mm/yyyy
textbox ngayden1 và ngayden2 định dạng shortdate -
RE: Query tìm kiếm giá trị trống
ongke0711 > 24-06-22, 10:44 AM
(24-06-22, 09:45 AM)doandinhtam Đã viết:
SQL của mình như này nhưng khi nhập giá trị vào ô NGAYDEN1 hoặc NGAYDEN2 là đều không ra dữ liệu. Ongke xem giùm mình.Mã:SELECT tbl_LT.HOVATEN, tbl_LT.NGAYDEN
FROM tbl_LT
WHERE (((tbl_LT.HOVATEN) Like "*" & [Forms]![frm_FLT]![tkten] & "*") AND (([tbl_LT]![NGAYDEN] & "") Like IIf(Len([Forms]![frm_FLT]![ngayden1] & "")=0 And Len([Forms]![frm_FLT]![ngayden2] & "")=0,"*",IIf(Len([Forms]![frm_FLT]![ngayden1]&"")=0,([tbl_LT]![NGAYDEN] & "")<=[Forms]![frm_FLT]![ngayden2],IIf(Len([Forms]![frm_FLT]![ngayden2]&"")=0,([tbl_LT]![NGAYDEN] & "")>=[Forms]![frm_FLT]![ngayden1],([tbl_LT]![NGAYDEN] & "") Between [Forms]![frm_FLT]![ngayden1] And [Forms]![frm_FLT]![ngayden2])))));
Ngayden1 là tìm từ ngày A
Ngayden2 là tìm đến ngày B
field NGAYDEN mình định dạng dd/mm/yyyy
textbox ngayden1 và ngayden2 định dạng shortdate
Tìm kiếm dạng Date sao lại đổi thành chuỗi làm gì? làm sao Access nó hiểu. Còn việc định dạng ngày thì cứ để ShortDate không cần can thiệp "dd/mm/yyyy". Cứ để người dùng nhập liệu theo định dạng ngày hệ thống trên máy tính của họ mới chính xác được. -
RE: Query tìm kiếm giá trị trống
doandinhtam > 24-06-22, 10:49 AM
ongke cho mình query chuẩn cho trường hợp này với, vì mình đã từng bỏnhưng vẫn không đượcMã:&""
-
RE: Query tìm kiếm giá trị trống
ongke0711 > 24-06-22, 01:30 PM
Đối với Form tìm kiếm nhiều điều kiện thì tốt nhất là dùng code VBA, Query đôi khi nó không giải quyết hết các điều kiện đâu.
Nên đọc lại tài liệu căn bản về Access, Query, các kiểu dữ liệu để còn biết cách xử lý.
Bạn sửa câu lệnh SQL lại như bên dưới:
WHERE (tbl_LT.HOVATEN Like "*" & [Forms]![frm_FLT]![tkten] & "*") AND IIf(IsNull([Forms]![frm_FLT]![txtNGAYDEN2]),[tbl_LT].[NGAYDEN]>=[Forms]![frm_FLT]![txtNGAYDEN1],IIf(IsNull([Forms]![frm_FLT]![txtNGAYDEN1]),[tbl_LT].[NGAYDEN]<=[Forms]![frm_FLT]![txtNGAYDEN2],[tbl_LT].[NGAYDEN] Between [Forms]![frm_FLT]![txtNGAYDEN1] And [Forms]![frm_FLT]![txtNGAYDEN2])) -
RE: Query tìm kiếm giá trị trống
doandinhtam > 24-06-22, 02:48 PM
(24-06-22, 01:30 PM)ongke0711 Đã viết: Đối với Form tìm kiếm nhiều điều kiện thì tốt nhất là dùng code VBA, Query đôi khi nó không giải quyết hết các điều kiện đâu.
Nên đọc lại tài liệu căn bản về Access, Query, các kiểu dữ liệu để còn biết cách xử lý.
Bạn sửa câu lệnh SQL lại như bên dưới:
WHERE (tbl_LT.HOVATEN Like "*" & [Forms]![frm_FLT]![tkten] & "*") AND IIf(IsNull([Forms]![frm_FLT]![txtNGAYDEN2]),[tbl_LT].[NGAYDEN]>=[Forms]![frm_FLT]![txtNGAYDEN1],IIf(IsNull([Forms]![frm_FLT]![txtNGAYDEN1]),[tbl_LT].[NGAYDEN]<=[Forms]![frm_FLT]![txtNGAYDEN2],[tbl_LT].[NGAYDEN] Between [Forms]![frm_FLT]![txtNGAYDEN1] And [Forms]![frm_FLT]![txtNGAYDEN2]))
Mình đã thử nhưng vẫn không thành công. mình gửi file ongke fix giùm để mình nghiên cứu ạ
https://www.mediafire.com/file/rw0w0mdw2...accdb/file -
RE: Query tìm kiếm giá trị trống
ongke0711 > 24-06-22, 03:34 PM
(24-06-22, 02:48 PM)doandinhtam Đã viết: Mình đã thử nhưng vẫn không thành công. mình gửi file ongke fix giùm để mình nghiên cứu ạ
https://www.mediafire.com/file/rw0w0mdw2...accdb/file
Lập trình phải chính xác từng dấu phẩy, dấu ngoặc, khoảng cách v.v..
Bạn copy câu lệnh vô mà không cẩn thận kiểm tra lại: dư thừa từ, sai tên field.
Câu lệnh chính xác:
Mã:SELECT tbl_NKT1.HOVATEN, tbl_NKT1.GIOITINH, tbl_NKT1.NAMSINH, tbl_NKT1.CMND, tbl_NKT1.CCCD, tbl_NKT1.NGAYDEN
FROM tbl_NKT1 WHERE tbl_NKT1.HOVATEN Like "*" & [Forms]![frm_FKT1]![tkten] & "*" AND IIf(IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]>=[Forms]![frm_FKT1]![ngayden1],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]),[tbl_NKT1].[NGAYDEN]<=[Forms]![frm_FKT1]![ngayden2],[tbl_NKT1].[NGAYDEN] Between [Forms]![frm_FKT1]![ngayden1] And [Forms]![frm_FKT1]![ngayden2])) AND [tbl_NKT1].[CMND] & "" Like IIf(Len([Forms]![frm_FKT1]![tkcmnd] & "")=0,"*",[Forms]![frm_FKT1]![tkcmnd]);
- Ngâm cứu thêm qui ước đặt tên các Control trên Form để sau này muốn viết code nó cũng tường minh. -
RE: Query tìm kiếm giá trị trống
doandinhtam > 24-06-22, 03:53 PM
Mình thêm điều kiện để nếu ngayden1 và ngayden2 = null thì NGAYDEN xuất tất cả các giá trị nhưng không được. ongke xem giùm mìnhMã:SELECT tbl_NKT1.HOVATEN, tbl_NKT1.GIOITINH, tbl_NKT1.NAMSINH, tbl_NKT1.CMND, tbl_NKT1.CCCD, tbl_NKT1.NGAYDEN
FROM tbl_NKT1
WHERE (((tbl_NKT1.HOVATEN) Like "*" & [Forms]![frm_FKT1]![tkten] & "*") AND ((IIf(IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]>=[Forms]![frm_FKT1]![ngayden1],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]),[tbl_NKT1].[NGAYDEN]<=[Forms]![frm_FKT1]![ngayden2],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]) And IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]="*",[tbl_NKT1].[NGAYDEN] Between [Forms]![frm_FKT1]![ngayden1] And [Forms]![frm_FKT1]![ngayden2]))))<>False) AND (([tbl_NKT1].[CMND] & "") Like IIf(Len([Forms]![frm_FKT1]![tkcmnd] & "")=0,"*",[Forms]![frm_FKT1]![tkcmnd]))); -
RE: Query tìm kiếm giá trị trống
ongke0711 > 24-06-22, 05:27 PM
(24-06-22, 03:53 PM)doandinhtam Đã viết:
Mình thêm điều kiện để nếu ngayden1 và ngayden2 = null thì NGAYDEN xuất tất cả các giá trị nhưng không được. ongke xem giùm mìnhMã:SELECT tbl_NKT1.HOVATEN, tbl_NKT1.GIOITINH, tbl_NKT1.NAMSINH, tbl_NKT1.CMND, tbl_NKT1.CCCD, tbl_NKT1.NGAYDEN
FROM tbl_NKT1
WHERE (((tbl_NKT1.HOVATEN) Like "*" & [Forms]![frm_FKT1]![tkten] & "*") AND ((IIf(IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]>=[Forms]![frm_FKT1]![ngayden1],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]),[tbl_NKT1].[NGAYDEN]<=[Forms]![frm_FKT1]![ngayden2],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]) And IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]="*",[tbl_NKT1].[NGAYDEN] Between [Forms]![frm_FKT1]![ngayden1] And [Forms]![frm_FKT1]![ngayden2]))))<>False) AND (([tbl_NKT1].[CMND] & "") Like IIf(Len([Forms]![frm_FKT1]![tkcmnd] & "")=0,"*",[Forms]![frm_FKT1]![tkcmnd])));
Lần này liên quan đến suy luận logic của mệnh đề IIF nhé. Code nó xử lý theo tuần tự nhé.
Bạn thêm điều kiện (3) ngayden1 và ngayden2 = Null sau 2 điều kiện trước là: (1) IIF (ngayden1= Null), (2) IIF (ngayden2=Null) --> Vậy bạn suy nghĩ thử khi gặp điều kiện (3) thì code nó sẽ đưa vô trường hợp IIF nào để xử lý?
Một điểm nữa là đối với Field dạng Date thì không dùng kiểu = hoặc Like "*" như chuỗi (Text) đươc do đó phải thêm cái thủ thuật là lấy 2 cái ngày xa nhất để đưa vô câu lệnh.
Câu lệnh đúng:
Mã:SELECT tbl_NKT1.HOVATEN, tbl_NKT1.GIOITINH, tbl_NKT1.NAMSINH, tbl_NKT1.CMND, tbl_NKT1.CCCD, tbl_NKT1.NGAYDEN
FROM tbl_NKT1
WHERE tbl_NKT1.HOVATEN Like "*" & [Forms]![frm_FKT1]![tkten] & "*" AND IIf(IsNull([Forms]![frm_FKT1]![ngayden1]) And IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN] Between #1/1/1900# And #1/1/2100#,IIf(IsNull([Forms]![frm_FKT1]![ngayden2]),[tbl_NKT1].[NGAYDEN]>=[Forms]![frm_FKT1]![ngayden1],IIf(IsNull([Forms]![frm_FKT1]![ngayden1]),[tbl_NKT1].[NGAYDEN]<=[Forms]![frm_FKT1]![ngayden2],[tbl_NKT1].[NGAYDEN] Between [Forms]![frm_FKT1]![ngayden1] And [Forms]![frm_FKT1]![ngayden2]))) AND [tbl_NKT1].[CMND] & "" Like IIf(Len([Forms]![frm_FKT1]![tkcmnd] & "")=0,"*",[Forms]![frm_FKT1]![tkcmnd]);