[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
DB13.PAS

 { ---------------------------------------------------------------- }
 {        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 }

This page created by ng2html v1.05, the Norton guide to HTML conversion utility. Written by Dave Pearson