home *** CD-ROM | disk | FTP | other *** search
- { ──────────────────────────────────────────────────────────────── }
- { TDB DEMOPROGRAMM 13 - VERGLEICH (IDX) GO / RECNO etc. }
- { ──────────────────────────────────────────────────────────────── }
- { Erzeugt eine neue Datenbank ("DB13.DBF"), "füllt" sie mit 100 }
- { Testdatensätzen und legt einen Index auf das Namensfeld. }
- { Anschließend wird die Datenbank normal geöffnet und - begleitet }
- { von diversen "Go"'s und "IdxGo"'s die logische und die physika- }
- { lische Satznummer ausgegeben. }
- { ──────────────────────────────────────────────────────────────── }
- { Nicht wundern, wenn's ab und zu etwas länger dauert: dieses Pro- }
- { gramm demonstriert das Verhalten von Programmkonstrukten, die }
- { eigentlich - aus Performance-Gründen - nicht verwendet werden }
- { sollten, nämlich "Go"'s und "IdxGo"'s in indizierten Daten- }
- { banken. }
- { ──────────────────────────────────────────────────────────────── }
- { Als Error-Handler wird wieder "ErrPrint" eingesetzt, wodurch }
- { eventuelle Fehler am Drucker mitprotokolliert werden. }
- { ──────────────────────────────────────────────────────────────── }
- { (c) 1992 by Aurora featuring M.J. Schwaiger }
- { ──────────────────────────────────────────────────────────────── }
- { History: }
- { 1992-07-19 MS Interfacefestlegung und Implementierung. }
- { ──────────────────────────────────────────────────────────────── }
-
- PROGRAM Db13;
-
- USES
- {$IFDEF Windows}
- WINCRT,
- {$ENDIF}
- DbTypes, { Enthält die Typdefinitionen für alle }
- { Module des Datenbanksystems TDB. }
- Error, { Fehlerbehandlungsroutinen, -handler }
- LongIdle, { Idle-Prozeduren für längere Vorgänge }
- ATestGen, { Testdatengenerator }
- TDB; { Die eigentlichen Datenbank-Objekte. }
-
-
- VAR
- DB : PDataBase; { Datenbankobjekt }
- Index : PIndex;
- IdxCI : TIdxCreateInfo;
- { Wird zum Initialisieren Index benötigt }
- CI : TCreateInfo;
- { Wird zum Initialisieren Datenbank benötigt }
-
- BEGIN { Hauptprogramm }
- {$IFNDEF Windows}
- SetErrHandler (ErrPrint); { Alle Fehler werden auf dem }
- { Drucker mitprotokolliert. }
- SetLongIdleHandler (LIdleScreenInit, { "Fortschrittsanzeige" }
- LIdleScreenUpDate, LIdleScreenDone);
- {$ENDIF}
- (*
- FILLCHAR (CI.Felder, SIZEOF (CI.Felder), 0); { Vorsicht ist }
- { die Mutter der Porzellankiste }
-
- CI.Felder [1].Name := 'NAME'; { Felddefinitionen für }
- CI.Felder [1].Typ := 'C'; { die neue Datenbank }
- CI.Felder [1].Size := 50;
- CI.Felder [1].NK := 0;
-
- CI.Felder [2].Name := 'VORNAME';
- CI.Felder [2].Typ := 'C';
- CI.Felder [2].Size := 50;
- CI.Felder [2].NK := 0;
-
- CI.Felder [3].Name := 'STRASSE';
- CI.Felder [3].Typ := 'C';
- CI.Felder [3].Size := 100;
- CI.Felder [3].NK := 0;
-
- CI.Felder [4].Name := 'PLZ';
- CI.Felder [4].Typ := 'N';
- CI.Felder [4].Size := 12;
- CI.Felder [4].NK := 0;
-
- CI.Felder [5].Name := 'GEBOREN';
- CI.Felder [5].Typ := 'D';
- CI.Felder [5].Size := 8;
- CI.Felder [5].NK := 0;
-
- CI.Felder [6].Name := 'GEHALT';
- CI.Felder [6].Typ := 'N';
- CI.Felder [6].Size := 16;
- CI.Felder [6].NK := 2;
-
- CI.AnzFelder := 6; { Exakt 6 Felder ... }
-
- WRITELN;
- WRITELN;
-
- { Datenbank erzeugen, 100 Datensätze }
- { anhängen, Datenbank wieder schließen. }
- WRITELN (GenerateCreate ('DB13', CI, 100));
-
- { ──────────────────────────────────────────────────────────────── }
- *)
- WRITELN (MEMAVAIL);
-
- { Speicherallozierung und Initialisierung des Datenbankobjektes }
- DB := NEW (PDataBase, Use ('DB05.DBF'));
-
- IF (GetErr = 0) AND (DB^.LastRec > 0) THEN { Keine Fehler ? }
- BEGIN
- IdxCI.AField := 'NAME'; { Auf Feld "Name" }
- IdxCI.Typ := NTX; { Typ Clipper-Index }
- IdxCI.IndexLen := 40; { Schlüssellänge 40 Zeichen }
- IdxCI.KeyBuild := 'NAME'; { dBase-"Bauanleitung" }
-
- { Initialisierung / Erstellung Indexfile }
- Index := NEW (PIndex, Create ('DB13Name', IdxCI, DB));
-
- DB^.IndexOn ('NAME', Index);
-
- { ──────────────────────────────────────────────────────────────── }
-
- DB^.Go (10);
- DB^.Delete;
-
- DB^.Go (40);
- DB^.Delete;
-
- DB^.Go (60);
- DB^.Delete;
-
- WRITELN ('Sätze physikalisch: ', DB^.LastRec,
- ' Logisch: ', DB^.Count);
- WRITELN;
-
- { ──────────────────────────────────────────────────────────────── }
-
- DB^.Go (10);
- WRITELN ('Nach DB^.Go (10) (deleted): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (1);
- WRITELN ('Darauffolgendes DB^.Skip: ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (1);
- WRITELN ('Noch ein DB^.Skip: ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
-
- WRITELN;
-
- { ──────────────────────────────────────────────────────────────── }
-
- DB^.IdxGo (10);
- WRITELN ('Nach DB^.IdxGo (10): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (1);
- WRITELN ('Darauffolgendes DB^.Skip: ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (1);
- WRITELN ('Noch ein DB^.Skip: ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
-
- WRITELN;
-
- { ──────────────────────────────────────────────────────────────── }
-
- DB^.IdxGo (50);
- WRITELN ('Nach DB^.IdxGo (50): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (-1);
- WRITELN ('Darauffolgendes DB^.Skip (-1): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (-1);
- WRITELN ('Noch ein DB^.Skip (-1): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
-
- WRITELN;
-
- { ──────────────────────────────────────────────────────────────── }
-
- DB^.Go (50);
- WRITELN ('Nach DB^.Go (50): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (-1);
- WRITELN ('Darauffolgendes DB^.Skip (-1): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
- DB^.Skip (-1);
- WRITELN ('Noch ein DB^.Skip (-1): ',
- DB^.RecNo, ' / ', DB^.IdxRecNo);
-
- WRITELN;
-
- { ──────────────────────────────────────────────────────────────── }
-
- WRITELN (MEMAVAIL);
-
- DISPOSE (DB, Close); { Index wird automatisch mit gelöscht ! }
- END; { IF (GetErr = 0) AND ... }
-
- WRITELN (MEMAVAIL);
-
- WRITELN;
- WRITE ('Weiter mit <Return>-Taste ...');
- READLN;
- END. { PROGRAM Db13 }
-