Đánh giá chủ đề:
  • 1 Votes - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Hàm convert ngày trong SQL VBA
#1
Mình sử dụng đoạn code sau để xem kết quả. rptXemKQKDThang sử dụng nguồn là qryXemKQKD.

Vấn đề xảy ra là :
- khi cboThang = 1 thì mọi thứ ok
- Khi chỉ muốn xem tháng 2, 3, 4, ... (cboThang = 2,3,4, ...) thì query vẫn chọn các hợp đồng trong tháng 1, ,mặc dù đã có điều kiện chặn dưới (tblHopDong.Ngay)>=CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam])
- Điều này không xảy ra khi mình build bằng query design. Nhưng nếu copy đoạn SQL của query các tháng sau vào VBA thì vẫn không sử dụng được điều kiện chặn dưới.

Nhờ các cao thủ xem vấn đề của đoạn code ở đâu.

Sry, do mới tự học Access nên đoạn code hơi gà, rối rắm.

Thx


Trích dẫn:Private Sub cmdXemKQ_Click()

Dim chk As Integer
Dim db As Database
Dim qdf As QueryDef
Dim strSQL As String
Dim strDateFrom As String
Dim strDateTo As String
Dim RevMonth As Double
Dim RevPeriod As Double
Dim ProfitMonth As Double
Dim CostMonth As Double
Dim CostPeriod As Double
Dim ProfitPeriod As Double
Dim dte As Date

Set db = CurrentDb

'Kiem tra loai bao cao

If cboChonBaoCao.Value = "Báo cáo KQKD" Then chk = 1
If cboChon.Value = "Báo cáo l??ng" Then chk = 2
If cboChon.Value = "Báo cáo b?o hi?m" Then chk = 3
If cboChon.Value = "Báo cáo thu? TNCN" Then chk = 4

Select Case chk
Case 1
Set qdf = db.QueryDefs("qryXemKQKD")

'Xem 1 NV theo thang
If cboChon = "Cá nhân" Then
If optGiaiDoan.Value = False Then
If IsNull(cboThang) Or IsNull(cboNam) Or IsNull(txtMaNV) Then
MsgBox "Ban chua chon du thong tin "
Exit Sub
Else
Select Case cboThang
Case "1", "3", "5", "7", "8", "10", "12"
strSQL = "SELECT tblHopDong.MaNV, tblNhanVien.HoTen, tblHopDong.Ngay, tblHopDong.CongTY, tblHopDong.HopDongID, tblHopDong.DoanhThu, tblHopDong.ChiPhi, tblHopDong.LoiNhuan, tblHopDong.ThanhToan, DSum('DoanhThu','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/31/' & [Forms]![frmXemKQKD]![cboNam])') AS TongDT, DSum('ChiPhi','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/31/' & [Forms]![frmXemKQKD]![cboNam])') AS TongCP, [TongDT]-[TongCP] AS TongLN FROM tblNhanVien INNER JOIN tblHopDong ON tblNhanVien.MaNV = tblHopDong.MaNV WHERE (((tblHopDong.MaNV)=[Forms]![frmXemKQKD]![cboMaNV])" & _
"AND ((tblHopDong.Ngay)>=CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam])) AND ((tblHopDong.Ngay)<=CDate([Forms]![frmXemKQKD]![cboThang] & '/31/' & [Forms]![frmXemKQKD]![cboNam])));"

qdf.SQL = strSQL
DoCmd.OpenReport "rptXemKQKDThang", acViewPreview

Case "2"
strSQL = "SELECT tblHopDong.MaNV, tblNhanVien.HoTen, tblHopDong.Ngay, tblHopDong.HopDongID, tblHopDong.DoanhThu, tblHopDong.ChiPhi, tblHopDong.LoiNhuan, tblHopDong.ThanhToan, DSum('DoanhThu','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/28/' & [Forms]![frmXemKQKD]![cboNam])') AS TongDT, DSum('ChiPhi','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/28/' & [Forms]![frmXemKQKD]![cboNam])') AS TongCP, [TongDT]-[TongCP] AS TongLN, tblHopDong.CongTy FROM tblNhanVien INNER JOIN tblHopDong ON tblNhanVien.MaNV = tblHopDong.MaNV WHERE (((tblHopDong.MaNV)=[Forms]![frmXemKQKD]![cboMaNV])" & _
"AND ((tblHopDong.Ngay)>=CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And (tblHopDong.Ngay)<=CDate([Forms]![frmXemKQKD]![cboThang] & '/28/' & [Forms]![frmXemKQKD]![cboNam])));"


qdf.SQL = strSQL
DoCmd.OpenReport "rptXemKQKDThang", acViewPreview
Case "4", "6", "9", "11"
strSQL = "SELECT tblHopDong.MaNV, tblNhanVien.HoTen, tblHopDong.Ngay, tblHopDong.CongTY, tblHopDong.HopDongID, tblHopDong.DoanhThu, tblHopDong.ChiPhi, tblHopDong.LoiNhuan, tblHopDong.ThanhToan, DSum('DoanhThu','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/30/' & [Forms]![frmXemKQKD]![cboNam])') AS TongDT, DSum('ChiPhi','tblHopDong','[MaNV] = Forms![frmXemKQKD]![cboMaNV] and [Ngay]>= CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam]) And [Ngay] <=CDate([Forms]![frmXemKQKD]![cboThang] & '/30/' & [Forms]![frmXemKQKD]![cboNam])') AS TongCP, [TongDT]-[TongCP] AS TongLN FROM tblNhanVien INNER JOIN tblHopDong ON tblNhanVien.MaNV = tblHopDong.MaNV WHERE (((tblHopDong.MaNV)=[Forms]![frmXemKQKD]![cboMaNV])" & _
"AND ((tblHopDong.Ngay)>=CDate([Forms]![frmXemKQKD]![cboThang] & '/01/' & [Forms]![frmXemKQKD]![cboNam])) AND ((tblHopDong.Ngay)<=CDate([Forms]![frmXemKQKD]![cboThang] & '/30/' & [Forms]![frmXemKQKD]![cboNam])));"

qdf.SQL = strSQL
DoCmd.OpenReport "rptXemKQKDThang", acViewPreview
End Select
End If
End If
End If
End Select
End Sub
Chữ ký của 025777 Xin chào, mình là 025777, Tham gia http://thuthuataccess.com/forum từ ngày 29-12 -11.
Reply
Những người đã cảm ơn
#2
Bạn nên dùng chức năng sửa bài viết để đặt lại tiêu đề trước! Đại loại như là "Xem hộ phát biểu hàm convert ngày trong SQL VBA"... hay tương tự! Tiêu đề của bạn quá chung chung và mình hay xóa bỏ những chủ đề như vậy.
Đó là góp ý về cách đặt tiêu đề ở diễn đàn mà mình đã nhắc nhở ở rất nhiều nơi rằng phải đọc nội quy. Mong bạn lưu ý!

----------
Trả lời câu hỏi của bạn.
Để đảm bảo rằng không có nhầm lẫn ngày trước tháng sau hay tháng trước ngày sau. Cách tốt nhất là bạn phát biểu tháng bằng chữ ngày bằng số. Đại loại như là
Mã:
CDate('Jun' & ' 01/' & [Forms]![frmXemKQKD]![cboNam])

Thì mình chắc 100% với bạn sẽ ra ngày 1 tháng 6. Không lẫn vào đâu được.

Hoặc một quy định ít người biết nhưng khả năng thành công cao là bạn phát biểu năm, tháng, ngày với hàm DateSerial(Năm, Tháng, Ngày)
Mã:
Ví dụ: DateSerial('2012','06','01') sẽ trả về ngày 01 tháng 06 năm 2012
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Thủ Thuật] Demo Tổng hợp tất cả các kiểu thông báo tiếng việt trong Access maidinhdan 14 1,161 08-08-15, 08:09 AM
Bài mới nhất: MatTroiNguQuen
  [Thủ Thuật] tạo nút Tìm kiếm trong vòng 30 ngày thanhtruong 9 594 06-08-15, 07:06 PM
Bài mới nhất: ongke0711
  [Hàm] Tính số ngày làm việc trong tuần trong một khoảng thời gian ongke0711 0 139 25-07-15, 10:06 PM
Bài mới nhất: ongke0711
  [Thủ Thuật] [Share Code] Demo Quay số trúng thưởng theo danh sách trong table maidinhdan 6 565 13-07-15, 05:44 AM
Bài mới nhất: tranthanhan1962
  Tạo máy tính cầm tay, trang excel ngay trên form tt1212 3 337 24-06-15, 10:23 AM
Bài mới nhất: tt1212

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)