• Cho mình hỏi cách tạo report động theo ngày
  • Cho mình hỏi cách tạo report động theo ngày

    BayVeo > 07-12-16, 06:30 PM

    1. Có một query tên Q_ngaynhap với câu SQL: 

    SELECT T_nhaphang.Ma_nhap_hang, T_nhaphang.MaSP, T_nhaphang.TenSP, T_nhaphang.So_luong, T_nhaphang.HanSD, T_nhaphang.Gia, T_nhaphang.Ngay_nhap
    FROM T_nhaphang
    WHERE ((T_nhaphang.Ngay_nhap >= tungay) AND (T_nhaphang.Ngay_nhap <= dengay));


    2. Report tên R_ngaynhap có data source Q_ngaynhap

    3. Form:
    Text_tungay (textbox với format là shortdate)
    Text_denngay (textbox với format là shortdate)
    một nút OK và nút Thoát

    4. Code xử lí nút OK

    Private Sub cmd_OK_Click()
    On Error GoTo loi
    Dim st
    Dim db As Database, Qr As QueryDef
    Dim tungay, denngay As Date

    tungay = Text_tungay
    denngay = Text_denngay

    st = "SELECT T_nhaphang.Ma_nhap_hang, T_nhaphang.MaSP, T_nhaphang.TenSP, T_nhaphang.So_luong, T_nhaphang.HanSD, T_nhaphang.Gia, T_nhaphang.Ngay_nhap FROM T_nhaphang WHERE ((T_nhaphang.Ngay_nhap >= tungay) AND (T_nhaphang.Ngay_nhap <= dengay));"

    Set db = CurrentDb
    Set Qr = db.QueryDefs("Q_nhapngay")
    Qr.SQL = st
    Qr.Close
    Set db = Nothing
    DoCmd.OpenReport "R_nhapngay", acViewPreview
    DoCmd.Maximize
    Exit Sub
    loi:
    Select Case Err.Number
    Case Else
    MsgBox "Loi: " & Err.Number & " - " & Err.Description
    End Select
    End Sub


    Kết quả:
    1. Hiển thị dialog bắt nhập biến tungay và denngay mặc dù trong form mình đã chọn giá trị cho hai textbox này
    2. Report không hiển thị data

    Code sai chỗ nào mong anh em chỉ giúp ạ. Chân thành cám ơn!!!
  • RE: Cho mình hỏi cách tạo report động theo ngày

    maidinhdan > 07-12-16, 09:09 PM

    (07-12-16, 06:30 PM)BayVeo Đã viết: 1. Có một query tên Q_ngaynhap với câu SQL: 

    SELECT T_nhaphang.Ma_nhap_hang, T_nhaphang.MaSP, T_nhaphang.TenSP, T_nhaphang.So_luong, T_nhaphang.HanSD, T_nhaphang.Gia, T_nhaphang.Ngay_nhap
    FROM T_nhaphang
    WHERE ((T_nhaphang.Ngay_nhap >= tungay) AND (T_nhaphang.Ngay_nhap <= dengay));


    2. Report tên R_ngaynhap có data source Q_ngaynhap

    3. Form:
    Text_tungay (textbox với format là shortdate)
    Text_denngay (textbox với format là shortdate)
    một nút OK và nút Thoát

    4. Code xử lí nút OK

    Private Sub cmd_OK_Click()
    On Error GoTo loi
    Dim st
    Dim db As Database, Qr As QueryDef
    Dim tungay, denngay As Date

    tungay = Text_tungay
    denngay = Text_denngay

    st = "SELECT T_nhaphang.Ma_nhap_hang, T_nhaphang.MaSP, T_nhaphang.TenSP, T_nhaphang.So_luong, T_nhaphang.HanSD, T_nhaphang.Gia, T_nhaphang.Ngay_nhap FROM T_nhaphang WHERE ((T_nhaphang.Ngay_nhap >= tungay) AND (T_nhaphang.Ngay_nhap <= dengay));"

    Set db = CurrentDb
    Set Qr = db.QueryDefs("Q_nhapngay")
    Qr.SQL = st
    Qr.Close
    Set db = Nothing
    DoCmd.OpenReport "R_nhapngay", acViewPreview
    DoCmd.Maximize
    Exit Sub
    loi:
    Select Case Err.Number
    Case Else
    MsgBox "Loi: " & Err.Number & " - " & Err.Description
    End Select
    End Sub


    Kết quả:
    1. Hiển thị dialog bắt nhập biến tungay và denngay mặc dù trong form mình đã chọn giá trị cho hai textbox này
    2. Report không hiển thị data

    Code sai chỗ nào mong anh em chỉ giúp ạ. Chân thành cám ơn!!!

    Sai chỗ này: Qr.SQL = st

    Kết luận dù cho sửa đúng thì nó cũng không ra kết quả, Lý do. hàm queryDefs của bạn chẳng có ý nghĩa gì cả, bởi cú pháp st y chang  Q_ngaynhap thế thì bạn chỉ cần 1 dòng đủ: DoCmd.OpenReport "R_nhapngay", acViewPreview

    * Tôi giả sử không có  Q_ngaynhap: thì lúc đó mới sử dụng QueryDefs, còn sử dụng như thế nào thì như bạn làm và có chỉnh 1 chút như sau:

    Mã PHP:
    Dim st as String
    qr 
    As QueryDef
    st 
    "SELECT * FROM T_nhaphang WHERE Ngay_nhap >= tungay AND Ngay_nhap <= dengay;"
    Set qr CurrentDB.CreateQueryDef("Q_ngaynhap"st)
    qr.Execute
    qr
    .Close
    DoCmd
    .OpenReport "R_nhapngay"acViewPreview
    DoCmd
    .Maximize 
    * Ghi chú: đây là cú pháp tạo ra query
    - Ở sự kiện Close_Report bạn sẽ cho xóa cái Q_ngaynhap bằng cú pháp
    Mã PHP:
    CurrentDb.QueryDefs.Delete "Q_ngaynhap" 

    Chỉ có vài dòng như vậy