Datenbanken

Borland Database Engine

Globale Tabellenoperationen

Ist es möglich, alle Tabellen eines Datenmoduls mit einem Aufruf zur Laufzeit zu öffnen?

Frage

Ein TDataModule speichert die Anzahl seiner Komponenten im Member ComponentCount, so daß über den Zeiger

Data->ComponentCount

die Anzahl der Komponenten ermittelt werden kann. Analog dazu ist ein Zugriff auf die Komponenten über das Member Components[] möglich, so daß eine Schleife über die Komponenten des Datenmoduls gebildet werden kann.

void OpenAllTables(TDataModule *Data)
{
  int i;
 
  for (i = 0; i < Data->ComponentCount; i++)
    if (dynamic_cast (Data->Components[i]))
      dynamic_cast(Data->Components[i])->Open();
}

Über die Umwandlung

dynamic_cast

überprüft die Schleife, ob es sich bei der Komponente überhaupt um einen Abkömmling von TDataSet handelt. Dieser dynamische Cast stellt sicher, daß nur auf TDataSets zugegriffen wird, da ansonsten der Aufruf Open() schon aufgrund falscher Objekte scheitern könnte.

Lösung

Ist es möglich, mit einem Aufruf alle offenen und editierten Datenquellen zu speichern?

Frage

Ja. Die Vorgehensweise erfolgt analog zum Öffnen der Tabellen, wobei hier jedoch anstelle von Open() die eigene Funktion PostWithCheck() zum Einsatz kommt. Diese Funktion stellt sicher, daß die betroffene Datenquelle entweder im Einfüge- oder Editiermodus ist, da ansonsten kein Post() möglich ist.

Lösung

void PostWithCheck(TDataSet *Data)
{
  if ((Data->State == dsInsert) || 
     (Data->State  == dsEdit  ) )
    Data->Post();
}

Der Rest der Funktion PostAll gleicht dem Code der Funktion OpenAllTables().

void PostAll(TDataModule *Data)
{
  int i;
 
  for (i = 0; i < Data->ComponentCount; i++)
    if (dynamic_cast(Data->Components[i]))
      PostWithCheck(dynamic_cast(Data->Components[i]));
}

Funktion PostWithCheck





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 02:17:09 von textarchiv.alojado.de