Home Subreports
New Blog Posts: Merging Reports - Part 1 and Part 2

SubReport Does not Print When using DisableControls

edited March 2004 in Subreports
Hi

I have a Grid on a form. I am using Tquery component to filter the data. I
also have a report with a subreport.
When I try to use Tquery.DisableControls the Subreport nolonger moves
through the data. It just stays on the same record.
When I do not use disablecontrols the report prints correctly but the
printing process is very slow. Is there anything I can do to correct this.

Thanks
Jeff

Comments

  • edited March 2004

    Correct. If you link the datasets using Delphi's dataSet linking features
    then you cannot disable the controls.In general it is a bad idea to connect
    the data-aware controls on a form to the same data as the report/subreports.

    If you must share the data, here are a couple of possible work arounds you
    can try:

    1. disconnect the data-aware controls from the dataset prior to calling
    Report.Print. Then reconnect them afterwards.

    myDBGrid.DataSource := nil;
    myReport.Print;
    myDBGrid.DataSource = myDataSource;

    2. you could try using ReportBuilder datapipeline linking rather than
    Delphi's datatset linking. Please see the following article.


    ------------------------------------------------------
    Tech Tip: Linking SQL Queries for Master/Detail Data
    ------------------------------------------------------

    The following example shows two options for linking SQL queries to create a
    master/detail relationship.

    In this example, we are using Delphi's DBDemos data to create a
    Customer/Order relationship. Thus we wish to link the Orders detail to the
    Customer master.

    I. Delphi Query Linking
    ------------------------

    a. Set the detail TQuery.DataSource property to point to the master
    query's TDataSource component.

    b. In the SQL "Where" clause for the detail query use a ':' followed by
    the linking field name from the master:

    example
    select *
    from orders
    where orders.CustNo = :CustNo

    Now each time the master record position changes, the detail query will
    automatically be refreshed with the correct result set.


    II. RB DataPipeline Linking
    -----------------------------

    a. Set the detail DataPipeline.MasterDataPipeline to point to the master
    DataPipeline.

    b. Use the detail DataPipeline.MasterFieldLinks property to define the
    linking relationship

    c. In the SQL for the detail, retrieve all records and sort them by the
    linking master field:

    select *
    from Orders
    order by CustNo


    Notes:

    1. Using RB DataPipeline, each query is executed only a single time - thus
    performance is much faster.

    2. RB Professional and Enterprise Editions include a visual Data environment
    for creating SQL queries, defining linking relationships, and creating
    Ask-At-Runtime parameters. Using the RB tools you could create the above
    linked queries in about 10 seconds.


    --
    Tech Support mailto:support@digital-metaphors.com
    Digital Metaphors http://www.digital-metaphors.com





    --
    Nard Moseley
    Digital Metaphors
    http://www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
This discussion has been closed.