Re: Creating a Report via VBA

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Albert D. Kallal

    Re: Creating a Report via VBA

    Use the "where" clause, and make the reports sql *without* any
    parameters..and you not need to change the params..

    So, you can build a un-bound form (a un-bound form is a form that is NOT
    attached to a table - these forms are typically designed for user interface
    face stuff like prompts, print buttons etc).

    The following screen shots are all un-bound forms, and they simply prompt
    the user for information.



    The above should give you some ideas

    So, the solution use now is simply to take the values from the form, and
    build your own where clause in code. That way, you simply design the reports
    (or forms), and attached them to the query. And, NO FORMS conditions are
    placed in the query.

    To "send" the conditions to the report (or form), you simply use the "where"
    clause. This is exactly why ms-access has this feature...and it solves a
    zillion problems...and will reduce your development costs by a substantial
    amount.

    The code to make those above screens work and launch the report with the
    selected restrictions when you hit the "print" button is easy:


    dim strWhere as string

    ' select sales rep combo

    if isnull(cboSales Rep) = false then

    strWhere = "SalesRep = '" & cboSalesRep & "'"

    end if

    ' select what City for the report

    if isnull(cboCity) = false then
    if strWhere <"" then
    strWhere = strWhere " and "
    endif
    strWhere = strWhere & "City = '" & cobCity & "'"
    end if

    Note how the 2nd combo test is setup. You can add as "many" more conditions
    you want. Lets say we have a check box to only include Special Customers. We
    can add to our very nice prompt screen a check box to

    [x] Show Only Special customers

    The code we add would be:

    if chkSpeicalOnly = True then
    if strWhere <"" then
    strWhere = strWhere " and "
    endif
    strWhere = strWhere & "SpecialCus t = true"
    endif

    For sure, each combo and control we add to the nice report screen takes a
    bit of code, but no more messy then the query builder..and this way, each
    query is nice and clean, and free of a bunch of HIGHLY un-maintainable
    forms! expressions.

    Further, it means you can re-use the same query for different reports, and
    have no worries about some form that is supposed to be open. So, a tiny bit
    more code eliminates the messy query problem.. For me, this is very worth
    while trade.

    For a date range, we could put two calendar controls on the screen. The code
    could be:


    dim strWhere as string
    dim strStartDate as string
    dim strEndDate as string


    strStartDtae = "#" & format(me.Start DateContorl,"mm/dd/yyyy") & "#"
    strEndDate = "#" & format(me.EndDa teContorl,"mm/dd/yyyy") & "#"

    strWhere = "InvoiceDat e is between " & strStartDate & " and " & strEndDate

    docmd.openRepor t "InvoiceReport" ,acViewPreview, ,strWhere


    --
    Albert D. Kallal (Access MVP)
    Edmonton, Alberta Canada
    pleaseNOOSpamKa llal@msn.com


Working...