Virtabs: Application-Interface für Delphi 1

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'.

 

[Application-Interfaces] [Delphi-Interface 1] [Interface Delphi 3] [Interface Java]