Đánh giá chủ đề:
  • 1 Votes - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Hàm convert ngày trong SQL VBA
04-03-12, 11:39 PM (Được chỉnh sửa: 23-07-13 08:59 AM bởi Noname.)
Bài viết: #1
Hàm convert ngày trong SQL VBA
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 025777Xin chào, mình là 025777, Tham gia http://thuthuataccess.com/forum từ ngày 29-12 -11.
Trả lời
05-03-12, 12:03 AM (Được chỉnh sửa: 05-03-12 12:05 AM bởi Noname.)
Bài viết: #2
RE: Nhờ các cao thủ xem hộ đoạn code sử dụng SQL
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 Noname020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Trả lời

Tags: Hàm, convert, ngày, trong,

Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Hỏi] Code lấy một field trong query ra textbox trong Access canhcfc 16 419 Hôm qua 06:05 PM
Bài mới nhất: canhcfc
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 39 10,145 14-10-14 01:58 PM
Bài mới nhất: quanghoasla
  Hiện thông báo tiếng Việt Unicode với hàm MsgBox trong MS. Access lehongduc 4 1,851 17-07-14 06:42 AM
Bài mới nhất: lehongduc
  [Help] Giúp mình khai báo reference trong access . cụ thể là " Microsoft Excel Object librar hoantvbk1987 1 227 12-06-14 11:22 PM
Bài mới nhất: duong100
  Mỗi ngày một code VBA vba 12 5,771 20-05-14 03:46 PM
Bài mới nhất: Antonio Trần

Chuyển nhanh:


Thành viên đang đọc chủ đề: 1 Khách

Liên hệ | Thủ Thuật Access | Lên trên | Nội dung | Bản rút gọn | Tin RSS