Mehrere Sitzungen verwalten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenbanksitzungen verwalten - Index

Hinweis: Die Borland Database Engine (BDE) ist veraltet und wird nicht mehr weiterentwickelt. Die BDE wird Unicode beispielsweise nie unterstützen. Sie sollten mit der BDE keine neuen Entwicklungen vornehmen. Überprüfen Sie, ob Sie Ihre vorhandenen Datenbankanwendungen nicht von der BDE nach dbExpress migrieren können.

Wenn Sie eine einzelne Anwendung erstellen, die mehrere Threads zur Ausführung von Datenbankoperationen benutzt, müssen Sie für jeden Thread eine eigene Sitzung erstellen. Die Kategorie BDE der Tool-Palette enthält eine Sitzungskomponente, die sich in der Entwurfszeit in einem Datenmodul oder einem Formular platzieren lässt.

Warnung: Wenn Sie eine Sitzungskomponente einfügen, müssen Sie auch deren Eigenschaft SessionName mit einem einmaligen Wert definieren, damit kein Konflikt mit der SessionName der Standardsitzung entsteht.

Wenn Sie in der Entwurfszeit eine Sitzungskomponente einfügen, wird vorausgesetzt, dass die Anzahl der Threads (also auch der Sitzungen), die für eine Anwendung notwendig sind, in der Laufzahl unverändert bleibt. Es ist jedoch sicher wichtiger, dass eine Anwendung Sitzungen auch auf dynamische Weise erstellen kann. Um Sitzungen dynamisch erstellen zu lassen, rufen Sie die Methode OpenSession des globalen Objekts Bde.DBTables.Sessions während der Laufzeit auf.

OpenSession erwartet einen einzigen Parameter, den Namen jener Sitzung, der unter allen Sitzungsnamen dieser Anwendung einmalig ist. Der folgende Code erstellt und aktiviert dynamisch neue Sitzungen mit einem einmalig generierten Namen:

Sessions.OpenSession('RunTimeSession' + IntToStr(Sessions.Count + 1));
Sessions->OpenSession("RunTimeSession" + IntToStr(Sessions->Count + 1));

Diese Anweisung erzeugt einen einmaligen Namen für eine neue Sitzung, indem sie die aktuelle Anzahl der Sitzungen lädt und diesen Wert um eins erhöht. Beachten Sie, dass dieser Beispielcode nicht wie gewünscht funktioniert, wenn Sie ihn zur dynamischen Erstellung und Entfernung von Sitzungen verwenden. Er zeigt aber dennoch, wie die Eigenschaften und Methoden der Variablen Sessions dazu benutzt werden können, mehrere Sitzungen zu verwalten.

Sessions ist eine Variable des Typs TSessionList, die für BDE-basierte Datenbankanwendungen automatisch instantiiert wird. Verwenden Sie die Eigenschaften und Methoden der Variablen Sessions dazu, mehrere Sitzungen in einer Multithreading-Datenbankanwendung aufzuzeichnen. Die folgende Tabelle fasst die Eigenschaften und Methoden der Komponente TSessionList zusammen:

Eigenschaften und Methoden von TSessionList

Eigenschaft oder Methode Beschreibung

Count

Gibt die Anzahl der aktiven und inaktiven Sitzungen in der Sitzungsliste zurück.

FindSession

Sucht nach einer Sitzung mit dem angegebenen Namen und gibt einen Verweis darauf zurück, oder nil, wenn keine Sitzung mit dem angegebenen Namen vorhanden ist. Wird ein leerer Sitzungsname weitergegeben, gibt FindSession einen Verweis auf die Standardsitzung Session zurück.

GetSessionNames

Erstellt eine Stringliste mit den Namen aller aktuell instantiierten Sitzungskomponenten. Dieses Verfahren erzeugt immer mindestens einen String, "Default" für die Standardsitzung.

List

Gibt die Sitzungskomponente für einen angegebenen Sitzungsnamen zurück. Ist keine Sitzung dieses Namens vorhanden, wird eine Ausnahme erzeugt.

OpenSession

Erstellt und aktiviert eine neue Sitzung oder reaktiviert eine vorhanden Sitzung mit dem angegebenen Sitzungsnamen.

Sessions

Greift anhand von Ordnungszahlen auf die Sitzungsliste zu.



Als Beispiel für die Verwendung der Eigenschaften und Methoden von Sessions in einer Multithread-Anwendung, überlegen Sie, was geschieht, wenn Sie eine Datenbankverbindung einrichten möchten. Um zu ermitteln, ob eine Verbindung bereits vorhanden ist, verwenden Sie die Eigenschaft Sessions, um jede Sitzung in der Sitzungsliste zu prüfen, dabei wird mit der Standardsitzung begonnen. Für jede Sitzungskomponente muss die Eigenschaft Databases geprüft werden, um zu erfahren, ob die fragliche Datenbank eingerichtet ist. Wenn Sie feststellen, dass bereits ein anderer Thread die betreffende Datenbank benutzt, prüfen Sie die nächste Sitzung in der Liste.

Verwendet ein vorhandener Thread keine Datenbank, dann können Sie die Verbindung innerhalb dieser Sitzung einrichten.

Wenn jedoch im Gegenteil alle vorhanden Threads Datenbanken verwenden, dann müssen Sie eine neue Sitzung öffnen, in der sich eine weitere Datenbankverbindung einrichten lässt.

Wenn Sie ein Datenmodul replizieren, das eine Sitzung in einer Multithread-Anwendung enthält, wobei jeder Thread über eine eigene Kopie des Datenmoduls verfügt, können Sie die Eigenschaft AutoSessionName einsetzen, um sicherzustellen, dass alle Datenmengen in den Datenmodulen die richtige Sitzung verwenden. Wenn für die Eigenschaft AutoSessionName der Wert True eingestellt ist, erzeugt die Sitzung ihren eigenen einmaligen Namen dynamisch, sofern sie während der Laufzeit erstellt wird. Dann weist sie diesen Namen jeder Datenmenge im Datenmodul zu und überschreibt dabei explizit die eingestellten Sitzungsnamen. Dadurch ist sichergestellt, dass jeder Thread seine eigene Sitzung verwendet und jede Datenmenge die Sitzung in dem eigenen Datenmodul benutzt.

Siehe auch