rbWiki > DADE > Fundamentals > Update Database Name

Update Database Name

How to modify the DatabaseName stored with a DADE Query

Currently when DADE is used to create dataviews, the DatabaseName is stored as part of the query definition. (This is consistent with Delphi's approach to specifying a database connection for a Query object).

In some cases, you may decide that the DatabaseName needs to be modified at a later date.

We recommend that the DatabaseName refer to a TDatabase connection component or to an Alias to provide flexibility for changing the connection parameters.

A second way to handle this issue is to implement some code that specifies a DatabaseName whenever a template is loaded. This can be accomplished by using the Report.Template.OnLoadEnd event.

  1. Declare an event-handler procedure in the private section of your form declaration.
    type
       myForm = class(TForm)
         private
           procedure ReportTemplateLoadEndEvent(Sender: TObject);
         public
       end;
  2. Use the FormCreate event to assign the event-handler to the event property.
    procedure myForm.FormCreate(Sender: TObject)
    begin
      Report1.Template.OnLoadEnd := ReportTemplateLoadEndEvent;
    
    end;
  3. Add code to the event-handler to specify the database name.
     
    procedure myForm.ReportTemplateLoadEndEvent(Sender: TObject)
    var
      lSQL: TdaSQL;
    
    begin
      if GetSQLObject(Report1, lSQL) then
        begin
          lSQL.DatabaseName := Designer.DataSettings.DatabaseName;
          SetSQLObject(Report, lSQL);
          lSQL.Free;
    
        end;
    
    end;


    Below is a tech tip for extracting the SQL object from a report. TdaSQL is a class defined in daSQL.pas.
    The example code extracts only DataViews[0]. If the report contains multiple dataviews, you will need to iterate thru all of the entries in the DataViews[] array.

    How to access the SQL object associated with a Report created using DADE
    uses
      daDatMod;
    
    function GetSQLObject(aReport: TppReport; var aSQL: TdaSQL): Boolean;
    var
      lDataModule: TdaDataModule;
      lDataView: TdaDataView;
    begin
    
      aSQL := TdaSQL.Create(nil);
    
      {get the datamodule}
      lDataModule := daGetDataModule(aReport);
    
      if (lDataModule <> nil) then
        begin
          lDataView := lDataModule.DataViews[0];
    
          if (lDataView <> nil) and (lDataView is TdaQueryDataView) then
            aSQL.Assign(TdaQueryDataView(lDataView).SQL);
    
        end;
    
      Result := (aSQL <> nil);
    
    end;
    
    procedure SetSQLObject(aReport: TppReport; aSQL: TdaSQL);
    var
      lDataModule: TdaDataModule;
      lDataView: TdaDataView;
    begin
    
      {get the datamodule}
      lDataModule := daGetDataModule(aReport);
    
      if (lDataModule <> nil) then
        begin
          lDataView := lDataModule.DataViews[0];
    
          if (lDataView <> nil) and (lDataView is TdaQueryDataView) then
            TdaQueryDataView(lDataView).SQL := aSQL;
    
        end;
    
    end;
Tags

Files (0)

 
You must login to post a comment.