![]() Home Grundsätzliches Installation Konfiguration Erste Schritte Laufzeitschalter Textdateien Systemfunktionen Tabellenfunktionen Indexfunktionen Volltext-Indizierung Memos und Blobs Semaphoren-Konzept Support Datenbank Einführungskurs |
Datenbank-FunktionenErzeugen einer TabelleMakeDB(Tabellenname, Paßwort, Verschlüsselungscode, Strukturdefinition [,Quelle]) : FehlercodeDie Strukturdefinition ist der Name einer Textdatei, die folgendermaßen
aufgebaut ist:
Der Abschnitt unter [INDEX] ist nur erforderlich, wenn die Tabelle automatisch numeriert wird. Eine Feldspezifikation fieldspec hat folgende Struktur:
Als Feldbezeichner sind alle Bezeichner zugelassen, die mit einem Buchstaben oder Unterstrich beginnen und nur aus Buchstaben, Ziffern und Unterstrich bestehen. Die maximale Länge beträgt 35 Zeichen. Folgende Typdefinitionen sind zugelassen: Zeichenketten:
Zahlen:
*) nur tdbengine, nicht kompatibel zur VDP oder TurboDatenbank
Nachkommstellen werden nur bei den REAL-Typen berücksichtig. Sie sind wesentlich für den Datentransfer mit den Funktionen GetField und SetField sowie beim Export in andere Datenbankformate. Intern werden alle REAL-Typen immer mir der optimalen Genauigkeit gespeichert. Wird der Parameter U angegeben, so wird in Selektion zwischen dem Wert 0 und "undefiniert" unterschieden. Memos und Blobs
Der Inhalt eines Memofeldes ist ein Verweis auf eine zusätzliche
Memodatei. In Memodateien werden auschließlich unformatierte Texte
gespeichert.
Der Inhalt eines Blobfeldes ist ein Verweis auf eine zusätzliche Blobdatei In Blobdateien werden beliebige Daten gespeichert. Mit blocksize kann die Größe der Cluster in der Blobdatei festgelegt werden (Minimum = 64, Maximum = 8192, Default = 4096). Pro Eintrag in die Blobdatei wird im Schnitt ein halber Cluster verschwendet, aber zu kleine Cluster verlängern die Zugriffszeiten. AUTO-INCREMENT
Die Zählung beginnt (in einer neuen Tabelle) mit der Startnummer (bzw 1, falls keine angegeben wurde) Datum und Zeit
Aufzählung
Verknüfungen
Importfelder festlegen Ist in GenTable eine Quelle angegeben, so wird das spezifizierte Feld durch den Inhalt des angegebenen Importfeldes der Quelle ersetzt. Ist kein Importfeld angegeben, so wird der spezifizierte Feldname verwendet. Wird als Quelle der gleiche Dateiname wie unter Ziel angegeben, so wird die Tabelle entsprechend restrukturiert. Als Abkürzung für den gleichen Dateinamen ist das Zeichen "@" erlaubt. Hinweis: Die Strukturdefinition ist eigentlich eine Maschinendatei, die von einem Hilfsprogramm durch Interaktion mit dem Anwender erzeugt wird. Wenn Sie eine Strukturdefinition von Hand erstellen, sollten Sie unbedingt folgendes beachten:
Tabellenstruktur ermittelnGetDef(db : REAL; structfile : STRING) : REALdb : Tabellenhandle von OpenDB
Rückgabewert: 0 = ok, sonst Fehlercode Die Tabellenstruktur der geöffneten Tabelle db wird in die angegebene Datei geschrieben. Diese kann dann wiederum zum Erzeugen neuer Tabellen verwendet werden. Als Ziel sind auch Ramtexte zulässig. Beispiel: Leere Kopie einer geöffneten Tabelle db erzeugen GetDef(db,'ramtext:text:structure')
Löschen einer TabelleDelDB(Tabellenname, Paßwort : STRING; Code : REAL) : FehlercodeLöscht die Tabelle inklusiver aller Zusatzdateien wie Memo, Blob und Indizes. Umbenennen einer TabelleRenDB(Datename,Paßwort,Code,NeuerName) : FehlercodeBenennt die Tabelle mit dem angegeben Datenamen und den neuen Namen um. Es werden ebenfalls Memo, Blob und Indexdateien bei Bedarf umbenannt. Tabellen öffnen und SchließenOpenDB(Dateiname[,Paßword[,Code[,Modus]]]) : TabellennummerModus ist ein Addition der einzelner Grundmodi, mit denen die gewünschte Zugriffsart gekennzeichnet wird: 0 : (Vorgabe) Es dürfen keine Veränderungen an der Tabelle
vorgenommen werden.
Der Modus 15 erlaubt somit sämtliche Modifikationen an de Tabelle. Hinweis: Tritt beim Öffnen der Tabelle ein Fehler auf, so wird das Programm normalerweise mit einer entsprechenden Fehlermeldung beendet. Wenn die interne Fehlerbehandlung abgeschaltet wurde, ist der Rückgabewert der Funktion 0, und der Fehler kann mit TDB_ErrorCode ermittelt werden. Beispiel:
Anders als die TurboDatenbank öffnet die tdbengine über L- oder R-Felder verknüpfte Tabellen nicht automatisch, sondern diese müssen bei Bedarf separat mit OpenDB geöffnet werden. Dabei ist zu beachten, daß immer die zuletzt geöffnete Tabelle in die bisherige Relationsstruktur eingebaut wird. Das bedeutet beispielsweise, daß Relationstabellen immer erst nach den Tabellen, zwischen denen sie die Verknüpfung definiert, geöffnet werden darf. Wird eine Tabelle mit einem L-Feld geöffnet, muß die zugehörige Link-Tabelle schon geöffnet sein, damit die Verknüpfung aktiv wird. CloseDB(Tabellennummer) Eine geöffnete Tabelle kann jederzeit mit CloseDB(Tabellennummer) wieder geschlossen werden. Am Programmende wird automatisch CloseDB für aller geöffneten Tabellen ausgeführt. Hinweis: Im Zuge eines guten Programmierstils sollten Sie alle Tabellen,
die von Ihrem Programm geöffnet werden, auch wieder schließen.
Tabellengröße ermittelnFileSize(Tabellennummer[,Modus] : REAL) : REALLiefert die Anzahl der Datensätze in der Tabelle. Modus = 0 (Vorgabe) Standard -> Anzahl der Datensätze in der zugehörigen
.dat (bzw. -1 bei Volltext-Stichwort-Listen).
Datensätze lesen, schreiben und löschenDie tdbengine stellt für jede Tabelle einen Datensatzpuffer zur Verfügung. Alle Datenfeld-Funktionen beziehen sich auf diesen Datensatzpuffer.ReadRec(Tabellennummer,Satznummer) : REAL Liest den Datensatz mit der Satznummer in den Datensatzpuffer der Tabelle mit der angegebenen Tabellennummer. Falls Satznummer=0, wird ein leerer Datensatz bereitgestellt. Das Funktionergebnis ist die Satznummer, wenn der Datensatz gelesen werden konnte, andernfalls 0. Bei einer illegalen Satznummer wird ein Laufzeitfehler ausgelöst. WriteRec(Tabellenummer,Satznummer) : REAL Schreibt den aktuelen Datensatzpuffer an der abgegeben Satznummer in die Tabelle. Zulässige Satznummern sind 1..FileSize(Tabellennummer)+1. Illegale Satznummern führen zu einem Laufzeitfehler. Liegt die Satznummer zwischen 1 und FileSize(Tabellennummer) so wird der entsprechende Datensatz überschrieben, andernfalls wird die Tabelle um einen Datensatz erweitert. DelRec(Tabellennummer,Satznummer) : REAL Löscht den Datensatz mit der angegebenen Satznummer. Die tdbengine geht beim Löschen eines Datensatzes so vor:
Abhile schafft der Bezug auf die Autonummern der Tabelle. Dazu stellt die tdbengine zwei neue Funktionen zur Verfügung, mit der die Umwandlung von Satznummern und Autonummern stark vereinfacht wird: AutoField und FindAuto. AutoField(Tabellennummer) : REAL liefert die Nummer des AUTO-Feldes (bzw. 0, wenn nicht automatisch numeriert). GetRField(Tabellenummer,AutoField(Tabellennummer)) liefert so die Autonummer eines Satzes der Tabelle. Dafür gibt es die Funktion AutoRecNo(db : REAL) : REAL db : Tabellenhandle von OpenDB Rückgabewert: RecNo(db) wenn kein AUTO-INCREMENT-Feld in
db
FindAuto(db,x : REAL) : REAL db : Tabellenhandle von OpenDB
Rückgabewert: x wenn kein AUTO-INCREMENT-Feld in db
Wann immer es möglich ist (also eine Autonummer in der Tabelle enthalten ist), sollte die Information über einen Datensatz als Autonummer zwischen CGI-Programmen erfolgen. Eine andere Problematik steckt in der Verwendung von Volltext-Indizes, die ja auch auf physikalische Satznummern zurückgreifen. Ein Volltextindex wird nicht automatisch aktualisiert, wenn ein Datensatz gelöscht wird. Das ist auch garnicht möglich, da Volltextindizes kein Bestandteil der Tabelle sind, die tdbengine demnach auch keine Information darüber haben kann. Ein Ausweg besteht darin, einen Volltextindex nach dem Löschen
in einer Tabelle neu zu erzeugen. Bei kleiner Tabellen ist diese Vorgehensweise
aufgrund der hohen Geschwindigkeit der tdbengine auch durchaus praktizierbar.
Der andere, aufwendigere und auch elegantere Ausweg besteht darin, den
Volltextindex dynamisch mit der Tabelle mitzuführen. Mit ScanRec und
UnScanRec stehen dazu die benötigten Funktionen zur Verfügung.
Hier nur das Grundgerüst für das Löschen eines Datensatzes
mit Volltext-Index-Nachführung:
Datensätze suchen und markierenFindRecFirstRec LastRec NextRec FindAndMark Der Zugriff auf DatenfelderGetField(Tabellenummer, Feld) : STRINGGetRField(Tabellennummer,Feld) : REAL SetField(Tabellennummer, Feld) : REAL SetRField(Tabellennummer, Feld) : REAL MarkierungsfunktionenGetMarksPutMarks FirstMark NextMark DelMarks |