• Truy vấn trực tiếp đến textbox subform Bound
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    yamakashi2003 > 08-10-20, 12:55 AM

    (03-10-20, 05:04 PM)ongke0711 Đã viết:
    (03-10-20, 01:59 PM)yamakashi2003 Đã viết:
    Trích dẫn:
    - Thứ hai, bạn muốn chạy Report có nguồn từ cái Datasheet Form vừa được lọc (filtered) thì cần gì phải qua bước tạo Table tạm chi cho mất thời gian, bộ nhớ, bạn lấy thẳng nguồn của Datasheet Form là Record Souce cho Report luôn.

    Code cho nút lệnh "In report": sau khi bạn đã lọc, sort các kiểu trên Subform Datasheet.

    Mã PHP:
    DoCmd.OpenReport "rptABC"acViewPreview, , Me.sfmABC.Form.FilteracWindowNormal 

    Đối với Report: lấy nguồn từ Subform

    Mã PHP:
    Private Sub Report_Open(Cancel As Integer)
        Me.RecordSource Forms![frmMainABC]![sfmABC].Form.RecordSource
    End Sub 
    Bác ơi, e, tạo 1 nút báo cáo theo cách lọc trục tiep trên subform, và 1 nút tìm kiếm trên form bằng textbox
    nếu trước đó em lọc trực tiếp bằng subform thì chạy ra báo cáo ok, 
    nhưng nếu em có nhấn vào nút tìm kiếm mà rồi mới chạy báo cáo thì nó hiện ra hộp thoại paramenter và không ra được kết quả lọc ạ
    Em gửi link flie bác xem giúp
    http://www.mediafire.com/file/lsy22k90mo...accdb/file
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    yamakashi2003 > 08-10-20, 07:45 PM

    Bác @ông kẹ ơi giúp em với
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    tranthanhan1962 > 08-10-20, 09:20 PM

    Hình như tôi có hướng dẫn cách tham chiếu đối tượng trên form, nhất là sub form bằng cách tạo một query tạm rồi vào Build...
    --> Expression Build --> Expression elements, sao đó tìm đến form --> subform thuộc form --> Expression Categories và Expression Values tìm đúng yêu cầu đối tượng tham chiếu sau đó đưa vào code (có ảnh đầy đủ, bạn có thể tim lại bài hướng dẫn này để nắm rõ hơn).
     Về phần đoạn code của bạn:
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Me.SF_ChitietHang.Form.Filter, acWindowNormal
    Ban sử dụng tham chiếu Me.SF_ChitietHang.Form để tham chiếu đến sub form là sai. Me.SF_ChitietHang là tham chiếu đến cái control Subform/Subreport đang chứa form F_ChitietHang và cái này chắc chắn không có thuộc tính Filter, do đó nó báo lỗi là dương nhiên. Nếu làm theo cách của tôi bạn sẽ thấy đối tượng tham chiếu sẽ là Forms![F_BaoCao]![SF_ChitietHang].Form.Filter và bạn chỉ cần thay thế Me.SF_ChitietHang.Form.Filter = Forms![F_BaoCao]![SF_ChitietHang].Form.Filter
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Forms![F_BaoCao]![SF_ChitietHang].Form.Filter, acWindowNormal
    Lúc này nó sẽ chạy ngon lành và không còn báo lỗi.
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    yamakashi2003 > 09-10-20, 01:05 AM

    (08-10-20, 09:20 PM)tranthanhan1962 Đã viết: Hình như tôi có hướng dẫn cách tham chiếu đối tượng trên form, nhất là sub form bằng cách tạo một query tạm rồi vào Build...
    --> Expression Build --> Expression elements, sao đó tìm đến form --> subform thuộc form --> Expression Categories và Expression Values tìm đúng yêu cầu đối tượng tham chiếu sau đó đưa vào code (có ảnh đầy đủ, bạn có thể tim lại bài hướng dẫn này để nắm rõ hơn).
     Về phần đoạn code của bạn:
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Me.SF_ChitietHang.Form.Filter, acWindowNormal
    Ban sử dụng tham chiếu Me.SF_ChitietHang.Form để tham chiếu đến sub form là sai. Me.SF_ChitietHang là tham chiếu đến cái control Subform/Subreport đang chứa form F_ChitietHang và cái này chắc chắn không có thuộc tính Filter, do đó nó báo lỗi là dương nhiên. Nếu làm theo cách của tôi bạn sẽ thấy đối tượng tham chiếu sẽ là Forms![F_BaoCao]![SF_ChitietHang].Form.Filter và bạn chỉ cần thay thế Me.SF_ChitietHang.Form.Filter = Forms![F_BaoCao]![SF_ChitietHang].Form.Filter
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Forms![F_BaoCao]![SF_ChitietHang].Form.Filter, acWindowNormal
    Lúc này nó sẽ chạy ngon lành và không còn báo lỗi.
    Bác ơi em thử sửa lại vào file em gửi ở trên thì vẫn bị lỗi đó mà bác,
    vẫn hiện ra cái paramenter
    Lỗi này chỉ xảy ra khi em ấn nút tìm kiếm trước, xong rồi  lọc subform rồi ấn nút chạy report
    nếu không ấn nút đó thì lọc (sort) subform rồi chạy report vô tư ạ
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    ongke0711 > 09-10-20, 08:58 AM

    (08-10-20, 12:55 AM)yamakashi2003 Đã viết: Bác ơi, e, tạo 1 nút báo cáo theo cách lọc trục tiep trên subform, và 1 nút tìm kiếm trên form bằng textbox
    nếu trước đó em lọc trực tiếp bằng subform thì chạy ra báo cáo ok, 
    nhưng nếu em có nhấn vào nút tìm kiếm mà rồi mới chạy báo cáo thì nó hiện ra hộp thoại paramenter và không ra được kết quả lọc ạ

    Bị lỗi là do bạn trộn 2 phương pháp xử lý lọc dữ liệu với nhau.
    Phương pháp tôi hướng dẫn ở trên là do bạn muốn thao tác bấm lọc trực tiếp trong Subform dạng Datasheet, nó có sẳn các công cụ Sort, Filter. Trường hợp này RecordSource của Datasheet Form không bị thay đổi (vd: qryABC hoặc tblABC), chỉ thay đổi thuộc tính Filter trong Property sheet của form thôi. Ví dụ: Filter: ([qryABC].[MaSKU] ="HH001")
    Còn trong file bạn đã dùng thêm cách lọc khác là dùng code VBA thay đổi Record Source của Form tuỳ theo điều kiện lọc. Ví dụ: "Select...From ... Where [maSKU] ='" & Me.txtmaSKU & "'". Khi đó Record Source của Form là câu lệnh truy vấn kia chứ không còn là một đối tượng Query hay Table cố định nữa. Do đó dòng Filter trong Property sheet tìm không ra đối tượng Query/Table mà nó cần tham chiếu - ([qryABC].[MaSKU] ="HH001").

    Tóm lại: Trong trường hợp muốn tận dụng Form Record Source cho Report thì: 
    - Một là dùng code xử lý Record Source cho Form và phải vô hiệu hoá tính năng Filter của Datasheet Form. 
    - Hai là chỉ sử dụng thuần tuý công cụ Filter có sẳn của Datasheet form thôi, không can thiệp thay đổi Record Source của Form.
    - Cách thứ 3 nếu muốn áp dụng vừa đổi RecordSource vừa lọc được trong Datasheet mà vẫn lấy Source được cho Report thì đòi hỏi thêm code VBA để xử lý. Đó là vẫn dùng Query (vd: qryABC) làm Source cho Form, sau khi viết code tạo câu lệnh SQL tuỳ theo điều kiện thì sẽ cập nhật lại cho qryABC. Khi đó Source cho Form vẫn là qryABC nhưng nội dung của query đã thay đổi.
    Bạn ngâm cứu đối tượng QueryDef đi.

    Ví dụ:

    Mã PHP:
    Dim qd As DAO.QueryDef
    Set qd 
    CurrentDb.QueryDefs("qryABC")
    qd.SQL "SELECT ... FROM ... WHERE ..." 
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    tranthanhan1962 > 09-10-20, 11:38 AM

    (09-10-20, 01:05 AM)yamakashi2003 Đã viết: Bác ơi em thử sửa lại vào file em gửi ở trên thì vẫn bị lỗi đó mà bác,
    vẫn hiện ra cái paramenter
    Lỗi này chỉ xảy ra khi em ấn nút tìm kiếm trước, xong rồi  lọc subform rồi ấn nút chạy report
    nếu không ấn nút đó thì lọc (sort) subform rồi chạy report vô tư ạ
    Form accdb có đặt điểm là đôi khi nhớ điều kiện lọc cũ. Lỗi trên do khi bạn lọc lần trước form vẫn nhớ điều kiện lọc nhưng lần kế tiếp nó không thấy giá trị lọc ở điều kiện đó. Khi lỗi xảy ra nếu bạn mở form ở chế độ design bạn sẽ thấy trong propeties/Data/Filter sẽ có một đoạn biểu thức lọc, mặc dù bạn chưa từng làm điều gì ở đó. Khi xóa biểu thức này form sẽ hoạt động lại bình thường. Nhưng chẳng lẽ mỗi lần lỗi lại mở design để xử lý điều này. Cách xử lý:
    1/ Tự động xóa nhớ bộ lọc trên form (nếu có):
    Private Sub Command12_Click()
    'DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Me.SF_ChitietHang.Form.Filter, acWindowNormal
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Forms![F_BaoCao]![SF_ChitietHang].Form.Filter, acWindowNormal
    Forms![F_BaoCao]![SF_ChitietHang].Form.FilterOn = False (đoạn code này thêm vào để bỏ lọc trên form)
    End Sub
    2/ Khởi động lại bộ lọc form
    Private Sub btnTim_Click()
    Forms![F_BaoCao]![SF_ChitietHang].Form.FilterOn = true
    Dim STRSQL As String
        Select Case FR_DKTK
    ...
    OK!
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    yamakashi2003 > 12-10-20, 12:07 PM

    (09-10-20, 11:38 AM)tranthanhan1962 Đã viết:
    (09-10-20, 01:05 AM)yamakashi2003 Đã viết: Bác ơi em thử sửa lại vào file em gửi ở trên thì vẫn bị lỗi đó mà bác,
    vẫn hiện ra cái paramenter
    Lỗi này chỉ xảy ra khi em ấn nút tìm kiếm trước, xong rồi  lọc subform rồi ấn nút chạy report
    nếu không ấn nút đó thì lọc (sort) subform rồi chạy report vô tư ạ
    Form accdb có đặt điểm là đôi khi nhớ điều kiện lọc cũ. Lỗi trên do khi bạn lọc lần trước form vẫn nhớ điều kiện lọc nhưng lần kế tiếp nó không thấy giá trị lọc ở điều kiện đó. Khi lỗi xảy ra nếu bạn mở form ở chế độ design bạn sẽ thấy trong propeties/Data/Filter sẽ có một đoạn biểu thức lọc, mặc dù bạn chưa từng làm điều gì ở đó. Khi xóa biểu thức này form sẽ hoạt động lại bình thường. Nhưng chẳng lẽ mỗi lần lỗi lại mở design để xử lý điều này. Cách xử lý:
    1/ Tự động xóa nhớ bộ lọc trên form (nếu có):
    Private Sub Command12_Click()
    'DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Me.SF_ChitietHang.Form.Filter, acWindowNormal
    DoCmd.OpenReport "R_ChitietHang", acViewPreview, , Forms![F_BaoCao]![SF_ChitietHang].Form.Filter, acWindowNormal
    Forms![F_BaoCao]![SF_ChitietHang].Form.FilterOn = False (đoạn code này thêm vào để bỏ lọc trên form)
    End Sub
    2/ Khởi động lại bộ lọc form
    Private Sub btnTim_Click()
    Forms![F_BaoCao]![SF_ChitietHang].Form.FilterOn = true
    Dim STRSQL As String
        Select Case FR_DKTK
    ...
    OK!
    Bác ơi cách của bác em có thử thì lại có 2 thông báo lỗi,
    lúc trước nếu ấn nút tìm kiếm trươc rồi mới filter form và ấn nút báo cáo thì mới có lỗi, (tức là mình gán lại recoure source cho form thì ấn nút báo cáo rồi mới lỗi)
    giờ sửa lại code như này thì ấn cả nút tìm kiếm (ấn 1-2 lần), nút báo cáo đều hiện ra hộp paramenter
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    tranthanhan1962 > 12-10-20, 02:15 PM

    Gởi bạn Demo tôi chỉnh sửa từ file của bạn. Trên máy tôi nó hoạt đông ổn định, bình thường cho dù lọc rồi báo cáo hay báo cáo rồi lọc cũng không hỏi tham số parameter. Nếu trên máy bạn nó vẫ đòi tham số thì bó tay.  021
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    yamakashi2003 > 12-10-20, 11:41 PM

    (12-10-20, 02:15 PM)tranthanhan1962 Đã viết: Gởi bạn Demo tôi chỉnh sửa từ file của bạn. Trên máy tôi nó hoạt đông ổn định, bình thường cho dù lọc rồi báo cáo hay báo cáo rồi lọc cũng không hỏi tham số parameter. Nếu trên máy bạn nó vẫ đòi tham số thì bó tay.  021
    Em bật file này ở máy khác vẫn lỗi ạ,
    Em ấn nut tìm kiếm- rồi lọc -và báo cáo thì mới lỗi
    Em gửi bác video báo lỗi, bác xem giúp em
    http://www.mediafire.com/file/01cj4fxos4...7.mp4/file
    Em xin cảm ơn
  • RE: Truy vấn trực tiếp đến textbox subform Bound

    tranthanhan1962 > 13-10-20, 01:15 AM

    Hiểu rồi! Bạn phải sử dụng bộ lọc của bạn. Dựa trên query bạn tạo. Do bạn dùng bộ lọc hệ thống để lọc, nên khi kiểm tra record source của form F_ChitietHang là Q_chitietHang, nó sẽ thấy thiếu tham số nên đòi bạn nhập tham số vào. Đây không phải lỗi mà do bạn xác định nguồn của query do bạn đặt tham số, nhưng bạn dùng phương pháp khác để xử lý. thiếu tham số thì nó đòi thôi.
    Nếu bạn làm đúng "quy trình" thì nó sẽ không báo lỗi