home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / database / tdb / demo / db11.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-06-13  |  5.8 KB  |  176 lines

  1. { ──────────────────────────────────────────────────────────────── }
  2. {          TDB DEMOPROGRAMM 11 - SUCHEN VON FELDINHALTEN           }
  3. { ──────────────────────────────────────────────────────────────── }
  4. { Verwendet die von "DB05" erzeugte Datenbank samt Indices (müssen }
  5. { bereits existieren), öffnet Datenbank- und Indexfiles und sucht  }
  6. { nach diversen Feldinhalten.                                      }
  7. { ──────────────────────────────────────────────────────────────── }
  8. { Interessant ist es, einmal die Index-Objekte herauszunehmen und  }
  9. { den Zeitbedarf zu vergleichen.                                   }
  10. { ──────────────────────────────────────────────────────────────── }
  11. { Als Error-Handler wird wieder "ErrPrint" eingesetzt, wodurch     }
  12. { eventuelle Fehler am Drucker mitprotokolliert werden.            }
  13. { ──────────────────────────────────────────────────────────────── }
  14. {       (c)  1992  by  Aurora  featuring  M.J. Schwaiger           }
  15. { ──────────────────────────────────────────────────────────────── }
  16. {      History:                                                    }
  17. { 1992-05-26   MS   Interfacefestlegung und Implementierung.       }
  18. { ──────────────────────────────────────────────────────────────── }
  19.  
  20. PROGRAM Db11;
  21.  
  22. {$UNDEF Windows}
  23.  
  24.   USES
  25. {$IFDEF Windows}
  26.     WINCRT,
  27. {$ENDIF}
  28.     DbTypes,                { Enthält die Typdefinitionen für alle }
  29.                             { Module des Datenbanksystems TDB.     }
  30.     Error,                  { Fehlerbehandlungsroutinen, -handler  }
  31.     TDB;                    { Die eigentlichen Datenbank-Objekte.  }
  32.  
  33.  
  34.   VAR
  35.     DB             : PDataBase;                  { Datenbankobjekt }
  36.     Index          : PIndex;
  37.     Where          : LONGINT;
  38.     Begriff        : STRING;
  39.     SR             : PDbSearchRec;
  40.  
  41.  
  42.   BEGIN                                            { Hauptprogramm }
  43. {$IFNDEF Windows}
  44.     SetErrHandler (ErrPrint);         { Alle Fehler werden auf dem }
  45.                                       { Drucker mitprotokolliert.  }
  46. {$ENDIF}
  47.     WRITELN (MEMAVAIL);
  48.  
  49.    { Speicherallozierung und Initialisierung des Datenbankobjektes }
  50.     DB := NEW (PDataBase, Use ('DB05'));
  51.  
  52.     DB^.SetDeleted (On);
  53.  
  54.     IF (GetErr = 0) AND (DB^.Count > 0) THEN      { Keine Fehler ? }
  55.     BEGIN
  56.                                        { Initialisierung Indexfile }
  57. (*
  58.       Index := NEW (PIndex, Use ('DB05STR', 'STRASSE', DB));
  59.       DB^.IndexOn ('STRASSE', Index);
  60.  
  61.       Index := NEW (PIndex, Use ('DB05PLZ', 'PLZ', DB));
  62.       DB^.IndexOn ('PLZ', Index);
  63.  
  64.       Index := NEW (PIndex, Use ('DB05GEBOREN', 'GEBOREN', DB));
  65.       DB^.IndexOn ('GEBOREN', Index);
  66.  
  67.       Index := NEW (PIndex, Use ('DB05GEHALT', 'GEHALT', DB));
  68.       DB^.IndexOn ('GEHALT', Index);
  69.  
  70.       Index := NEW (PIndex, Use ('DB05Name', 'NAME', DB));
  71.       DB^.IndexOn ('NAME', Index);
  72. *)
  73.       WRITELN (MEMAVAIL);
  74.  
  75.       REPEAT
  76.         WRITELN;
  77.         WRITE ('Gehalt >= 0, Name <= "M", Name >= ? (CR = Ende) ');
  78.         READLN (Begriff);
  79.  
  80.         IF Begriff <> '' THEN
  81.         BEGIN
  82.                  { Hier die gewünschte cpXXX-Konstante eintragen ! }
  83.           SR := NewSearchRec ('NAME', Begriff, cpGreaterEqual,
  84.                   NewSearchRec ('NAME', 'M', cpLessEqual,
  85.                     NewSearchRec ('GEHALT', '0', cpGreaterEqual, Nil
  86.                     )
  87.                   )
  88.                 );
  89.  
  90.           Where := DB^.Search (SR);
  91.  
  92.           IF Where > 0 THEN
  93.             WHILE Where > 0 DO
  94.             BEGIN
  95.               WRITELN (Where : 3, '-', DB^.RecNo : 3, ': ',
  96.                       DB^.Read ('NAME'), ' ', DB^.ReadR ('GEHALT'));
  97.  
  98.               Where := DB^.Continue;
  99.             END
  100.           ELSE
  101.             WRITELN ('Nicht gefunden !');
  102.  
  103.           DisposeSearchRec (SR);
  104.         END; { IF Begriff <> '' THEN }
  105.       UNTIL (GetErr <> 0) OR (Begriff = '');
  106.  
  107.       REPEAT
  108.         WRITELN;
  109.         WRITE ('Geboren enthält "92", Name < "XZ", Name > ? (CR = Ende) ');
  110.         READLN (Begriff);
  111.  
  112.         IF Begriff <> '' THEN
  113.         BEGIN
  114.                  { Hier die gewünschte cpXXX-Konstante eintragen ! }
  115.           SR := NewSearchRec ('NAME', Begriff, cpGreater,
  116.                   NewSearchRec ('NAME', 'XZ', cpLess,
  117.                     NewSearchRec ('GEBOREN', '92', cpIsIn, Nil
  118.                     )
  119.                   )
  120.                 );
  121.  
  122.           Where := DB^.Search (SR);
  123.  
  124.           IF Where > 0 THEN
  125.             WHILE Where > 0 DO
  126.             BEGIN
  127.               WRITELN (Where : 3, '-', DB^.RecNo : 3, ': ',
  128.                     DB^.Read ('NAME'), ' ', DB^.ReadD_ ('GEBOREN'));
  129.  
  130.               Where := DB^.Continue;
  131.             END
  132.           ELSE
  133.             WRITELN ('Nicht gefunden !');
  134.  
  135.           DisposeSearchRec (SR);
  136.         END; { IF Begriff <> '' THEN }
  137.       UNTIL (GetErr <> 0) OR (Begriff = '');
  138.  
  139.       REPEAT
  140.         WRITELN;
  141.         WRITE ('Simpel-Suche Name <= ? (CR = Ende) ');
  142.         READLN (Begriff);
  143.  
  144.         IF Begriff <> '' THEN
  145.         BEGIN
  146.                  { Hier die gewünschte cpXXX-Konstante eintragen ! }
  147.           SR := NewSearchRec ('NAME', Begriff, cpLessEqual, Nil
  148.                 );
  149.  
  150.           Where := DB^.Search (SR);
  151.  
  152.           IF Where > 0 THEN
  153.             WHILE Where > 0 DO
  154.             BEGIN
  155.               WRITELN (Where : 3, '-', DB^.RecNo : 3, ': ',
  156.                     DB^.Read ('NAME'), ' ', DB^.ReadD_ ('GEBOREN'));
  157.  
  158.               Where := DB^.Continue;
  159.             END
  160.           ELSE
  161.             WRITELN ('Nicht gefunden !');
  162.  
  163.           DisposeSearchRec (SR);
  164.         END; { IF Begriff <> '' THEN }
  165.       UNTIL (GetErr <> 0) OR (Begriff = '');
  166.  
  167.       DISPOSE (DB, Close); { Index wird automatisch mit gelöscht ! }
  168.     END; { IF (GetErr = 0) AND ... }
  169.  
  170.     WRITELN (MEMAVAIL);
  171.  
  172.     WRITELN;
  173.     WRITE ('Weiter mit Taste ...');
  174.     READLN;
  175.   END. { PROGRAM Db11 }
  176.