Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Between fied đã convert bằng hàm datevalue
#11
Bạn đang làm việc với Windows  thì không thể nào nói "không phụ thuộc windows được!". trước khi dùng function để dịch từ dữ liệu text sang dữ liệu ngày, máy sẽ xác định đâu là ngày, tháng, năm rồi mới chuyển kiểu. Vì vậy, nếu bạn có đoạn text là 02/05/2018 - với setting dd/mm/yyyy nó sẽ xác định ngày 02 tháng 05 năm 2018 rồi mới dịch ra kiểu date, với setting mm/dd/yyyy nó sẽ xác định ngày 05 tháng 02 năm 2018 rồi mới dịch ra kiểu date.
Do đó, dù là kiểu text bạn vẫn phải xác định nó là dạng nào rồi chuyển date format của additional setting sang đúng dạng của nó thì mới xử lý chính xác được.
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
#12
Dùng inner join thì cú pháp như trên đã thành công nhưng nếu dùng left john thì bị lỗi.
[Hình: 201820da7fbd-70da-411e-b475-cfa31f277827.png]
[Hình: 2018d604e63e-4609-4894-a9cc-e80d028767c9.png]
[Hình: 2018898a4108-27c0-4ccf-bad1-32e8a34fc229.png]
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#13
LEFT JOIN sẽ có phát sinh giá trị NULL nên nó không hiểu nó là dạng Date -> Lỗi.
- Bạn bẫy lỗi trong form nhập liệu để tránh nhập Null value vào field dạng Date.
- Có thể khử null bằng hàm Nz(). 
  Vd: Nz([Ngay], Date())
        Nz([Ngay],#1/1/1900#)
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 mrsiro
#14
(09-02-18, 05:19 AM)tranthanhan1962 Đã viết: Bạn đang làm việc với Windows  thì không thể nào nói "không phụ thuộc windows được!". trước khi dùng function để dịch từ dữ liệu text sang dữ liệu ngày, máy sẽ xác định đâu là ngày, tháng, năm rồi mới chuyển kiểu. Vì vậy, nếu bạn có đoạn text là 02/05/2018 - với setting dd/mm/yyyy nó sẽ xác định ngày 02 tháng 05 năm 2018 rồi mới dịch ra kiểu date, với setting mm/dd/yyyy nó sẽ xác định ngày 05 tháng 02 năm 2018 rồi mới dịch ra kiểu date.
Do đó, dù là kiểu text bạn vẫn phải xác định nó là dạng nào rồi chuyển date format của additional setting sang đúng dạng của nó thì mới xử lý chính xác được.

Chung quy lại thì vẫn phụ thuộc vào window hả bạn, nếu để nguyên dạng text thì không phụ thuộc, nhưng mỗi lần truy vấn convert sang dạng date là lại phụ thuộc window. Nếu vậy thì field mình để luôn dạng date cho rồi, mất công để text rồi khi convert cũng lại phụ thuộc window.
Mình có dùng qua vài phần mềm thì thấy phần mềm của họ không phụ thuộc window, không hiểu họ làm cách nào nhỉ.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#15
Cái cách xử lý của các phần mềm đó chỉ là sử dụng format để xử lý hoặc khi mở phần mềm thì tự động chỉnh lại setting của control panel mà thôi. chứ không thể nói là không phụ thuộc được.
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
#16
Chào các bạn, mình gặp phải vấn đề về tìm kiếm nhiều điều kiện, có kết hợp với lọc thời gian theo khoảng:
 Mình có:  + Table với 3 field: mahd, tenhd, ngày.
               + Query: lấy dữ liệu từ table với điều kiện lọc: mahd like "*" & forms!form1!txtmahd & "*"
                                                                                 tenhd like "*" & forms!form1!txttenhd & "*"

  Đến đây mình gặp vấn đề đối với điều kiện lọc của field ngày: nếu để là between forms!form1!txttu and forms!form1!txtden. Thì bắt buộc phải có giá trị tại txttu và txtden sau đó mới có thể lọc theo 2 điều kiện kia. Vậy có cách nào không cần phải có giá trị tại txttu và txtden cũng lọc được giá trị không. Ví dụ: Nếu để trống txttu, txtden, txtmahd, tenhd thì khi mình ấn button tìm trên form1 sẽ ra toàn bộ giá trị trong bảng table.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#17
(10-03-18, 03:45 PM)mrsiro Đã viết: Chào các bạn, mình gặp phải vấn đề về tìm kiếm nhiều điều kiện, có kết hợp với lọc thời gian theo khoảng:
 Mình có:  + Table với 3 field: mahd, tenhd, ngày.
               + Query: lấy dữ liệu từ table với điều kiện lọc: mahd like "*" & forms!form1!txtmahd & "*"
                                                                                 tenhd like "*" & forms!form1!txttenhd & "*"

  Đến đây mình gặp vấn đề đối với điều kiện lọc của field ngày: nếu để là between forms!form1!txttu and forms!form1!txtden. Thì bắt buộc phải có giá trị tại txttu và txtden sau đó mới có thể lọc theo 2 điều kiện kia. Vậy có cách nào không cần phải có giá trị tại txttu và txtden cũng lọc được giá trị không. Ví dụ: Nếu để trống txttu, txtden, txtmahd, tenhd thì khi mình ấn button tìm trên form1 sẽ ra toàn bộ giá trị trong bảng table.
Cái này phải chơi chiêu thôi. Khi không lọc (tạo giá trị default cho forms!form1!txttu và forms!form1!txtden) txttu =Ngày bắt đầu sử dụng chương trình và txtden = ngày hiện tại.
Ví dụ ngày nhỏ nhất khi bạn nhập liệu là 8/8/2013 thì khi txttu có default value là 08/08/2013 hoặc nhỏ hơn cũng được, còn txtden có default value Date(). Khi nào cần lọc chính xác thì đổi ngà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 mrsiro
#18
(10-03-18, 03:45 PM)mrsiro Đã viết: Chào các bạn, mình gặp phải vấn đề về tìm kiếm nhiều điều kiện, có kết hợp với lọc thời gian theo khoảng:
 Mình có:  + Table với 3 field: mahd, tenhd, ngày.
               + Query: lấy dữ liệu từ table với điều kiện lọc: mahd like "*" & forms!form1!txtmahd & "*"
                                                                                 tenhd like "*" & forms!form1!txttenhd & "*"

  Đến đây mình gặp vấn đề đối với điều kiện lọc của field ngày: nếu để là between forms!form1!txttu and forms!form1!txtden. Thì bắt buộc phải có giá trị tại txttu và txtden sau đó mới có thể lọc theo 2 điều kiện kia. Vậy có cách nào không cần phải có giá trị tại txttu và txtden cũng lọc được giá trị không. Ví dụ: Nếu để trống txttu, txtden, txtmahd, tenhd thì khi mình ấn button tìm trên form1 sẽ ra toàn bộ giá trị trong bảng table.

Sao bạn không áp dụng giống cái cách lọc [mã hd] trong bài lần trước tôi có hướng dẫn đó. Link: http://thuthuataccess.com/forum/post-383...l#pid38360

Cụ thể là: (Pseudo code)
- Khi kiểm tra 2 cái textbox [TuNgay], [DenNgay] mà trống thì bỏ filter form (Form.FilterOn = False) thì nó sẽ hiển thị hết.
- Khi 2 textbox trên không rỗng thì chạy Form.Filter = " [ngayhd] between " & [TuNgay] & " AND " & [DenNgay]
                                                          Form.FilterOn=True
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 mrsiro
#19
(12-03-18, 11:21 AM)ongke0711 Đã viết:
(10-03-18, 03:45 PM)mrsiro Đã viết: Chào các bạn, mình gặp phải vấn đề về tìm kiếm nhiều điều kiện, có kết hợp với lọc thời gian theo khoảng:
 Mình có:  + Table với 3 field: mahd, tenhd, ngày.
               + Query: lấy dữ liệu từ table với điều kiện lọc: mahd like "*" & forms!form1!txtmahd & "*"
                                                                                 tenhd like "*" & forms!form1!txttenhd & "*"

  Đến đây mình gặp vấn đề đối với điều kiện lọc của field ngày: nếu để là between forms!form1!txttu and forms!form1!txtden. Thì bắt buộc phải có giá trị tại txttu và txtden sau đó mới có thể lọc theo 2 điều kiện kia. Vậy có cách nào không cần phải có giá trị tại txttu và txtden cũng lọc được giá trị không. Ví dụ: Nếu để trống txttu, txtden, txtmahd, tenhd thì khi mình ấn button tìm trên form1 sẽ ra toàn bộ giá trị trong bảng table.

Sao bạn không áp dụng giống cái cách lọc [mã hd] trong bài lần trước tôi có hướng dẫn đó. Link: http://thuthuataccess.com/forum/post-383...l#pid38360

Cụ thể là: (Pseudo code)
- Khi kiểm tra 2 cái textbox [TuNgay], [DenNgay] mà trống thì bỏ filter form (Form.FilterOn = False) thì nó sẽ hiển thị hết.
- Khi 2 textbox trên không rỗng thì chạy Form.Filter = " [ngayhd] between " & [TuNgay] & " AND " & [DenNgay]
                                                          Form.FilterOn=True

Bạn có thể cho mình biết điểm mạnh điểm yếu của 2 cách dùng điều kiện like "*" & forms!form1!abc & "*" và cách dùng form.filter không. Trước giờ mình toàn dùng cách đầu tiên.
Chữ ký của mrsiro Xin chào, mình là mrsiro, Tham gia http://thuthuataccess.com/forum từ ngày 05-12 -14.
Reply
Những người đã cảm ơn
#20
(15-03-18, 06:41 PM)mrsiro Đã viết: ...
Bạn có thể cho mình biết điểm mạnh điểm yếu của 2 cách dùng điều kiện like "*" & forms!form1!abc & "*" và cách dùng form.filter không. Trước giờ mình toàn dùng cách đầu tiên.

Phải nói cho rõ thêm là điểm mạnh, yếu của cách dùng Form.Filter so với Form.Recordset (dùng câu lệnh SQL để filter - WHERE…).
Thực ra tôi cũng chưa trải nghiệm so sánh 2 cách này đối với CSDL lớn nhưng đối với CSDL nhỏ thì bạn chẳng thấy được sự khác biệt về tốc độ xử lý.
Tôi thường dựa trên nguyên tắc là “dữ liệu trả về” càng nhỏ thì tốc độ xử lý càng nhanh. Bạn sẽ thấy rõ điều này khi truy xuất dữ liệu của table trong file BE lưu trên máy chủ. Nếu bạn dùng câu lệnh SQL “Select… Where…” dữ liệu sẽ được lọc ít lại rồi mới đưa vào làm RecordSource cho Form. Nếu dùng Form.Filter thì RecordSource của Form sẽ load toàn bộ records rồi mới Filter theo điều kiện đưa vào sau đó. Từ đó ta thấy tốc độ load Form theo cách sau sẽ bị ảnh hưởng nhiều hơn cách đầu tiên. Hơn nữa nếu dùng “Select…Where..” thì bộ máy của Access sẽ tận dụng các chỉ mục (index) đã thiết lập sẵn của table để truy tìm, lọc dữ liệu nhanh hơn dò từng dòng trong Form.Filter.
Về điểm mạnh thì việc viết code vba của Form.Filter sẽ gọn hơn chút so với dùng “Select….Where…” thay thế Form.RecordSource.
Vd: khi bạn muốn hiển thị toàn bộ records
- Form.Filter: bạn chỉ cần dùng Form.FilterOn = False
- Form.RecordSource: bạn phải viết lại câu lệnh “Select * From…” rồi thay thế RecordSource của Form.
Nói tóm lại dùng câu lệnh “Select…Where..” sẽ nhanh hơ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 mrsiro


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  CÂU LỆNH QUERY LÂY DÒNG CUỐI TRONG BẢNG CỦA MỖI NGÀY tt1212 0 258 08-07-18, 12:49 AM
Bài mới nhất: tt1212
  [Help] Hỏi về phương pháp lọc dữ liệu sau khi joins từ bảng khác sang HoangManh 2 991 20-06-17, 08:19 PM
Bài mới nhất: tranthanhan1962
  [Help] Edit record từ from vào bảng thông qua query. HoangManh 5 1,317 02-06-17, 11:35 AM
Bài mới nhất: tranthanhan1962
  Xóa dữ liệu ở các bảng ChiMai 6 1,923 17-11-16, 05:12 PM
Bài mới nhất: Trần Linh
Photo CHUYỂN BẢNG Che_Guevara 4 1,067 25-07-16, 12:47 AM
Bài mới nhất: tt1212

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