Interface für Delphi 1
Mit der Option “-delphi” erzeugt er2sqlo die Delphi-Unit
'Virtabs'. Nach Delphi-Regeln muss diese in der Datei
'virtabs.pas' gespeichert werden.
Diese Unit definiert zwei Zugriffsobjekte auf alle Virtabs:
- TVirtabT, einen Nachkommen von TTable
- TVirtabQ, einen Nachkommen von TQuery
Soll mit einer bestimmten Virtab gearbeitet werden, so muss
diese vor dem TVirtabT.Create() mittels 'VirtabTypeToCreate'
eingestellt werden.
Achtung: 'virtabs.pas' erfordert, dass eine leicht geänderte
Version der Komponentensource 'db.pas' (passend für die
jeweils verwendete Borland Delphi-Version) in das Verzeichnis
C:\DELPHI\LIB kopiert wird!
TVirtabT bzw. TVirtabQ ermöglichen es, auf den Virtabs
(fast) wie mit normalen TTables bzw. TQuerys zu arbeiten, da
das Verhalten aller Zugriffsmethoden unverändert ist. Intern
werden durch den Code in 'virtabs.pas' verschiedene
Zugriffsarten auf die Oracle-Datenbank wie folgt gehandhabt:
- Basis für die TVirtabT- bzw. TVirtabQ-Komponenete
'virtabname' ist die Oracle-View 'vt_myvirtab', alle
Abfragen greifen auf 'vt_myvirtab' zu.
- Ein myvirtab.Post() nach einem myvirtab.Insert() bewirkt
einen Aufruf der Oracle-Prozedur 'pr_insert_myvirtab'. Die
eigentliche Aktion von Post() führt dann keinen
Datenbank-Zugriff mehr aus (deshalb muss die modifizierte
Version von 'db.pas' in die Komponentenbibliothek
kompiliert worden sein!).
- Ein myvirtab.Post() nach einem myvirtab.Edit() bewirkt
einen Aufruf der Oracle-Prozedur 'pr_update_myvirtab'. Die
eigentliche Aktion von Post() führt dann keinen
Datenbank-Zugriff mehr aus.
- Ein myvirtab.Delete() nach einem myvirtab.Edit() bewirkt
einen Aufruf der Oracle-Prozedur 'pr_delete_myvirtab'.
TVirtabT bietet die Methode Refresh() und ist daher für
interaktive Anwendungen geeignet, wird aber in der BDE
gepuffert und ist daher ineffizient bei großen Datenmengen,
da offenbar zunächst die internen Puffer gefüllt werden.
TVirtabQ basiert auf SQL-Anweisungen, die an der BDE
vorbeigereicht werden. Daher findet keine Pufferung statt,
der Zugriff auf große Datenmengen geht schneller.
Außerdem kann die Suchmenge durch SQL-Bedingungen in der
Stringliste 'whereexpr' eingeschränkt werden (ein Service von
'virtabs.pas').
Einschränkungen sind:
-
nach Post() ist immer ein Refresh() nötig (oder bei TVirtabQ ein Close/Open), um die aktualisierten Daten auch lesen zu können.
- Bit 0 im Tag-Feld wird benutzt.
- Im Problemfall sollte man sich klarmachen, dass die
Feldwerte des aktuellen Records typenkonvertiert und als
Parameter an die ORACLE-Prozeduren übergeben wurden.
- Zum Zugriff auf die Datenbank muss das jeweilige
Delphi-Programm immer mit dem aktuellen “virtabs.pas”
übersetzt worden sein, d.h. bei Änderungen in der
Definitionsdatei <db_name>.vt müssen alle
Delphi-Programme neu übersetzt werden! 'virtabs.pas' sollte
daher nur an einer Stelle auf einem Netzlaufwerk stehen,
keinesfalls in die verschiedenen Projektverzeichnisse
kopiert werden.
Eine aktuelle Dokumentation steht immer am Anfang der Datei 'virtabs.pas'.
|