Write Code to Initialize the Application (dbExpress Tutorial)

From RAD Studio
Jump to: navigation, search

Go Up to Tutorial: Using dbExpress to View and Update Databases in an Application

When the application launches, we need to perform some initialization.

Extra Declarations

You need to declare some variables.

Delphi

Click the Code tab.

Add "DBXDataExpressMetaDataProvider" to the uses clause. Make sure that "System.IniFiles" and "System.StrUtils" are also in the uses clause.

Add the following declarations to the type part of the interface section:

  private
    { Private declarations }
    TableName: String;
    AllTables: TStringList;  //list of database tables
    FMetaDataProvider: TDBXDataExpressMetaDataProvider;
    MemoForm: TFormCurrentField;  //form to view individual elements in database table

We will use these variables later. In particular, TFormCurrentField is a type we will declare in a later section.

Add a constant needed for initialization at the end of the interface section:

const
  sDefaultFilterText = 'Filter (* as wild)';

C++

Click the cdsmain.h tab and add the following to the #include list:

#include <DBXDataExpressMetaDataProvider.hpp>

Add these variables under private in cdsmain.h:

private:	// User declarations
  // Private declarations
  String TableName;
  TStringList *AllTables;  //list of database tables
  TDBXDataExpressMetaDataProvider *FMetaDataProvider;
  TFormCurrentField *MemoForm;  //form to view individual elements in database table

We will use these variables later. In particular, TFormCurrentField is a type we will declare in a later section.

Add a constant needed for initialization to cdsmain.h:

#define sDefaultFilterText "Filter (* as wild)"

Initialization Code

Now add the initialization code for this example application. In the Design view, select the form, then double-click the OnCreate event in the Object Inspector's Event tab. This creates the event handler stub and changes focus to the Code Editor. We add the following code:

Delphi

procedure TForm2.FormCreate(Sender: TObject);
var
  IniFile: TIniFile;
  SectionsList: TStringList;  //for list of connections
  TempStr: String;
  I: Integer;
begin
  EditFilter.Text := sDefaultFilterText;
  // Get information on current database connections
  IniFile := TIniFile.Create(GetConnectionRegistryFile);

  // Get a list of the database connections available
  SectionsList := TStringList.Create;
  IniFile.ReadSections(SectionsList);

  // Add the connections to the combo box.
  // Each valid connection should end with the characters 'CONNECTION',
  // and only these are added.
  SectionsList.Sort;
  for I := 0 to SectionsList.Count - 1 do
  begin
    TempStr := UpperCase(AnsiRightStr(SectionsList[I], Length('connection')));
    if TempStr = 'CONNECTION' then
    begin
      ComboBoxConnections.Items.Add(SectionsList[I]);
    end;
  end;

  // Free objects no longer needed.
  FreeAndNil(IniFile);
  FreeAndNil(SectionsList);
end;

C++

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TIniFile *IniFile;
  TStringList *SectionsList;  //for list of connections
  String TempStr;
  int I;

  // Initialize objects
  AllTables = NULL;
  FMetaDataProvider = NULL;
  MemoForm = NULL;

  EditFilter->Text = sDefaultFilterText;

  // Get information on current database connections
  IniFile = new TIniFile(GetConnectionRegistryFile());

  // Get a list of the database connections available
  SectionsList = new TStringList();
  IniFile->ReadSections(SectionsList);

  // Add the connections to the combo box.
  // Each valid connection should end with the characters 'CONNECTION',
  // and only these are added.
  SectionsList->Sort();
  for (I = 0; I < SectionsList->Count; I++)
  {
	TempStr = UpperCase(AnsiRightStr(SectionsList->Strings[I], strlen("connection")));
	if (TempStr == "CONNECTION")
	{
	  ComboBoxConnections->Items->Add(SectionsList->Strings[I]);
	}
  }

  // Free objects no longer needed.
  delete IniFile;
  IniFile = NULL;
  delete SectionsList;
  SectionsList = NULL;
}

Comments

The GetConnectionRegistryFile function gets information on all connections in the Data Explorer. This String is needed for the TIniFile constructor. We can then use the TIniFile object's ReadSections procedure to get a list of all database connections.

Only connections that end in "CONNECTION" are actually added to the combo box.

Previous

Populate Main Dialog with Components

Next

Develop Code to Handle Main Events