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

AV after Update from 6.02 --> 6.03

edited December 2001 in General
After Updating RB from Version 6.02 to 6.03 I get an AV when calling the
TppReport.Print- method.

The first time I open the PrintPreview-Form everything works fine, but when
closing the Preview-Form and open it again an AV always occurs.
I didn't change anything in the code since updating.

When reinstalling RB 6.02 everything works fine again.

Do I have to reset something after closing the Preview-Form? This is my
expectation because the AV only occurs the second time I call
TppReport.Print.

I'm working with Delphi 5 UpdatePack1, IBX 4.63.

Comments

  • edited December 2001

    Sounds like you have a corrupt installation.

    If you still have an issue, then create simple Delphi project and e-mail
    to support@digital-metaphors.com.


    --------------------------------------------
    Article: Cleaning up a Corrupt Installation
    --------------------------------------------

    If you have been advised by Digital Metaphors technical support that you
    may have a corrupt installation, or if you are having difficulty
    installing, compiling or running applications after a ReportBuilder
    install, then it may be necessary to manually remove all ReportBuilder
    files from your system. Corrupt installations usually result when you
    are installing over a previous version of ReportBuilder which was not
    installed into the default directory, which was recompiled from the
    source, or when ReportBuilder files were manually moved from the default
    install location. Cleaning up a corrupt installation, consists of
    locating all ReportBuilder related files, and deleting them from your
    system. The first step is to use the uninstall program to remove as
    much of ReportBuilder as possible.


    Run the uninstall program

    1. Exit Delphi, and all other applications. You should have no
    applications running except the uninstall, otherwise you may lose some
    of your work.

    2. Select Start | Settings | Control Panel from your Windows desktop.

    3. Double-click the Add/Remove programs icon.

    4. Locate the version of ReportBuilder you wish uninstall and
    double-click it.

    5. The first page of the Uninstall Wizard allows you to choose between
    an Automatic or Custom uninstall. Choose Custom and click the Next
    button.

    6. Click the Select All button, then the Next button. Repeat these
    steps until you reach the last page of the wizard.

    7. Click the Finish button. All of the items you selected will be
    removed from the system.

    8. After all the ReportBuilder files are removed, you may be prompted
    to reboot the system. If this is the case, reboot the system.


    Delete the ReportBuilder root directory (and all subdirectories)

    1. Using the Windows Explorer, locate the ReportBuilder root directory.
    The default directory is:

    C:\Program Files\Borland\DelphiX\RBuilder

    2. Once you have located this directory, inspect it. If you have any
    custom work in this directory which you would like to keep, move it to
    another directory.

    3. Delete the ReportBuilder root directory.


    Delete all remaining ReportBuilder files

    1. Using the Windows Explorer, search the entire hard drive for all
    occurrences of:

    dclRB*.bpl
    dclRB*.dcp
    rb*.bpl
    rb*.dcp

    2. Delete any occurrences which correspond to the version you are
    removing. All packages are named with the convention NN, where
    the first number is the ReportBuilder version and the second number is
    the Delphi version. Thus, a typical package name for Delphi 5 would be
    rbRCL45.bpl. The same package for Delphi 4 would be: rbRCL44.bpl.
    Check Installing ReportBuilder for a list of the packages associated
    with each version.

    3. Using the Windows Explorer, search your hard drive for all
    occurrences of:

    pp*.*
    da*.*
    ra*.*

    4. These are the prefixes used by individual ReportBuilder units. 'pp'
    is used for ReportBuilder units, 'da' is used for DADE units, and 'ra'
    is used for RAP units. Depending on which ReportBuilder you have
    (Standard, Professional or Enterprise) you may not have all of these
    unit types.



    Additional Notes

    1. Never have Delphi running when installing ReportBuilder.

    2. All ReportBuilder related files should be stored in the root
    directory $(DELPHI)\RBuilder.

    3. All ReportBuilder run-time packages should be stored in the
    Windows\System directory.

    4. You should never have ReportBuilder files in Delphi\Lib, Delphi\Bin
    or Delphi\Projects\Bpl.

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




    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
  • edited December 2001
    I have deinstalled the ReportBuilder by exactly following the instructions
    and installed RB again.

    The problem persists.

    The first time I call the TppReport.Print method the (DeviceType = dtScreen)
    the PrintPreview is shown normal. After closing the PrintPreview and trying
    to open it again the AV occurs.

    Before calling the TppReprt.Print method we do the follwing:
    Initializing
    - creating a variable amount of TIBQuery and TppDBPipelines dynamically
    - TppReport.Template.ResetDevices
    - TppReport.Template.Reset
    - TppReport.Template.LoadFromFile
    - TppReport.Printer.Initialize

    Opening Datasets
    - Setting AutoCreateFields of all TppDBPipeLines to True
    - Open all Querys with Unidirectional-prop set to True

    ... then we call Print (ModalPreview is set to True)

    after closing the PrintPreview we do the following
    - close all Querys
    - set AutoCreateFields of all TppDBPipeLines to False
    - Free all dynamically created components (TIBQuerys and TppDBPipeLines)
    - TppReport.ResetDevices
    - TppReport.Reset

    Debugging the code I've found the following snippet. The AV occurs when
    calling "lDataPipeline.CheckLinkedData", "lDataPipeline.IsLinked".

    { TppDataPipeline.CheckDetailData }

    function TppDataPipeline.CheckDetailData: Boolean;
    var
    liIndex: Integer;
    lDataPipeline: TppDataPipeline;
    begin

    if (FDetailPipelines = nil) or not(FDetailSkip) then
    Result := True
    else
    begin
    Result := False;

    {check all details, to see if any have data}
    liIndex := 0;

    while not(Result) and (liIndex < FDetailPipelines.Count) do
    begin
    lDataPipeline := TppDataPipeline(FDetailPipelines[liIndex]);

    // Here!

    if (ppdaNoRecords in lDataPipeline.State) or
    (lDataPipeline.IsLinked and (lDataPipeline.CheckLinkedData <>
    0)) then
    Inc(liIndex)
    else
    Result := True;

    end;

    end;

    end; {function, CheckDetailData}

    Thanks

    ===============================END of MESSAGE =======================

This discussion has been closed.