home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / database / tdb / demo / db13.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-07-19  |  7.3 KB  |  200 lines

  1. { ──────────────────────────────────────────────────────────────── }
  2. {        TDB DEMOPROGRAMM 13 - VERGLEICH (IDX) GO / RECNO etc.     }
  3. { ──────────────────────────────────────────────────────────────── }
  4. { Erzeugt eine neue Datenbank ("DB13.DBF"), "füllt" sie mit 100    }
  5. { Testdatensätzen und legt einen Index auf das Namensfeld.         }
  6. { Anschließend wird die Datenbank normal geöffnet und - begleitet  }
  7. { von diversen "Go"'s und "IdxGo"'s die logische und die physika-  }
  8. { lische Satznummer ausgegeben.                                    }
  9. { ──────────────────────────────────────────────────────────────── }
  10. { Nicht wundern, wenn's ab und zu etwas länger dauert: dieses Pro- }
  11. { gramm demonstriert das Verhalten von Programmkonstrukten, die    }
  12. { eigentlich - aus Performance-Gründen - nicht verwendet werden    }
  13. { sollten, nämlich "Go"'s und "IdxGo"'s in indizierten Daten-      }
  14. { banken.                                                          }
  15. { ──────────────────────────────────────────────────────────────── }
  16. { Als Error-Handler wird wieder "ErrPrint" eingesetzt, wodurch     }
  17. { eventuelle Fehler am Drucker mitprotokolliert werden.            }
  18. { ──────────────────────────────────────────────────────────────── }
  19. {       (c)  1992  by  Aurora  featuring  M.J. Schwaiger           }
  20. { ──────────────────────────────────────────────────────────────── }
  21. {      History:                                                    }
  22. { 1992-07-19   MS   Interfacefestlegung und Implementierung.       }
  23. { ──────────────────────────────────────────────────────────────── }
  24.  
  25. PROGRAM Db13;
  26.  
  27.   USES
  28. {$IFDEF Windows}
  29.     WINCRT,
  30. {$ENDIF}
  31.     DbTypes,                { Enthält die Typdefinitionen für alle }
  32.                             { Module des Datenbanksystems TDB.     }
  33.     Error,                  { Fehlerbehandlungsroutinen, -handler  }
  34.     LongIdle,               { Idle-Prozeduren für längere Vorgänge }
  35.     ATestGen,                                 { Testdatengenerator }
  36.     TDB;                    { Die eigentlichen Datenbank-Objekte.  }
  37.  
  38.  
  39.   VAR
  40.     DB             : PDataBase;                  { Datenbankobjekt }
  41.     Index          : PIndex;
  42.     IdxCI          : TIdxCreateInfo;
  43.                           { Wird zum Initialisieren Index benötigt }
  44.     CI             : TCreateInfo;
  45.                       { Wird zum Initialisieren Datenbank benötigt }
  46.  
  47.   BEGIN                                            { Hauptprogramm }
  48. {$IFNDEF Windows}
  49.     SetErrHandler (ErrPrint);         { Alle Fehler werden auf dem }
  50.                                       { Drucker mitprotokolliert.  }
  51.     SetLongIdleHandler (LIdleScreenInit,   { "Fortschrittsanzeige" }
  52.                                 LIdleScreenUpDate, LIdleScreenDone);
  53. {$ENDIF}
  54. (*
  55.     FILLCHAR (CI.Felder, SIZEOF (CI.Felder), 0);    { Vorsicht ist }
  56.                                    { die Mutter der Porzellankiste }
  57.  
  58.     CI.Felder [1].Name := 'NAME';           { Felddefinitionen für }
  59.     CI.Felder [1].Typ := 'C';                 { die neue Datenbank }
  60.     CI.Felder [1].Size := 50;
  61.     CI.Felder [1].NK := 0;
  62.  
  63.     CI.Felder [2].Name := 'VORNAME';
  64.     CI.Felder [2].Typ := 'C';
  65.     CI.Felder [2].Size := 50;
  66.     CI.Felder [2].NK := 0;
  67.  
  68.     CI.Felder [3].Name := 'STRASSE';
  69.     CI.Felder [3].Typ := 'C';
  70.     CI.Felder [3].Size := 100;
  71.     CI.Felder [3].NK := 0;
  72.  
  73.     CI.Felder [4].Name := 'PLZ';
  74.     CI.Felder [4].Typ := 'N';
  75.     CI.Felder [4].Size := 12;
  76.     CI.Felder [4].NK := 0;
  77.  
  78.     CI.Felder [5].Name := 'GEBOREN';
  79.     CI.Felder [5].Typ := 'D';
  80.     CI.Felder [5].Size := 8;
  81.     CI.Felder [5].NK := 0;
  82.  
  83.     CI.Felder [6].Name := 'GEHALT';
  84.     CI.Felder [6].Typ := 'N';
  85.     CI.Felder [6].Size := 16;
  86.     CI.Felder [6].NK := 2;
  87.  
  88.     CI.AnzFelder := 6;                        { Exakt 6 Felder ... }
  89.  
  90.     WRITELN;
  91.     WRITELN;
  92.  
  93.                             { Datenbank erzeugen, 100 Datensätze   }
  94.                            { anhängen, Datenbank wieder schließen. }
  95.     WRITELN (GenerateCreate ('DB13', CI, 100));
  96.  
  97. { ──────────────────────────────────────────────────────────────── }
  98. *)
  99.     WRITELN (MEMAVAIL);
  100.  
  101.    { Speicherallozierung und Initialisierung des Datenbankobjektes }
  102.     DB := NEW (PDataBase, Use ('DB05.DBF'));
  103.  
  104.     IF (GetErr = 0) AND (DB^.LastRec > 0) THEN    { Keine Fehler ? }
  105.     BEGIN
  106.       IdxCI.AField := 'NAME';                    { Auf Feld "Name" }
  107.       IdxCI.Typ := NTX;                        { Typ Clipper-Index }
  108.       IdxCI.IndexLen := 40;            { Schlüssellänge 40 Zeichen }
  109.       IdxCI.KeyBuild := 'NAME';             { dBase-"Bauanleitung" }
  110.  
  111.                           { Initialisierung / Erstellung Indexfile }
  112.       Index := NEW (PIndex, Create ('DB13Name', IdxCI, DB));
  113.  
  114.       DB^.IndexOn ('NAME', Index);
  115.  
  116. { ──────────────────────────────────────────────────────────────── }
  117.  
  118.       DB^.Go (10);
  119.       DB^.Delete;
  120.  
  121.       DB^.Go (40);
  122.       DB^.Delete;
  123.  
  124.       DB^.Go (60);
  125.       DB^.Delete;
  126.  
  127.       WRITELN ('Sätze physikalisch: ', DB^.LastRec,
  128.                                            ' Logisch: ', DB^.Count);
  129.       WRITELN;
  130.  
  131. { ──────────────────────────────────────────────────────────────── }
  132.  
  133.       DB^.Go (10);
  134.       WRITELN ('Nach DB^.Go (10) (deleted): ',
  135.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  136.       DB^.Skip (1);
  137.       WRITELN ('Darauffolgendes DB^.Skip: ',
  138.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  139.       DB^.Skip (1);
  140.       WRITELN ('Noch ein DB^.Skip: ',
  141.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  142.  
  143.       WRITELN;
  144.  
  145. { ──────────────────────────────────────────────────────────────── }
  146.  
  147.       DB^.IdxGo (10);
  148.       WRITELN ('Nach DB^.IdxGo (10): ',
  149.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  150.       DB^.Skip (1);
  151.       WRITELN ('Darauffolgendes DB^.Skip: ',
  152.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  153.       DB^.Skip (1);
  154.       WRITELN ('Noch ein DB^.Skip: ',
  155.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  156.  
  157.       WRITELN;
  158.  
  159. { ──────────────────────────────────────────────────────────────── }
  160.  
  161.       DB^.IdxGo (50);
  162.       WRITELN ('Nach DB^.IdxGo (50): ',
  163.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  164.       DB^.Skip (-1);
  165.       WRITELN ('Darauffolgendes DB^.Skip (-1): ',
  166.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  167.       DB^.Skip (-1);
  168.       WRITELN ('Noch ein DB^.Skip (-1): ',
  169.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  170.  
  171.       WRITELN;
  172.  
  173. { ──────────────────────────────────────────────────────────────── }
  174.  
  175.       DB^.Go (50);
  176.       WRITELN ('Nach DB^.Go (50): ',
  177.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  178.       DB^.Skip (-1);
  179.       WRITELN ('Darauffolgendes DB^.Skip (-1): ',
  180.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  181.       DB^.Skip (-1);
  182.       WRITELN ('Noch ein DB^.Skip (-1): ',
  183.                                     DB^.RecNo, ' / ', DB^.IdxRecNo);
  184.  
  185.       WRITELN;
  186.  
  187. { ──────────────────────────────────────────────────────────────── }
  188.  
  189.       WRITELN (MEMAVAIL);
  190.  
  191.       DISPOSE (DB, Close); { Index wird automatisch mit gelöscht ! }
  192.     END; { IF (GetErr = 0) AND ... }
  193.  
  194.     WRITELN (MEMAVAIL);
  195.  
  196.     WRITELN;
  197.     WRITE ('Weiter mit <Return>-Taste ...');
  198.     READLN;
  199.   END. { PROGRAM Db13 }
  200.