[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
LLDBASE.INT
{ ---------------------------------------------------------------- }
{ LOW-LEVEL-DBASE-ROUTINEN }
{ ---------------------------------------------------------------- }
{ Dieses Modul erlaubt es, DBF-Dateien zu erzeugen und zu .ffnen, }
{ Datens.tze zu lesen, anzuh.ngen und zu schreiben und stellt }
{ einige Hilfsroutinen zur Verf.gung. }
{ Zur Erh.hung der Sicherheit beim Lesen und vor allem beim }
{ Schreiben werden weiters Routinen zur Verf.gung gestellt, die }
{ die von dBase gelieferten Strings in Turbo-Pascal-gerechte Typen }
{ umwandeln - und umgekehrt. Dadurch k.nnen beispielsweise Datums- }
{ angaben in beliebiger Form ('Wien, am 3.2.92' ...) .bergeben }
{ werden. }
{ Die Syntax der Befehle orientiert sich - so weit als m.glich - }
{ an der von dBase / Clipper mit einem vorangestellten "db". }
{ ---------------------------------------------------------------- }
{ Zum Einlesen / Schreiben: Die Diskettenzugriffe erfolgen teil- }
{ weise satzweise (Lesen) und andererseits feldweise (Schreiben) - }
{ Das bedeutet, da. beim Lesen eines einzelnen Feldes kein Disket- }
{ tenzugriff erfolgt, sondern erst, wenn entweder ein Feld ge- }
{ schrieben oder ein neuer Satz ben.tigt wird (Wechsel mittels }
{ dbGo, dbSkip, dbDeSkip usw.) oder wenn die Datenbank geschlossen }
{ wird. }
{ Technisch ausgedr.ckt: Der Puffer ist in "write-through"-Strate- }
{ gie organisiert. }
{ ---------------------------------------------------------------- }
{ (c) 1992 by Aurora featuring M.J. Schwaiger }
{ ---------------------------------------------------------------- }
UNIT LLdBase; { Low-Level-dBase }
INTERFACE
USES
ADatum, { Aurora's Datumsroutinen }
AStrTool, { Aurora's Stringbearbeitungsroutinen }
DbTypes, { Globale Typdefinitionen }
Idle, { Anti-Absturz-Anzeige }
Error, { Fehlerbehandlungsroutinen }
TDBError, { Fehlercodes }
{$IFDEF Windows}
WinAdd, { Windows-Kompatibilit.ts-Unit }
WinDOS; { Windows-DOS-Routinen }
{$ELSE}
DOS; { DOS-DOS-Routinen }
{$ENDIF}
TYPE
{ ---------------------------------------------------------------- }
{ Definition eines Records f.r die Kenndaten einer Datenbank. }
{ Enh.lt neben Anzahl und Beschreibung der Felder die Anzahl der }
{ Datens.tze, die momentane Position des Datensatz-Zeigers und das }
{ Datum der letzten .nderung. Dazu kommen noch einige f.r den }
{ Benutzer irrelevante Informationen f.r die Schreib- / Lese- }
{ operationen. }
{ ---------------------------------------------------------------- }
Pdbf = ^Tdbf;
Tdbf = RECORD
DateiName : PATHSTR; { Name Datenbankdatei }
Memos, { Memos vorhanden ? }
Opened : BOOLEAN; { .berhaupt ge.ffnet ? }
Version : BYTE; { Welche dBase-Version ? }
AnzFelder : WORD; { Anzahl Felder }
FeldNr : WORD; { Aktuelles Feld }
EOF, { End Of File }
BOF : BOOLEAN; { Begin Of File }
Feld : ARRAY [1 .. MaxFelder] OF TFeld;
{ Liste der Felder }
Datei : FILE;
FileTime : LONGINT;
Jahr,
Monat,
Tag : BYTE; { Datum letzte .nderung }
AnzDS, { Anzahl der Datens.tze }
PosDS : LONGINT; { Position des }
{ Datensatz-Zeigers }
HeadSize, { Header-Gr..e in Byte }
RecSize : WORD; { Record-Gr..e in Byte }
Buffer : POINTER; { Buffer f.r File-I/O }
Modified : BOOLEAN; { Flag f.r "ge.ndert" }
END; { RECORD Tdbf }
{ ---------------------------------------------------------------- }
{ EIGENTLICHE DATENBANKFUNKTIONEN }
{ ---------------------------------------------------------------- }
{ ---------------------------------------------------------------- }
{ Bei allen Datenbankoperationen wird zuerst gepr.ft, ob die }
{ Datenbank .berhaupt ge.ffnet ist (via dbUse oder dbCreate). }
{ Sollte das nicht der Fall sein, so wird der Fehler Nummer 15 }
{ gesetzt. }
{ ---------------------------------------------------------------- }
{ Wird versucht, eine Funktion zu verwenden, die einen Datenbank- }
{ Inhalt voraussetzt (dbReplace, dbRead, dbDelete usw.), die }
{ Anzahl der S.tze jedoch 0 sein, so wird Fehler 16 gesetzt. }
{ ---------------------------------------------------------------- }
{ ---------------------------------------------------------------- }
{ .ffnet die mit "Name" angegebene Datenbank zur genehmen Verwen- }
{ dung. }
{ ---------------------------------------------------------------- }
{ Sollte die angegebene Datei nicht vorhanden sein, so wird Fehler }
{ 2 gesetzt, sollte der Header nicht stimmen, Fehler 3. }
{ ---------------------------------------------------------------- }
PROCEDURE DbUse (F : Pdbf; Name : PATHSTR);
{ ---------------------------------------------------------------- }
{ Erzeugt eine neue Datenbank mit dem angegebenen Namen. Sollte }
{ dabei ein Pfad angegeben worden sein, so wird das angegebene }
{ Verzeichnis verwendet, sonst das aktuelle. }
{ Sollte beim Namen keine Endung (vulgo Extension) angegeben sein, }
{ so wird defaultm..ig ".DBF" verwendet. }
{ ---------------------------------------------------------------- }
{ In der Datenstruktur f^.Feld mu. dabei Feldname, -typ und -gr..e }
{ stehen, in f^.AnzDS die Anzahl der Datens.tze. }
{ ---------------------------------------------------------------- }
{ Sollte ein ung.ltiger Feldtyp angegeben worden sein, so wird }
{ Fehler 9 gesetzt, bei ung.ltiger Gr..e 10 und bei ung.ltigem }
{ Namen 11. Fehler 10 ist nur als Warnung zu betrachten: Es wird }
{ einfach eine passende g.ltige Gr..e eingesetzt und das Feld }
{ trotzdem angelegt. }
{ Sollte eine gleichnamige Datei bereits vorhanden sein, so wird }
{ Fehler 6 gesetzt, wenn das Laufwerk nicht beschreibbar ist, 7 }
{ und wenn zu wenig Platz ist, 8. }
{ ---------------------------------------------------------------- }
PROCEDURE DbCreate (F : Pdbf; Name : PATHSTR);
{ ---------------------------------------------------------------- }
{ Schlie.t die Datenbank wieder. Wenn seit dem letzten Schreiben }
{ Modifikationen vorgenommen wurden, so werden diese noch vorher }
{ geschrieben. }
{ ---------------------------------------------------------------- }
PROCEDURE DbClose (F : Pdbf);
{ ---------------------------------------------------------------- }
{ Setzt den Datensatzzeiger auf den angegebenen Datensatz. }
{ ---------------------------------------------------------------- }
{ Sollte der Satz nicht vorhanden sein, so wird Fehler 4 gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DbGo (F : Pdbf; P : LONGINT);
{ ---------------------------------------------------------------- }
{ Bewegt den Datensatzzeiger um einen Schritt weiter (sprich: auf }
{ den n.chsten Datensatz). }
{ ---------------------------------------------------------------- }
{ Sollte das Ende der Datenbank erreicht sein, so wird das EOF- }
{ Flag gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DbSkip (F : Pdbf);
{ ---------------------------------------------------------------- }
{ Bewegt den Datensatzzeiger um einen Schritt zur.ck (sprich: auf }
{ den vorherigen Datensatz). }
{ ---------------------------------------------------------------- }
{ Sollte der Anfang der Datenbank erreicht sein, so wird das BOF- }
{ Flag gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DbDeSkip (F : Pdbf);
{ ---------------------------------------------------------------- }
{ Bewegt den Datensatzzeiger auf den ersten Datensatz. }
{ ---------------------------------------------------------------- }
{ Es wird das EOF-Flag gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DbFirst (F : Pdbf);
{ ---------------------------------------------------------------- }
{ Bewegt den Datensatzzeiger auf den letzten Datensatz. }
{ ---------------------------------------------------------------- }
{ Es wird das BOF-Flag gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE DbLast (F : Pdbf);
{ ---------------------------------------------------------------- }
{ Gibt "True" zur.ck, wenn das EOF-Flag gesetzt ist, sonst False. }
{ ---------------------------------------------------------------- }
FUNCTION DbEOF (F : Pdbf) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Gibt "True" zur.ck, wenn das BOF-Flag gesetzt ist, sonst False. }
{ ---------------------------------------------------------------- }
FUNCTION DbBOF (F : Pdbf) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Liest aus dem aktuellen Datensatz das Feld mit der angegebenen }
{ Nummer und gibt den Inhalt als String (!) zur.ck. }
{ ---------------------------------------------------------------- }
{ Sollte das Feld nicht vorhanden sein, so wird Fehler 5 gesetzt. }
{ ---------------------------------------------------------------- }
FUNCTION DbRead (F : Pdbf; FName : TFeldStr) : STRING;
{ ---------------------------------------------------------------- }
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson