home *** CD-ROM | disk | FTP | other *** search
- ╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
- ╠╬╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╬╣
- ╠╣ ╠╣
- ╠╣ █ █▀▀▀▀█▄ █▀▀▀▀█▄ ▄█▀▀▀▀█▄ █ █ ╠╣
- ╠╣ █ █ ▀█ █ ▀█ █ █ █ █ ╠╣
- ╠╣ █ █ █ █ █ █ █ █ █ ╠╣
- ╠╣ █ █ █ █ █ █ █ █ █ ╠╣
- ╠╣ █ █ ▄█▀ █ ▄█▀ █ █ █ █ ╠╣
- ╠╣ ▄▀▀▀▀▀█ █▀▀▀▀█▄ █▀▀▀▀█▄ █ █ ▄▀▄ ╠╣
- ╠╣ █ █ █ ▀█ █ ▀█ █ █ ▄▀ ▀▄ ╠╣
- ╠╣ █ █ █ █ █ █ █ █ ▄▀ ▀▄ ╠╣
- ╠╣ █ █ █ █ █ █ █ █ ▄▀ ▀▄ ╠╣
- ╠╣ █ █ █ ▄█ █ ▄█ █ █ ▄▀ ▀▄ ╠╣
- ╠╣ ▀▄▄▄▄▄█ █▄▄▄▄█▀ ▄▄▄▄▄ █▄▄▄▄█▀ ▀█▄▄▄▄█▀ ▄▀ ▀▄ ╠╣
- ╠╣ ╠╣
- ╠╬╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╬╣
- ╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
-
-
- File 'DOKUMENT.DOC'
-
-
- ╔══════════════════════════════════════════════════════════════╗
- ║ Programm: dB_BOX SHAREWARE-VERSION ║
- ║ ║
- ║ Version: 1.1 (Juni 1992) ║
- ║ ║
- ║ Autor: Dipl.-Ing. Helmut Klüber ║
- ║ Bergkieferweg 15 ║
- ║ W - 8011 Kirchheim b. München ║
- ╚══════════════════════════════════════════════════════════════╝
-
-
-
- Bedienungsanweisung:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
-
- 1. dB_BOX 1.0 im Überblick:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Mit dieser UNIT haben Sie ein leisungsstarkes Werkzeug
- für Turbo-Pascal 5.5 und Turbo-Pascal 6.0 erworben.
- Sie können damit sowohl Ihre Daten im dBase-Format speichern,
- als auch auf vorhandene dBase-Dateien zugreifen.
- Sogar vorhandene dBase- und Clipper-Index-Dateien können
- ausgewertet werden.
- Die UNIT soll jedoch kein Ersatz für dBase sein.
-
- Besondere Leistungsmerkmale:
-
- - Größe der dBase-Dateien nicht durch den Hauptspeicher Ihres
- Rechners begrenzt, d.h. beliebig viele Datensätze
-
- - bis zu 128 Datenfelder je Datensatz
-
- - Datensatzlänge nicht eingeschränkt
-
- - komfortable Anwendung durch objektorientierte Programmierung
- der UNIT
-
- - Verhalten der UNIT durch SET-Parameter steuerbar
-
- - die Datenbankobjekte können sowohl im Datensegment eines
- Programms als auch auf dem Heap angelegt werden
-
- - vollautomatische Ein-/Ausgabepufferung mit einstellbarer
- Puffergröße (0-64 KByte), damit sehr schnell, weil nahezu
- unabhängig von der Arbeitsgeschwindigkeit des Massenspeichers
-
- - Der Anwender muß sich nicht um Bits und Bytes der dBase-
- Dateien kümmern, die Datenintegrität wird von der Unit
- gewährleistet
-
-
- Sie können neue Datenbanken anlegen, ihren Inhalt oder auch nur
- ihre Struktur kopieren und durch Packen als gelöscht markierte
- Datensätze volständig entfernen. Beim Kopieren kann die Reihen-
- folge der Datensätze einer dBase- oder Clipper-Index-Datei ent-
- nommen werden.
- Auf jeden einzelnen Datensatz kann zugegriffen werden, er kann
- gesucht werden und auch verändert werden. Neue Datensätze können
- hinzugefügt werden. Datensätze können gelöscht und auch wieder-
- hergestellt werden.
- Der Zugriff auf einzelne Datenfelder innerhalb eines Datensatzes
- ist auf vielfältige Weise möglich.
- Memodateien werden in dieser Version noch nicht unterstützt.
- Die folgende Einführung geht nicht auf alle Funktionen und
- Prozeduren der UNIT ein. Dazu gibt es den vollständigen
- Referenzteil (siehe Datei REFERENZ.DOC).
-
-
- 2. Einbinden der UNIT in Ihre Programme:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Sie programmieren mit Turbo-Pascal 5.5:
-
- PROGRAM Test;
- USES dB_BOX55;
- BEGIN
- (* Ihr Programm *)
- END.
-
-
- Sie programmieren mit Turbo-Pascal 6.0:
-
- PROGRAM Test;
- USES dB_BOX60;
- BEGIN
- (* Ihr Programm *)
- END.
-
- Im Übrigen ist die Verwendung der UNIT absolut gleich für
- beide Turbo-Pascal-Versionen.
-
-
- 3. Benutzung von Datenbankobjekten:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Anlegen von Datenbankobjekten im Datensegment:
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1, db2, db3: dB;
- (* jetzt können 3 verschiedene Datenbanken *)
- (* gleichzeitig geöffnet werden *)
- BEGIN
- WITH db1 DO
- BEGIN
- (* Ihr Programmteil für die 1. Daten- *)
- (* bank *)
- END
- END.
-
-
- Anlegen von Datenbankobjekten auf dem Heap:
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1, db2, db3: ^.dB;
- (* jetzt können 3 verschiedene Datenbanken *)
- (* gleichzeitig geöffnet werden *)
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- (* Ihr Programmteil für die 1. Daten- *)
- (* bank an dieser Stelle *) *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
- Wie sie sehen geht das mühelos, und Sie können sich so
- Ihr Datensegment für eigene Daten freihalten.
-
-
- 3. Öffnen und Schließen von Datenbanken:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Zum Öffnen und Schließen von dBase-Datenbanken benötigen Sie
- nur die beiden Befehle "Use" und "CloseDbf".
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1: ^.dB;
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- Use('C:\DATEI1.DBF');
- (* und schon geöffnet *)
- (* Ihr Programmteil für die 1. Daten- *)
- (* bank an dieser Stelle *)
- CloseDbf; (* und das Schließen nicht *)
- (* vergessen *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
- Beachten Sie bitte, um nach Aufruf von "CloseDbf" eine
- andere Datenbank zu öffnen, brauchen Sie keine 2. Variable
- vom Typ "dB" oder vom Typ "^dB" zu definieren. Es genügt,
- wenn Sie nach dem Aufruf von "CloseDbf" erneut z.B.
- "USE(C:\DATEI2.DBF);" verwenden. Mehrere Datenbankvariablen
- sollten nur definiert werden, wenn Sie gleichzeitigen Zugriff
- auf mehrere Datenbanken gewährleisten wollen.
-
-
- 4. Anlegen von Datenbanken:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Anlegen von dBase-Datenbanken erfolgt in zwei Schritten,
- zuerst wird die Grundstruktur der Datei mit "Create" erzeugt,
- danach werden die einzelnen Datenfelder mit "AddField" hinzu-
- gefügt.
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1: ^.dB;
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- Create('C:\DATEI1.DBF');
- (* und schon angelegt, aber *)
- (* noch ohne Datenfelder *)
- AddField('VORNAME', 'C', 15, 0);
- AddField('NACHNAME', 'C', 20, 0);
- AddField('TEL_NR', 'C', 10, 0);
- (* und schon ist die Telefon- *)
- (* datei fertig *)
- CloseDbf; (* und das Schließen nicht *)
- (* vergessen *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
-
- 5. Kopieren von Datenbanken:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Es gibt fünf verschiedene Kopiermöglichkeiten:
-
- a) Kopieren der vollständigen Datei: ("CopyTo")
- Dabei werden sowohl die Struktur der Datei kopiert als
- auch alle Datensätze. Als gelöscht markierte Datensätze
- werden jedoch nur kopiert, wenn Sie vorher den Befehl
- "DeletedOn:= TRUE;" angewendet haben. Sie haben mit "CopyTo"
- die Möglichkeit, Ihre Dateien nach Lösch- und Pack-Vorgängen
- physikalisch zu verkleinern.
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1: ^.dB;
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- Use('C:\DATEI1.DBF');
- CopyTo('C:\DATEINEU.DBF');
- CloseDbf; (* und das Schließen nicht *)
- (* vergessen *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
- Beachten Sie bitte, daß Sie als Ziel des Kopiervorgangs
- keine neue Datenbankvariable definieren müssen. Das wäre ggf.
- nur erforderlich, wenn Sie anschließend im selben Programm
- damit weiterarbeiten wollen.
-
- b) Kopieren der vollständigen Datei unter Berücksichtigung
- einer dBase-Index-Datei: ("CopybyNDX")
- Dabei werden sowohl die Struktur der Datei kopiert als
- auch alle Datensätze und zwar in der Reihenfolge wie sie
- in der zugehörigen dBase-Index-Datei *.NTX festgelegt ist.
- Als gelöscht markierte Datensätze werden jedoch nur kopiert,
- wenn Sie vorher den Befehl "DeletedOn:= TRUE;" angewendet
- haben.
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1: ^.dB;
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- Use('C:\DATEI1.DBF');
- CopybyNDX('C:\DATEI1.NDX', 'C:\DATEINEU.DBF');
- CloseDbf; (* und das Schließen nicht *)
- (* vergessen *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
- Beachten Sie bitte, daß Sie als Ziel des Kopiervorgangs
- keine neue Datenbankvariable definieren müssen. Das wäre ggf.
- nur erforderlich, wenn Sie anschließend im selben Programm
- damit weiterarbeiten wollen.
-
- c) Kopieren der vollständigen Datei unter Berücksichtigung
- einer Clipper-Index-Datei: ("CopybyNTX")
- Dabei werden sowohl die Struktur der Datei kopiert als
- auch alle Datensätze und zwar in der Reihenfolge wie sie
- in der zugehörigen Clipper-Index-Datei *.NTX festgelegt ist.
- Als gelöscht markierte Datensätze werden jedoch nur kopiert,
- wenn Sie vorher den Befehl "DeletedOn:= TRUE;" angewendet
- haben.
-
- PROGRAM Test;
- USES dB_BOX60;
- VAR db1: ^.dB;
- BEGIN
- New(dB1); (* Heapspeicher anfordern *)
- WITH db1^ DO
- BEGIN
- Use('C:\DATEI1.DBF');
- CopybyNTX('C:\DATEI1.NTX', 'C:\DATEINEU.DBF');
- CloseDbf; (* und das Schließen nicht *)
- (* vergessen *)
- END;
- Dispose(db1); (* Heapspeicher freigeben *)
- END.
-
- Beachten Sie bitte, daß Sie als Ziel des Kopiervorgangs
- keine neue Datenbankvariable definieren müssen. Das wäre ggf.
- nur erforderlich, wenn Sie anschließend im selben Programm
- damit weiterarbeiten wollen.
-
- d) Kopieren der Datei ohne Datensätze: ("CopyStruTo")
- Dabei wird nur die Struktur der Datei kopiert. Die Ziel-
- datei bleibt aber leer, es wird also nur eine leere Datei
- gleicher Struktur erzeugt. Sie brauchen dazu im obigen
- Beispiel (siehe a) nur den Befehl "CopyTo" durch den Befehl
- "CopyStruTo" zu ersetzen.
-
- e) Erzeugen einer Datei mit Strukturbeschreibung:
- ("CopyStruExteTo")
- Dabei wird eine neue Datei mit den Datenfeldern
- 'FIELD_NAME', 'FIELD_TYPE', 'FIELD_LEN 'und 'FIELD_DEC '
- erzeugt und für jedes Datenfeld der Quelldatei ein Datensatz
- mit der Beschreibung dieses Feldes hinzugefügt. Sie brauchen
- dazu im obigen Beispiel (siehe a) nur den Befehl "CopyTo"
- durch den Befehl "CopyStruExteTo" zu ersetzen.
-
-
- 6. Auswahl eines Datensatzes:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Zu jeder Datenbank merkt sich die zugehörige Datenbankvariable
- im sogenannten Satzzeiger, auf welchen aktuellen Datensatz gerade
- zugegriffen werden kann. Unmittelbar nach dem Öffnen einer
- Datenbank hat der Satzzeiger den Wert 1, d.h. er zeigt auf den
- ersten Datensatz.
-
- Der Wert des Satzzeigers kann mit der Funktion
-
- RecNo
-
- abgefragt werden. Mit der Prozedur
-
- Go(RecNr:LongInt)
-
- kann jeder beliebige (auch gelöschte) Datensatz angewählt
- werden. Mit der Prozedur
-
- GoTop
-
- wird bei "DeletedOn=TRUE" der erste nicht gelöschte Datensatz
- angewählt, sonst der 1. Datensatz der Datenbank. Mit der Prozedur
-
- GoBottom
-
- wird bei "DeletedOn=TRUE" der letzte nicht gelöschte Datensatz
- angewählt, sonst der letzte Datensatz (auch wenn er gelöscht
- ist). Mit der Prozedur
-
- Next
-
- wird bei "DeletedOn=TRUE" der nächste nicht gelöschte Datensatz
- angewählt, sonst der nächste Datensatz, ob gelöscht oder nicht.
-
- Mit der Prozedur
-
- Prev
-
- wird bei "DeletedOn=TRUE" der vorhergehende nicht gelöschte
- Datensatz angewählt, sonst der vorhergehende Datensatz, ob
- gelöscht oder nicht.
- Mit der Prozedur
-
- Skip(Anzahl: LongInt)
-
- wird wie bei dBase der Satzzeiger entsprechend "Anzahl" vor-
- oder (falls negativ) zurückgesetzt. Mit der Funktion
-
- Locate(FeldName: String; VAR Schluessel)
-
- wird der Satz angewählt, bei dem der Inhalt des Feldes "FeldName"
- mit der Variablen "Schlüssel" übereinstimmt.
-
-
- 7. Löschen und Wiederherstellen von Datensätzen:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Mit der Prozedur
-
- Delete
-
- können Sie den aktuell angewählten Datensatz als gelöscht
- markieren, ansonsten bleibt er unverändert, d.h. er wird nur
- logisch gelöscht. Mit der Prozedur
-
- Recall
-
- können Sie die Löschmarkierung des aktuell angewählten Daten-
- satzes wieder entfernen. Mit der Prozedur
-
- RecallAll
-
- wird die Löschmarkierung bei allen Datensätzen in der Datenbank
- gleichzeitig entfernt. Ob ein Datensatz als gelöscht markiert
- ist können Sie mit der Variablen "Deleted" abfragen. Z.B.
-
- IF Deleted THEN WriteLn('Datensatz gelöscht')
- ELSE WriteLn('Datensatz nicht gelöscht');
-
- Beachten Sie jedoch, daß durch Änderung von "Deleted" keinerlei
- Änderung an der Datenbank erfolgt, Sie müssen dafür "Delete"
- oder "Recall" verwenden. Mit der Prozedur
-
- Pack
-
- können Sie die als gelöscht markierten Datensätze endgültig aus
- der Datenbank entfernen.
-
- Mit der Prozedur
-
- Zap
-
- entfernen Sie alle Datensätze (auch die nicht als gelöscht
- markierten) endgültig aus der Datenbank. Die Datei wird dadurch
- jedoch physikalisch nicht verkleinert, das ist nur durch
- anschließendes Kopieren (siehe 5.) möglich.
-
-
- 8. Hinzufügen von Datensätzen:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Das Hinzufügen von Datensätzen am Datenbankende erfolgt wie bei
- dBase in zwei Stufen. Zuerst wird mit der Prozedur
-
- AppendBlank
-
- ein leerer Datensatz angehängt, danach werden seine Datenfelder
- mit den Prozeduren zum Ändern von Datenfeldern (siehe 9.)
- nach Wunsch geändert.
-
-
- 9. Lesen und Ändern von Datenfeldern:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Zum Lesen und Ändern von Datenfeldern können sie die folgenden
- Funktionen und Prozeduren verwenden:
-
- FieldNo
- FieldName
- GetByNr
- FieldInform
- Get
- GetbyNr
- GetbyNrT
- GetT
- Replace
- ReplacebyNr
- ReplacebyNrT
- ReplaceT
-
- Die genaue Arbeitsweise dieser Routinen ist ausführlich im
- Referenzteil beschrieben (siehe Datei REFERENZ.DOC).
-
-
- 11. Auswerten von dBase- und Clipper-Index-Dateien:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Mit den Funktionen "GetKeyNDX" bzw. "GetKeyNTX" können Sie
- ermitteln, welcher Schlüssel von dBase bzw. Clipper beim
- Indizieren einer Datenbank verwendet wurde.
-
- Mit den Prozeduren "CopybyNDX" bzw. "CopybyNTX" können Sie
- eine neue Datenbank erstellen, die entsprechend der in der
- Index-Datei festgelegten Reihenfolge sortiert ist.
- (siehe Kapitel 5)
-
-
- 12. Einstellen von Parametern:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Dafür gibt es drei Parameter, die die Funktion bekannter
- dBase-Set-Parameter nachbilden:
-
- CarryOn
- DeletedOn
- ExactOn
-
- Durch Zuweisung von TRUE oder FALSE entsprechend der
- Beschreibung im Referenzteil (siehe Datei REFERENZ.DOC) kann
- die gewünschte Einstellung vorgenommen werden.
-
- Mit der Prozedur
-
- SetBuf(Size: Word)
-
- kann die Größe des internen Ein-/Ausgabepuffers eingestellt
- werden (0 bis 64 KByte). Diese Einstellung wird ab dem nächsten
- Aufruf von "Use" wirksam und kann so für verschiedene Datenbanken
- unterschiedlich eingestellt werden. Der Puffer ist auf die
- maximal mögliche Größe voreingestellt.
-
- Mit der Funktion
-
- GetBuf
-
- kann die Größe des internen Eingabepuffers abgefragt werden.
-
-
- 10. Fehlerbehandlung und Fehlermeldungen:
- ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- Bei jedem Datenbankzugriff setzt die UNIT die globale Variable
- "Error". Bei Fehlerfreiheit gilt "Error = 0", bei internen
- Fehlern (z.B. angegebene Satznummer außerhalb des gültigen
- Bereiches) gilt "Error < 0", bei DOS-Ein-/Ausgabefehlern (z.B.
- Datei nicht gefunden) gilt "Error > 0".
-
- Sie können sich den zugehörigen Fehlertext wie folgt ausgeben
- lassen:
-
- WriteLn(ErrorText);
-
- Der Fehler wird so weit wie möglich durch die UNIT aufgefangen.
- Ihr Programm wird jedoch nicht abgebrochen, um die Möglichkeit
- zur Fehlersuche zu belassen.
-
- Folgende Fehler werden gemeldet:
-
- Error: Bedeutung:
- ------------------------------------------------------
- 0 kein Fehler (dBok = 0)
- -1 Feldname existiert nicht
- -2 Feld mit der angegebenen Nr. existiert nicht
- -3 dBase-Datei enthält keine Datensätze
- -4 dBase-Datei enthält keine Felder
- -5 Datensatz-Nummer nicht im gültigen Bereich
- -6 Datei nicht leer bei Hinzufügen von Feldern
- -7 keine dBase-Datei, dBase-Kennung falsch
- -8 keine dBase-Datei, mehr als FeldNrMax Felder
- -9 keine dBase-Datei,
- Header-Ende-Kennung $0D fehlt
- -10 Feld mit dem angegebenen Namen existiert nicht
- -11 zu viele Datenbanken geöffnet
- -12 Datenbank bereits geschlossen
- -13 Datenbank war nicht geöffnet oder ist bereits
- wieder geschlossen
- -14 Datenfeld nicht vom Typ "N" oder "F"
- -15 Datenbankname fehlt
- -16 Indexdatei wurde nicht gefunden
-