|
written by T. Schmidt |
|
|
|
Der direkte Zugriff auf Datenbanken über die bereitgestellten Methodenaufrufe der Datenbankschnittstelle (Treiber) ist mit erheblichem Programmieraufwand verbunden. Für einige Anwendungsfälle lässt dieser sich aber nicht umgehen. So ist zum Beispiel die nachträgliche Integration kryptographischer Datenbankerweiterungen in Anwendungen oder ein Realtimezugriff auf Datenbanken solch ein Anwendungsgebiet. Die von Borland mitgelieferte Datenbankschnittstelle Borland Database Engine oder kurz BDE ermöglicht fast jede Art der Datenmanipulation der zugeordneten Datenbank. Derartige Zugriffe erfolgen wesentlich schneller als implementierte Methoden der VCL da der gesamte Eventmechanismus umgangen wird. Durch den fehlenden Eventmechanismus sollten Direktzugriffe auf Datenbanken nur für Datenmanipulation oder deren Bereitstellung, nicht aber für visuelle Datenbankkomponenten verwendet werden. Im folgenden wird ein kleines Beispiel erläutert wie ein direkter Zugriff erfolgen kann. Eine wichtige Eigenschaft einer Datenbankdatei, welche für fast sämtliche Methodenaufrufe der BDE erforderlich ist, der Datenbankcursor, erhält man mit TempCursor:= TTable.Handle. Soll auf Daten unabhängig vom Handle des Table zugegriffen werden, kann man mit der BDE Funktion DbiCloneCursor (hCurSrc: hDBICur; bReadOnly: Bool; bUniDirectional: Bool; var hCurNew: hDBICur) einen neuen Cursor erzeugen. In (Beispiel 1) wird ein solcher erzeugt und das Table auf den ersten Datensatz der Datenbankdatei gesetzt. Der geklonte Cursor erhält den gleichen Range, den Index, den Share Mode,die Position, FieldMaps und Filter des Quellcursor. Diese geerbten Eigenschaften sind nachträglich ohne Einfluss auf den Quellcursor veränderbar. Um die Kursoreigenschaften abzufragen bedient man sich der wie in Beispiel 2 dargestellten BDE Funktion. Die Cursoreigenschaften sind für einige andere Funktionsaufrufe notwendig. Die Funktionsaufrufe der BDE erfolgen ohne Exceptionmechanismus. Auftretende Fehler sollten deshalb mit der Funktion Check() abgefangen werden, um über try except Blöcke darauf reagieren zu können. Abschließend folgt ein Beispiel, wie mit Hilfe der BDE ein Datensatz eines Table gesucht werden kann.
|
|
var NewCurs: hDBICur; function fDbiCloneCursor(SourceCurs: hDBICur):
hDBICurs; Beispiel 2. Kursoreigenschaften function fDbiGetCursProps(hCur: hDBICur):
CURProps; Beispiel 3. DatensatzSuche function fDbiSetToKey(hCur: hDBICur; RecBuf:
PByte; FieldNo: Integer; key: PChar): Longint; var CurProp: CurProps; RecBuf: PChar; RecordNr: LongInt; begin |
|
Microsoft © und Borland © sind eingetragene Warenzeichen. |