home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* dB_BOX.PAS *)
- (* objektorientierte dBase III / IV - Schnittstelle *)
- (* (c) 1992 Helmut Klüber *)
- (* ------------------------------------------------------ *)
-
- {$N+} {$E+}
-
- {$IFDEF VER60}
- UNIT dB_BOX60;
- {$ELSE}
- UNIT dB_BOX55;
- {$ENDIF}
-
- INTERFACE
-
- USES Dos, CRT;
-
- CONST
- FeldNrMax = 128; (* max. Anzahl der *)
- (* Felder in einer Datei *)
- MaxDatabases = 15; (* max. Anzahl geöff- *)
- (* neter Datenbanken *)
- dBok = 0; (* d.h. kein Fehler *)
- PufferLaenge: Word = $FFFE; (* max. Pufferlänge *)
- CarryOn: Boolean = FALSE; (* Default-Wert *)
- DeletedOn: Boolean = FALSE; (* Default-Wert *)
- FieldsOn: Boolean = FALSE; (* Default-Wert *)
- ExactOn: Boolean = FALSE; (* Default-Wert *)
- Kontrolle: Word = 0; (* I/O-Kontrolle, bisher *)
- (* nicht abgefragt *)
- Error: Integer = dBok; (* FehlerCode *)
-
- (* Error: Bedeutung: *)
- (* ------------------------------------------------------ *)
- (* 0 kein Fehler (dBok = 0) *)
- (* -1 Feld mit dem angegebenen Namen 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 *)
-
- TYPE
-
- String8 = String[8];
- String10 = String[10];
- CharPtr = ^Char;
-
- Header = RECORD
- Version: Byte;
- Jahr: Byte;
- Monat: Byte;
- Tag: Byte;
- AnzSaetze: LongInt;
- LenVorspann: Word;
- LenSatz: Word;
- Dummy1: Array[13..14] of Byte;
- Transaktion: Boolean;
- Schluessel: Boolean;
- Dummy2: Array[17..28] of Byte;
- Mdx: Boolean;
- Dummy3: Array[30..32] of Byte;
- END;
-
- FeldInfo = RECORD
- FeldName: Array[1..10] of Char;
- (* bei <10 Zeichen Ende mit $00 *)
- Dummy1: Byte; (* immer = $00 als Stringende *)
- FeldTyp: Char;
- Adresse: Pointer; (* Zeiger auf Feld im Speicher *)
- LenFeld: Byte;
- AnzDez: Byte; (* Anzahl Dezimalstellen *)
- Dummy2: Array[19..20] of Byte;
- ArbBerID: Byte; (* Nr. des Arbeitsbereiches *)
- Dummy3: Array[22..23] of Byte;
- SetFieldsID: Boolean; (* mit SetFields gesetztes Flag *)
- Dummy4: Array[25..31] of Byte;
- MDXFlag: Boolean; (* Flag für Mehrfachindices *)
- FeldName1: String[10];(* wie FeldName,aber als String *)
- END;
-
- Puffer = Array[$0000..$FFFE] OF Char;
-
- dB = object
- AnzFelder: Byte;
- (* Anzahl der Felder je Datensatz *)
- dB3: Boolean;
- (* lesbar durch dBase III ? *)
- dB4: Boolean;
- (* lesbar durch dBase III ? *)
- ContainsMemo: Boolean;
- (* Memodatei vorhanden ? *)
- h: ^Header;
- (* Datei-Header *)
- f: Array[1..FeldNrMax] of ^FeldInfo;
- (* enthält Zeiger auf *)
- (* Feldbeschreibungen *)
- Deleted: Boolean;
- (* aktueller Datensatz als gelöscht *)
- (* markiert ? *)
-
- FUNCTION FieldNo(Name:String): Byte;
- (* liefert lfd. Nr. zum Feld Name *)
-
- FUNCTION GetbyNr(Nr: Byte): String;
- (* liefert Inhalt des Feldes Nr. Nr *)
-
- PROCEDURE GetbyNrT(Nr: Byte; Var x);
- (* liefert Inhalt des Feldes Nr. Nr *)
- (* im Turbo-Pascal-Format *)
-
- PROCEDURE ReplacebyNr(Nr: Byte; Eingabe: String);
- (* ändert Inhalt des Feldes Nr. Nr *)
-
- PROCEDURE ReplacebyNrT(Nr: Byte; VAR Eingabe);
- (* ändert Inhalt des Feldes Nr. Nr, *)
- (* Eingabe im Turbo-Pascal-Format *)
-
- PROCEDURE Next; (* zum nächsten Datensatz gehen *)
-
- PROCEDURE Prev; (* zum vorhergehenden Datensatz *)
- (* gehen *)
-
- FUNCTION EoF: Boolean;
- (* TRUE, wenn Dateiende erreicht *)
-
- FUNCTION BoF: Boolean;
- (* TRUE, wenn vor 1. Datensatz *)
-
- PROCEDURE Skip(Anzahl: LongInt);
- (* um Anzahl Datensätze weitergehen *)
-
- PROCEDURE GoTop;
- (* zum 1. Datensatz gehen *)
-
- PROCEDURE GoBottom;
- (* zum letzten Datensatz gehen *)
-
- PROCEDURE Go(RecNr:LongInt);
- (* zu Datensatz mit der Nr. RecNr *)
- (* gehen *)
-
- PROCEDURE Use(DName: PathStr);
- (* Datei öffnen *)
-
- PROCEDURE CloseDbf;
- (* Datei schliessen *)
-
- PROCEDURE Delete;
- (* aktuellen Datensatz als gelöscht *)
- (* markieren *)
-
- PROCEDURE Recall;
- (* Löschmarkierung bei aktuellem *)
- (* Datensatz entfernen *)
-
- PROCEDURE RecallAll;
- (* Löschmarkierung bei allen Daten- *)
- (* sätzen entfernen *)
-
- PROCEDURE AppendBlank;
- (* einen Datensatz am Ende der Datei *)
- (* anfügen *)
-
- PROCEDURE Create(DName: PathStr);
- (* leere Datei, ohne Datenfelder *)
- (* anlegen *)
-
- PROCEDURE AddField(FName: String; FTyp: Char;
- FLen, FDec: Byte);
- (* Ein Datenfeld zu leerer Datei *)
- (* hinzufügen *)
-
- PROCEDURE Flush;
- (* Puffer sichern *)
-
- FUNCTION RecNo: LongInt;
- (* liefert aktuelle Datensatz-Nummer *)
-
- FUNCTION RecSize: LongInt;
- (* bestimmt die Länge eines Daten- *)
- (* satzes, incl. Löschkennzeichen *)
-
- FUNCTION RecCount: LongInt;
- (* liefert Anzahl der Datensätze, *)
- (* incl. der gelöschten Datensätze *)
-
- FUNCTION Dbf: PathStr;
- (* liefert den Dateinamen *)
-
- FUNCTION FieldName(Nr: Byte): String10;
- (* liefert den Namen des Datenfeldes *)
- (* Nummer Nr *)
-
- PROCEDURE Replace(Name: String; Eingabe: String);
- (* ersetzt den Inhalt des Datenfeldes *)
- (* Name durch den String Eingabe *)
-
- PROCEDURE ReplaceT(Name: String; VAR Eingabe);
- (* ersetzt den Inhalt des Datenfeldes *)
- (* Name durch den String Eingabe *)
-
- FUNCTION Get(Name: String): String;
- (* liefert Inhalt des Feldes Name *)
-
- PROCEDURE GetT(Name: String; Var x);
- (* liefert Inhalt des Feldes Name *)
- (* im Turbo-Pascal-Format *)
-
- FUNCTION Count: LongInt;
- (* liefert die Anzahl der nicht *)
- (* gelöschten Datensätze *)
-
- FUNCTION Sum(FNr: Byte): Real;
- (* summiert numerische Felder *)
-
- PROCEDURE Zap; (* markierte Sätze löschen *)
-
- PROCEDURE Pack; (* löscht alle markierten Sätze *)
-
- PROCEDURE CopyStruExteTo(DName: PathStr);
- (* legt eine Datei mit den Struktur- *)
- (* informationen der Datenbank an, *)
- (* funktioniert wie der dBase-Befehl *)
- (* Copy Structure Extended *)
-
- PROCEDURE CopyStruTo(DName: PathStr);
- (* legt eine leere Datei mit der *)
- (* gleichen Struktur wie die Daten- *)
- (* bank an, funktioniert wie der *)
- (* dBase-Befehl Copy Structure *)
-
- PROCEDURE CopyTo(DName: PathStr);
- (* kopiert eine Datei, funktioniert *)
- (* wie der dBase-Befehl Copy *)
-
- FUNCTION FileSizeDbf: LongInt;
- (* bestimmt die Anzahl der Sätze in *)
- (* der Datei *)
-
- PROCEDURE FieldInform(FeldName: String; VAR LfdNr: Byte;
- VAR FTyp: Char;
- VAR Laenge, Stellen: Byte);
- (* ermittelt Informationen zum Daten- *)
- (* feld FeldName *)
-
- PROCEDURE Inform(VAR FileName: PathStr; VAR MaxFieldNo: Byte;
- VAR SatzLaenge: Word; VAR Datum: String8);
- (* ermittelt wichtige Informationen *)
- (* über die Datei *)
-
- FUNCTION Locate(FeldName: String; VAR Schluessel): Boolean;
- (* sucht ab der aktuellen Position *)
- (* den Satz, bei dem der Schlüssel *)
- (* mit dem Inhalt des Feldes FeldName *)
- (* übereinstimmt *)
-
- PROCEDURE CopybyNDX(NDXName, ToName: Pathstr);
- (* kopiert den Inhalt der Datenbank *)
- (* in die Datei ToName unter Berück- *)
- (* sichtigung der Sortierung gemäß *)
- (* der dBase-Index-Datei NDX-Name und *)
- (* unter Beachtung von DeletedOn *)
-
- PROCEDURE CopybyNTX(NTXName, ToName: PathStr);
- (* kopiert den Inhalt der Datenbank *)
- (* in die Datei ToName unter Berück- *)
- (* sichtigung der Sortierung gemäß *)
- (* der Clipper-Index-Datei NDX-Name *)
- (* und unter Beachtung von DeletedOn *)
-
- END;
-
- PROCEDURE SetBuf(Size: Word);
- (* setzt die aktuelle Größe des *)
- (* internen Ein-/Ausgabepuffers *)
-
- FUNCTION GetBuf: Word;
- (* emittelt die aktuelle Größe des *)
- (* internen Ein-/Ausgabepuffers *)
-
- FUNCTION IIF(Ausdruck: Boolean; Stri1, Stri2: String)
- : String;
-
- FUNCTION Left(s: String; N: Integer): String;
-
- FUNCTION Len(s: String): Integer;
-
- FUNCTION Log(x: Real): Real;
-
- FUNCTION LTrim(s: String): String;
-
- FUNCTION Right(s: String; N: Integer): String;
-
- FUNCTION RTrim(s: String): String;
-
- FUNCTION Trim(s: String): String;
-
- FUNCTION Space(N: Byte): String;
- (* liefert einen String mit N Blanks *)
-
- FUNCTION Exists(DateiName : PathStr) : Boolean;
-
- FUNCTION GetKeyNDX(NDXName: PathStr): String;
-
- FUNCTION GetKeyNTX(NTXName: PathStr): String;
-
- FUNCTION ErrorText: String;
- (* Ermittelt Fehlernachricht *)
-
- IMPLEMENTATION
-
- END.