-
Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
luonguct > 08-06-16, 02:43 PM
Mình có 1 bảng liệt kê các ngày nghĩ Lễ trong năm là tblHoliday gồm có 3 trường: FromDate, ToDate và Description
Một bảng ghi các ngày mình thi công là tblNKTC gồm có 2 trường: NgayTC và Noidung
Bây giờ mình tạo mộ Query để kiểm tra những ngày thi công nào là thi công vào các ngày Lễ như sau:
Mã:SELECT tblNKTC.NgayTC, tblNKTC.Noidung, IsHoliday([tblNKTC].NgayTC) AS NgayLe FROM tblNKTC;
Trong đó hàm IsHoliday được viết như sau:
Mã:Public Function IsHoliday(CheckDate As Date) As Boolean
Dim db As Database
Dim rs As DAO.Recordset
Dim SQL As String, R As Boolean, SQL2 As String
Set db = CurrentDb()
SQL = "SELECT tblHoliday.FromDate, tblHoliday.ToDate FROM tblHoliday WHERE (((tblHoliday.FromDate)<=#" & CheckDate & "#) AND ((tblHoliday.ToDate)>=#" & CheckDate & "#));"
Set rs = db.OpenRecordset(SQL)
If rs.EOF = False Then R = True
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
IsHoliday = R
End Function
Mình chạy lên thì cho kết quả là sai. Nội dung sai qua tìm hiểu thì thấy rằng Ngày Quốc Khánh cho dù trong tblHoliday đã nhập đúng 02/Sep/2009 thì trong nhật ký lại đánh dấu cho các ngày 02/Feb/2009. Tức là ở đây đã có sự nhầm lẫn giữa ngày và tháng, mình đã kiểm tra rất rất kỹ nhưng không tài nào khắc phục được.
Do không tìm thấy chức năng upload file lên diễn đàn nên mình để tại Dropbox: [Đã xóa]
Mong các anh/chị em hiểu giúp mình khắc phục vấn đề này.
Lưu ý: Mình phải kiểm tra các ngày Lễ thông qua hàm IsHoliday() vì mình cần xử lý cho các trường hợp trùng ngày Lễ. -
RE: Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
BaThanh96 > 08-06-16, 06:21 PM
Chắc do Date and Time của Windows của bạn để theo định dạng dd/mm/yyyy (Region seting Vietnam hoặc French). Bạn thử chuyển lại sang định dạng English (United State) xem (m/d/yyyy). Hy vọng giải quyết được vấn đề. -
RE: Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
luonguct > 09-06-16, 11:57 AM
(08-06-16, 06:21 PM)BaThanh96 Đã viết: Chắc do Date and Time của Windows của bạn để theo định dạng dd/mm/yyyy (Region seting Vietnam hoặc French). Bạn thử chuyển lại sang định dạng English (United State) xem (m/d/yyyy). Hy vọng giải quyết được vấn đề.
Cám ơn bạn đã gợi ý cách xử lý. Nhưng ở đây toàn bộ ngày mình điều lấy từ trong Table của CSDL và kiểm tra thì đã nhập đúng. Định dạng chỉ là cách thể hiện cái ngày đó như thế nào mà thôi. Không liên quan gì đến ngày đã nghi trong CSDL và mình cũng chỉ xử lý ngày trong CSDL mà thôi. -
RE: Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
ongke0711 > 09-06-16, 12:12 PM
Bạn dùng Format ([CheckDate],"mm/dd/yyyy") thử xem. Ngày tháng trong VBA hay gặp lỗi này. -
RE: Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
luonguct > 09-06-16, 12:18 PM
(09-06-16, 12:12 PM)ongke0711 Đã viết: Bạn dùng Format ([CheckDate],"mm/dd/yyyy") thử xem. Ngày tháng trong VBA hay gặp lỗi này.
Mình đã giải quyết được rồi. Trong VBA của Access ngày nó nhảy tùm lum khi cả tháng và ngày <=12. Khắc phục bằng cách chuyển ngày thành số nguyên sồ truy vấn bình thường. Đơn giản vậy mà đã mò mẫm cả tuần nay luôn đó. -
RE: Sử dụng ngày trong truy vấn qua VBA tại sao không đúng?
maidinhdan > 09-06-16, 06:24 PM
(09-06-16, 12:18 PM)luonguct Đã viết: Mình đã giải quyết được rồi. Trong VBA của Access ngày nó nhảy tùm lum khi cả tháng và ngày <=12. Khắc phục bằng cách chuyển ngày thành số nguyên sồ truy vấn bình thường. Đơn giản vậy mà đã mò mẫm cả tuần nay luôn đó.
Một lời khuyên cho bạn và các bạn khác có dùng cái gì liên quan đến ngày tháng.
Tốt nhất là sử dụng Canlender để nhập, không nhập bằng tay.