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

Opinions of ReportBuilder

edited January 2004 in General
Hi,

I've been using the same report writer since D1, and have come to the
conclusion that it may be time to convert to a new report writing system.
I've searched around at different report writers, and so far, only one has
been able to raise to a standard that may make me consider changing report
writers - and that is ReportBuilder.

Firstly, I'm interested in any opinions or suggestions that people may have
about Reportbuilder. (I understand that they are most likely biassed, being
in this newsgroup, but that's fine - at least it'll give me more selling
points to give to my wife. ;-)

Also - apart from any opinions you may be able to give me, I'm also
interested in the following areas, and if ReportBuilder is capable of doing
this. (And how difficult. )

1) Their's talk about a query designer within the report. Does this work
with DBISam?

2) Can someone confirm that there are no external packages (dll's) that need
to be shipped. (I like shipping only a .exe with my program).

3) I like to create a default header for reports in each of my application.
In the past, I have created one band on a "master report" of my application,
where I place things like Logo's, addresses, contact information, etc. Then
when I print each seperate report from my application, it 'pulls'
information from this band into a pageheader band on the report I am running
before it compiles the report. This way all reports I have look uniform
(same header), and I only have to change this in one spot for it to change
for all reports. Can this be done with Reportbuilder easily?

4) Is it possible to have the report manually step through the underlying
datasets. (ie - instead of the report automatically going to the next record
in a table, and finishing when it gets to the bottom, I have events where I
tell the table when to skip to the next record, and when the table is
finished).

5) Is it easy to programically (during design time), specify which printer a
report will print to (or to allow users to select a default printer for each
individual report).

I'd appreciate any feedback (as long as it's not a flame ;-)

Thanks & Regards

Adam.

Comments

  • edited January 2004
    Hi Adam,

    Being a Digital Metaphors engineer, my opinion of ReportBuilder is probably
    obvious so I will gladly answer your questions below and hopefully some
    others reading this newsgroup will give you their opinions on our product's
    reliability, support, features, etc...

    1. Yes. ReportBuilder Pro comes with DADE (Data Access Development
    Environment). This adds a new section to the Report Designer that enables
    developers and end-users to visually design and preview SQL queries. We
    provide many database plugins for DADE (including DBISAM) along with demos
    to make connecting to a database very simple.

    2. Yes, it is possible to ship your application as one executable using
    ReportBuilder. This is granted you do not need to ship with several
    different language translations in which case you will need to install the
    included language .dll files on your user's machine for the translation to
    show up.

    3. All Reports are created as Templates which can be saved as files (.rtm)
    or saved as a BLOB field on a database. It is possible to create a template
    that just includes your header information and dynamically load that into a
    Subreport in your current report's header band. This would give every one
    of your reports a uniform header without having to recreate it each time.
    An example of how to do this can be downloaded below.

    http://www.digital-metaphors.com/tips/HeaderUsingSubReport.zip

    4. ReportBuilder uses a component named TppDataPipeline which essentially
    connects any TDataSet descendent to a Report component. The DataPipeline
    includes methods that give you the ability to move forward, backward and set
    bookmarks to navigate through the connected data.

    5. There is a complete PrinterSetup class which can be accessed from the
    Report object that controls most aspects of the printer to be printed to and
    it's options. These options can be set as default at design time or at
    runtime by an end-user before the report is printed or in the print dialog
    (which you can customize).

    Feel free to download a trial version of ReportBuilder from our website and
    work through some of our demo applications for a better look at what
    ReportBuilder is capable of. I hope this information helps :).

    --
    Best Regards,

    Nico Cizik
    Digital Metaphors
    http://www.digital-metaphors.com
  • edited January 2004
    Adam,
    way back i started reporting in QR, wich was a real pita
    as soon as rave came out i bought it to dump it rather quikly (although i
    was very fond of the inheritance features)
    then i started with reportbuilder and never looked back
    and i can say i've done some fairly complex things with rb, my biggest rtm
    file is 1,5 Gb, consisting of sub reports in sub reports in sub reports and
    so on
    furthermore i've found the support to be superb throughout the years, and
    i'm reportbuilding since version 3 or 4 i guess
    defenately have a look at RAP
    cu
    marc

  • edited January 2004
    Hi Nico,

    Thanks for your reply. I have taken your advice, and downloaded the demo
    copy. I'm enjoying what I'm seeing so far, but have a few queries please:

    (.rtm)
    template
    a


    I'm trying to do this, but keep it all contained within the .exe. The script
    I've tried is as follows:

    var
    tsub : TppSubReport;
    ts1 : TStream;
    begin
    tsub := TppSubReport.Create(Report.Header);
    tsub := TppSubReport.Create(Self);
    tsub.ParentPrinterSetup := False;
    tsub.Band := Report.headerband;
    tsub.ResetPageNo := False;
    ts1 := TMemoryStream.Create;
    reporttemplate.ppHeaderBand1.Report.Template.SaveToStream(ts1);
    tsub.Report.Template.LoadFromStream(ts1);
    Report.Print;
    tsub.Free;
    freeandnil(ts1);
    end;

    Report refers to the current report that I'm going to print, and that I want
    the 'template' header attached to. ppHeaderBand1 refers to a header band
    stored within a TppReport, in a form called reporttemplate. (That I want to
    'copy' across to the current report).

    I get an access violation when I call the
    tsub.Report.Template.LoadFromStream(ts1);

    Can you please show me where I'm getting this wrong. Thansk.


    set

    Fantastic. Is it possible to manipulate this, even if the TppDataPipeline is
    not connected to any sort of dataset?

    Thanks very much for your help.

    Best Regards

    Adam.
  • edited January 2004
    Hi Adam,

    Thanks for evaluating ReportBuilder!

    For your first question. To create a subreport in code you will need a
    TppSubreport (the component you place on your main report) and a
    TppChildReport (the acutal design of the subreport and descendent of
    TppReport). Check out the article I copied at the bottom of this message
    for instructions on creating a subreport in code. Also, if you are looking
    to keep your entire application in one .exe, you could also simply place
    another TppReport component on your form, stream its template and load it
    into a subreport in your main report. This could make things a bit easier
    at first.

    In addition to the TppDataPipeline, ReportBuilder also comes with a
    JITPipeline and TextPipeline. The JITPipeline can be used to connect to
    just about any type of data... from an Excel worksheet to a TStringList.
    This pipeline also gives you the most freedom to do what ever you want with
    your data. If you would like to see a few examples of what is possible with
    the ReportBuilder Pipelines, please check out the Report Demo located in the
    \RBuilder\Demos\1. Reports\... directory. Demos 111-120, and 131-140 should
    give you a better idea what is possible using RB.

    -------------------------------------------------
    TECH TIP: Creating a SubReport in Code
    -------------------------------------------------

    A subreport is comprised of two objects:

    1. SubReport control
    The subreport control is added to a band of the
    'parent' report. It has properties such as
    ShiftRelativeTo, PrintBehavior, etc.
    In the Report Designer, the subreport is drawn
    as a rectangle.


    2. ChildReport
    The child report is a descendant of CustomReport and has
    most of the same properties as a standard Report.
    The child report has a separate layout workspace in the report
    designer that is accessible by selecting the tabs at the bottom
    of the designer.


    When dynamically creating a subreport in code you need to
    create the subreport and the underlying child report.
    The subreport.Report property can then be used to access
    the child report.

    This is demonstrated in the following example:


    var
    lSubReport: TppSubReport;
    lReport: TppChildReport;
    lLabel: TppLabel;
    lDBText: TppDBText;


    begin

    lSubReport := TppSubReport.Create(Self);

    {add to the main report's detail band}
    lSubReport.Band := ppReport1.DetailBand;

    {create the child report (parameters: main report) }
    lSubReport.CreateReport(ppReport1);

    lReport := TppChildReport(lSubReport.Report);

    {assign a datapipeline}
    lReport.DataPipeline := plCustomers;

    {create the default set of bands}
    lReport.CreateDefaultBands;

    lLabel := TppLabel.Create(Self);
    lLabel.Band := lReport.TitleBand;
    lLabel.Caption := 'Customers';

    lLabel.Font.Name := 'Times New Roman';
    lLabel.Font.Size := 24;

    lDBText := TppDBText.Create(Self);
    lDBText.Band := lReport.DetailBand;
    lDBText.DataPipeline := plCustomers;
    lDBText.DataField := 'CustNo';

    lDBText.Color := clYellow;
    lDBText.Font.Name := 'Times New Roman';
    lDBText.Font.Size := 12;

    end;

    --
    Best Regards,

    Nico Cizik
    Digital Metaphors
    http://www.digital-metaphors.com
  • edited January 2004
    Hi Nico,

    So far I have enjoyed my short bit of time playing with your demo - and
    really like what I've seen so far. Thanks!


    Exactily what I'm looking for! This would be fantastic. :-) I've tried to
    do this with the code you attached to the bottom of your last email, as
    follows, but I still get an access violatoin. Can you please check the code
    below , and see if I've missed anything. If not, would you mind if I emailed
    you a copy of my little test project, so you can see what's happening?

    procedure TReportTemplate.Printit(Report: TppReport; Header : TppSubReport);
    var
    tsub : TppSubReport;
    tchd : TppChildReport;
    ts1 : TStream;
    begin
    if not assigned(reporttemplate) then
    Application.CreateForm(Treporttemplate, reporttemplate);

    tsub := TppSubReport.Create(Header);
    tchd := TppChildReport.Create(tsub.Report);
    tchd.DataPipeline := reporttemplate.ppJITPipeline1;
    tchd.CreateDefaultBands;

    ts1 := TMemoryStream.Create;
    reporttemplate.ppHeaderBand1.Report.Template.SaveToStream(ts1);
    tsub.Report.Template.LoadFromStream(ts1); **********ACCESS VIOLATION
    HERE*****
    Report.Print;
    tsub.Free;
    freeandnil(ts1);
    reporttemplate.free;
    end;

    Thanks & Regards

    Adam Hair.
  • edited January 2004
    Hi Marc,

    Thanks very much for your input. Also - being the only one to reply (Besides
    Nico), and to have such a good report, you may strike it lucky and get a
    discount on the next update.

    Cheers

    Adam.

    and
  • edited January 2004
    Hi Nico,

    Please dismiss my last post, as I found out what was wrong.

    I still needed to call Tsub.CreateReport(Report);

    Thanks for all your help...

    Adam.
  • edited January 2004
    I can't let Marc be the only one so here is input from another Mark. I have
    used QuickReports (only because I was required to and the existing reports
    were built with it) and absolutely hated it. I have demonstrated Report
    Builder to my members in my users group and everyone was floored by it's
    ease of use and short learning curve.

    While I am no expert with Report Builder, I am the local "guru" and "flag
    waver" for it. It has made life much simpler in the reporting arena. I
    still have questions from time to time but the Digital Metaphors team has
    always been quick to try to help and for the most part successful. The few
    times they have been stumped was due to third party components used in the
    reports.

    I would strongly recommend Report Builder as your reporting tool especially
    if you are starting a new project.

    Sincerely,
    Mark Greenhaw
    One Domain, Inc.

    --

This discussion has been closed.