[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
LLDBASE.INT

 { ---------------------------------------------------------------- }
 {                    LOW-LEVEL-DBASE-ROUTINEN                      }
 { ---------------------------------------------------------------- }
 { Dieses Modul erlaubt es, DBF-Dateien zu erzeugen und zu .ffnen,  }
 { Datens.tze zu lesen, anzuh.ngen und zu schreiben und stellt      }
 { einige Hilfsroutinen zur Verf.gung.                              }
 { Zur Erh.hung der Sicherheit beim Lesen und vor allem beim        }
 { Schreiben werden weiters Routinen zur Verf.gung gestellt, die    }
 { die von dBase gelieferten Strings in Turbo-Pascal-gerechte Typen }
 { umwandeln - und umgekehrt. Dadurch k.nnen beispielsweise Datums- }
 { angaben in beliebiger Form ('Wien, am 3.2.92' ...) .bergeben     }
 { werden.                                                          }
 { Die Syntax der Befehle orientiert sich - so weit als m.glich -   }
 { an der von dBase / Clipper mit einem vorangestellten "db".       }
 { ---------------------------------------------------------------- }
 { Zum Einlesen / Schreiben: Die Diskettenzugriffe erfolgen teil-   }
 { weise satzweise (Lesen) und andererseits feldweise (Schreiben) - }
 { Das bedeutet, da. beim Lesen eines einzelnen Feldes kein Disket- }
 { tenzugriff erfolgt, sondern erst, wenn entweder ein Feld ge-     }
 { schrieben oder ein neuer Satz ben.tigt wird (Wechsel mittels     }
 { dbGo, dbSkip, dbDeSkip usw.) oder wenn die Datenbank geschlossen }
 { wird.                                                            }
 { Technisch ausgedr.ckt: Der Puffer ist in "write-through"-Strate- }
 { gie organisiert.                                                 }
 { ---------------------------------------------------------------- }
 {       (c)  1992  by  Aurora  featuring  M.J. Schwaiger           }
 { ---------------------------------------------------------------- }

 UNIT LLdBase; { Low-Level-dBase }

 INTERFACE


   USES
     ADatum,                               { Aurora's Datumsroutinen }
     AStrTool,                 { Aurora's Stringbearbeitungsroutinen }

     DbTypes,                              { Globale Typdefinitionen }
     Idle,                                    { Anti-Absturz-Anzeige }
     Error,                              { Fehlerbehandlungsroutinen }
     TDBError,                                         { Fehlercodes }

 {$IFDEF Windows}
     WinAdd,                          { Windows-Kompatibilit.ts-Unit }
     WinDOS;                                 { Windows-DOS-Routinen }
 {$ELSE}
     DOS;                                        { DOS-DOS-Routinen }
 {$ENDIF}


   TYPE

 { ---------------------------------------------------------------- }
 { Definition eines Records f.r die Kenndaten einer Datenbank.      }
 { Enh.lt neben Anzahl und Beschreibung der Felder die Anzahl der   }
 { Datens.tze, die momentane Position des Datensatz-Zeigers und das }
 { Datum der letzten .nderung. Dazu kommen noch einige f.r den      }
 { Benutzer irrelevante Informationen f.r die Schreib- / Lese-      }
 { operationen.                                                     }
 { ---------------------------------------------------------------- }

     Pdbf           = ^Tdbf;
     Tdbf           = RECORD
       DateiName    : PATHSTR;                { Name Datenbankdatei }
       Memos,                                    { Memos vorhanden ? }
       Opened       : BOOLEAN;               { .berhaupt ge.ffnet ? }
       Version      : BYTE;                { Welche dBase-Version ? }
       AnzFelder    : WORD;                         { Anzahl Felder }
       FeldNr       : WORD;                        { Aktuelles Feld }
       EOF,                                            { End Of File }
       BOF          : BOOLEAN;                      { Begin Of File }
       Feld         : ARRAY [1 .. MaxFelder] OF TFeld;
                                                 { Liste der Felder }
       Datei        : FILE;
       FileTime     : LONGINT;
       Jahr,
       Monat,
       Tag          : BYTE;                 { Datum letzte .nderung }
       AnzDS,                                { Anzahl der Datens.tze }
       PosDS        : LONGINT;                       { Position des }
                                                { Datensatz-Zeigers }
       HeadSize,                              { Header-Gr..e in Byte }
       RecSize      : WORD;                  { Record-Gr..e in Byte }
       Buffer       : POINTER;                { Buffer f.r File-I/O }
       Modified     : BOOLEAN;                { Flag f.r "ge.ndert" }
     END; { RECORD Tdbf }


 { ---------------------------------------------------------------- }
 {                EIGENTLICHE DATENBANKFUNKTIONEN                   }
 { ---------------------------------------------------------------- }

 { ---------------------------------------------------------------- }
 { Bei allen Datenbankoperationen wird zuerst gepr.ft, ob die       }
 { Datenbank .berhaupt ge.ffnet ist (via dbUse oder dbCreate).      }
 { Sollte das nicht der Fall sein, so wird der Fehler Nummer 15     }
 { gesetzt.                                                         }
 { ---------------------------------------------------------------- }
 { Wird versucht, eine Funktion zu verwenden, die einen Datenbank-  }
 { Inhalt voraussetzt (dbReplace, dbRead, dbDelete usw.), die       }
 { Anzahl der S.tze jedoch 0 sein, so wird Fehler 16 gesetzt.       }
 { ---------------------------------------------------------------- }

 { ---------------------------------------------------------------- }
 { .ffnet die mit "Name" angegebene Datenbank zur genehmen Verwen-  }
 { dung.                                                            }
 { ---------------------------------------------------------------- }
 { Sollte die angegebene Datei nicht vorhanden sein, so wird Fehler }
 { 2 gesetzt, sollte der Header nicht stimmen, Fehler 3.            }
 { ---------------------------------------------------------------- }

   PROCEDURE DbUse (F : Pdbf; Name : PATHSTR);


 { ---------------------------------------------------------------- }
 { Erzeugt eine neue Datenbank mit dem angegebenen Namen. Sollte    }
 { dabei ein Pfad angegeben worden sein, so wird das angegebene     }
 { Verzeichnis verwendet, sonst das aktuelle.                       }
 { Sollte beim Namen keine Endung (vulgo Extension) angegeben sein, }
 { so wird defaultm..ig ".DBF" verwendet.                           }
 { ---------------------------------------------------------------- }
 { In der Datenstruktur f^.Feld mu. dabei Feldname, -typ und -gr..e }
 { stehen, in f^.AnzDS die Anzahl der Datens.tze.                   }
 { ---------------------------------------------------------------- }
 { Sollte ein ung.ltiger Feldtyp angegeben worden sein, so wird     }
 { Fehler 9 gesetzt, bei ung.ltiger Gr..e 10 und bei ung.ltigem     }
 { Namen 11. Fehler 10 ist nur als Warnung zu betrachten: Es wird   }
 { einfach eine passende g.ltige Gr..e eingesetzt und das Feld      }
 { trotzdem angelegt.                                               }
 { Sollte eine gleichnamige Datei bereits vorhanden sein, so wird   }
 { Fehler 6 gesetzt, wenn das Laufwerk nicht beschreibbar ist, 7    }
 { und wenn zu wenig Platz ist, 8.                                  }
 { ---------------------------------------------------------------- }

   PROCEDURE DbCreate  (F : Pdbf; Name : PATHSTR);


 { ---------------------------------------------------------------- }
 { Schlie.t die Datenbank wieder. Wenn seit dem letzten Schreiben   }
 { Modifikationen vorgenommen wurden, so werden diese noch vorher   }
 { geschrieben.                                                     }
 { ---------------------------------------------------------------- }

   PROCEDURE DbClose (F : Pdbf);


 { ---------------------------------------------------------------- }
 { Setzt den Datensatzzeiger auf den angegebenen Datensatz.         }
 { ---------------------------------------------------------------- }
 { Sollte der Satz nicht vorhanden sein, so wird Fehler 4 gesetzt.  }
 { ---------------------------------------------------------------- }

   PROCEDURE DbGo (F : Pdbf; P : LONGINT);


 { ---------------------------------------------------------------- }
 { Bewegt den Datensatzzeiger um einen Schritt weiter (sprich: auf  }
 { den n.chsten Datensatz).                                         }
 { ---------------------------------------------------------------- }
 { Sollte das Ende der Datenbank erreicht sein, so wird das EOF-    }
 { Flag gesetzt.                                                    }
 { ---------------------------------------------------------------- }

   PROCEDURE DbSkip (F : Pdbf);


 { ---------------------------------------------------------------- }
 { Bewegt den Datensatzzeiger um einen Schritt zur.ck (sprich: auf  }
 { den vorherigen Datensatz).                                       }
 { ---------------------------------------------------------------- }
 { Sollte der Anfang der Datenbank erreicht sein, so wird das BOF-  }
 { Flag gesetzt.                                                    }
 { ---------------------------------------------------------------- }

   PROCEDURE DbDeSkip (F : Pdbf);


 { ---------------------------------------------------------------- }
 { Bewegt den Datensatzzeiger auf den ersten Datensatz.             }
 { ---------------------------------------------------------------- }
 { Es wird das EOF-Flag gesetzt.                                    }
 { ---------------------------------------------------------------- }

   PROCEDURE DbFirst (F : Pdbf);


 { ---------------------------------------------------------------- }
 { Bewegt den Datensatzzeiger auf den letzten Datensatz.            }
 { ---------------------------------------------------------------- }
 { Es wird das BOF-Flag gesetzt.                                    }
 { ---------------------------------------------------------------- }

   PROCEDURE DbLast (F : Pdbf);


 { ---------------------------------------------------------------- }
 { Gibt "True" zur.ck, wenn das EOF-Flag gesetzt ist, sonst False.  }
 { ---------------------------------------------------------------- }

   FUNCTION DbEOF (F : Pdbf) : BOOLEAN;


 { ---------------------------------------------------------------- }
 { Gibt "True" zur.ck, wenn das BOF-Flag gesetzt ist, sonst False.  }
 { ---------------------------------------------------------------- }

   FUNCTION DbBOF (F : Pdbf) : BOOLEAN;


 { ---------------------------------------------------------------- }
 { Liest aus dem aktuellen Datensatz das Feld mit der angegebenen   }
 { Nummer und gibt den Inhalt als String (!) zur.ck.                }
 { ---------------------------------------------------------------- }
 { Sollte das Feld nicht vorhanden sein, so wird Fehler 5 gesetzt.  }
 { ---------------------------------------------------------------- }

   FUNCTION DbRead (F : Pdbf; FName : TFeldStr) : STRING;


 { ---------------------------------------------------------------- }

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