[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
LLINDEX.INT
{ ---------------------------------------------------------------- }
{ LOW-LEVEL-INDEXZUGRIFF }
{ ---------------------------------------------------------------- }
{ Erm.glicht die direkte Bearbeitung von Indices nach dBase- und }
{ Clipper-Norm (NDX bzw. NTX), umschaltbar durch eine .bergebene }
{ Variable (beim Erzeugen) bzw. durch automatische Erkennung (beim }
{ Verwenden). }
{ Die hier verwendeten Low-Level-Routinen sind keineswegs f.r den }
{ direkten Zugriff gedacht sondern haben nur Sinn in Kombination }
{ mit den dBase-Routinen ! }
{ ################################################################ }
{ ## ## }
{ ## (c) 1992 by NanoSoft ## }
{ ## ## }
{ ################################################################ }
{ ---------------------------------------------------------------- }
UNIT LLIndex;
INTERFACE
{$UNDEF Debug} {DEFINE Debug}
USES
AStrTool, { Stringbearbeitungsroutinen }
Idle, { Anti-Absturz-Anzeige }
Error, { Fehlerbehandlungsroutinen }
stAck2, { Der Turbo-Stack von NanoSoft }
NSIndex, { Der Turbo-Index von NanoSoft }
DbTypes, { Globale Typdefinitionen }
{$IFDEF Debug}
NSTime, { Die TurboZeitnehmung von NanoSoft }
{$ENDIF}
{$IFDEF Windows}
WinDOS;
{$ELSE}
DOS;
{$ENDIF}
{ ---------------------------------------------------------------- }
{ EIGENTLICHE INDEXFUNKTIONEN }
{ ---------------------------------------------------------------- }
{ FEHLER, die bei jeder Indexfunktion auftreten k.nnen ! }
{ ---------------------------------------------------------------- }
{ Bei allen Indexoperationen wird zuerst gepr.ft, ob die Index- }
{ Datei .berhaupt ge.ffnet ist (via IdxUse oder IdxCreate). }
{ Sollte das nicht der Fall sein, so wird der Fehler Nummer 46 }
{ gesetzt. }
{ ---------------------------------------------------------------- }
{ Wird versucht, eine Funktion zu verwenden, die einen Index- }
{ Inhalt voraussetzt (IdxReplace, IdxDelete usw.), die }
{ Anzahl der S.tze jedoch 0 sein, so wird Fehler 48 gesetzt. }
{ ---------------------------------------------------------------- }
{ Erfordert ein Indexoperation einen Schreib- oder Lesezugriff }
{ auf den Datentr.ger so k.nnen folgende Fehler auftreten : }
{ Fehler 17, Fehler 12 }
{ ---------------------------------------------------------------- }
{ ---------------------------------------------------------------- }
{ .ffnet die mit "Name" angegebene Index-Datei zur genehmen }
{ Verwendung. }
{ ---------------------------------------------------------------- }
{ Sollte beim Namen keine Endung (vulgo Extension) angegeben sein, }
{ so wird defaultm..ig ".NTX" verwendet, sollte diese Datei nicht }
{ zu finden sein, so wird auch noch ".NDX" versucht - und wenn das }
{ auch sinnlos ist, so gibt's einen Fehler 45. }
{ ---------------------------------------------------------------- }
{ Sollte die angegebene Datei nicht vorhanden sein, so wird Fehler }
{ 45 gesetzt, wenn das angegebene Beschreibungsfeld bereits auf }
{ eine ge.ffnete Datei zeigt, Fehler 49. }
{ ---------------------------------------------------------------- }
PROCEDURE IdxUse (F : PIdx; Name : STRING);
{ ---------------------------------------------------------------- }
{ Erzeugt eine neue Index-Datei mit dem angegebenen Namen. Sollte }
{ dabei ein Pfad angegeben worden sein, so wird das angegebene }
{ Verzeichnis verwendet, sonst das aktuelle. }
{ ---------------------------------------------------------------- }
{ In der Index-Beschreibung f m.ssen dabei folgende Felder mit }
{ Werten besetzt sein: Typ mit der Art des Index-Files (NTX, NDX), }
{ Key mit dem Schl.ssel im "Klartext" (z.B. SOUNDEX (NACHNAME + }
{ VORNAME)) in der Art, wie unter dBase / Clipper die Angabe bei }
{ "INDEX ON" erfolgt. }
{ Au.erdem mu. auch das Feld INDEXLEN ausgef.llt sein ! (NS) }
{ Ist eine diese Variablen nicht belegt => Fehler 52 (Neu!!!) }
{ ---------------------------------------------------------------- }
PROCEDURE IdxCreate (F : PIdx; Name : STRING);
{ ---------------------------------------------------------------- }
{ Schlie.t die Index-Datei wieder. }
{ ---------------------------------------------------------------- }
PROCEDURE IdxClose (VAR F : PIdx);
{ ---------------------------------------------------------------- }
{ H.ngt einen Indexeintrag an das Indexfile an. }
{ Dadurch bleibt die Baumstruktur bzw. die Sortiereigenschaft }
{ und die Ausgewogenheit des Baumes erhalten. }
{ ---------------------------------------------------------------- }
{ Achtung: Soll der Index irgendwie "behandelt" werden (SoundEx / }
{ Pack, Kombination aus zwei oder mehr Feldern etc.), so mu. dies }
{ bereits auf der .bergeordneten Ebene geschehen - hier wird as is }
{ geschrieben, nur .berfl.ssige Zeichen werden abgeschnitten bzw. }
{ fehlende durch Spaces erg.nzt ( mittels NSLFormat ) }
{ ---------------------------------------------------------------- }
{ Sollte auf dem Datentr.ger zu wenig Platz sein, so wird Fehler }
{ 12 gesetzt. }
{ ---------------------------------------------------------------- }
PROCEDURE IdxAppend (F : PIdx; DS : Pkey);
{ ---------------------------------------------------------------- }
{ Ersetzt den Schl.ssel Oldkey in einem Indexeintrag durch den }
{ Schl.ssel Newkey. Die Datensatznummer .ndert sich dabei nicht !! }
{ Ist IdxReplace false, so wurde der angegebene Schluessel Oldkey }
{ nicht gefunden. }
{ ---------------------------------------------------------------- }
{ Achtung: Soll der Index irgendwie "behandelt" werden (SoundEx / }
{ Pack, Kombination aus zwei oder mehr Feldern etc.), so mu. dies }
{ bereits auf der .bergeordneten Ebene geschehen - hier wird as is }
{ geschrieben, nur .berfl.ssige Zeichen werden abgeschnitten bzw. }
{ fehlende durch Spaces erg.nzt. }
{ ---------------------------------------------------------------- }
FUNCTION IdxReplace (F : PIdx; OldKey, NewKey : STRING) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ L.scht den angegebenen Indexeintrag. Es werden die Pointer }
{ so verbogen, da. die Baumstruktur erhalten bleibt. }
{ Die Funktion liefert false wenn der Datensatz mit dem }
{ angegebenen Schl.ssel nicht gefunden wurde. }
{ ---------------------------------------------------------------- }
{ Achtung: Soll der Index irgendwie "behandelt" werden (SoundEx / }
{ Pack, Kombination aus zwei oder mehr Feldern etc.), so mu. dies }
{ bereits auf der .bergeordneten Ebene geschehen - hier wird as is }
{ geschrieben, nur .berfl.ssige Zeichen werden abgeschnitten bzw. }
{ fehlende durch Spaces erg.nzt. }
{ ---------------------------------------------------------------- }
FUNCTION IdxDelete (F : PIdx;Key : STRING) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Sucht nach einem Indexeintrag mit dem angegebenen Inhalt. Sollte }
{ dieser gefunden werden, so wird True zur.ckgegeben, sonst False. }
{ Im ersten Fall enth.lt DSNr die Position des Indexeintrages }
{ in der Datenbank (Datensatznummer) sonst die Nummer des }
{ Eintrages, dessen Position der angegebene Schl.ssel einnehmen }
{ w.rde, wenn er mit IdxAppend an die Indexdatei angeh.ngt werden }
{ w.rde ( d.h. DSNr gibt den n.chstgr..eren Datensatz an ). }
{ ---------------------------------------------------------------- }
FUNCTION IdxFindEqual (F : PIdx;Key : STRING;VAR DSNr : LONGINT) : BOOLEAN
;
{ ---------------------------------------------------------------- }
{ Gibt in DSNr den n.chstfolgenden Datensatz unter }
{ Ber.cksichtigung der Sortierreihenfolge zur.ck. }
{ IdxFindNext ist false, wenn der aktuelle Datenzeiger auf den }
{ letzten Datensatz zeigt und IdxFindNext aufgerufen wird }
{ ( d.h. wenn versucht wird .ber das Dateiende hinauszulesen ). }
{ ---------------------------------------------------------------- }
FUNCTION IdxFindNext (F : PIdx;VAR DSNr : LONGINT) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Gibt in DSNr den vorhergehenden Datensatz unter }
{ Ber.cksichtigung der Sortierreihenfolge zur.ck. }
{ IdxFindPrev ist false, wenn der aktuelle Datenzeiger auf den }
{ ersten Datensatz zeigt und IdxFindPrev aufgerufen wird }
{ ( d.h. wenn versucht wird .ber den Dateianfang hinauszulesen ). }
{ ---------------------------------------------------------------- }
FUNCTION IdxFindPrev (F : PIdx;VAR DSNr : LONGINT) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Gibt die DSNr des ersten Datensatzes entsprechend der }
{ Sortierreihenfolge zur.ck. }
{ ---------------------------------------------------------------- }
FUNCTION IdxFindFirst (F : PIdx;VAR DSNr : LONGINT) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Gibt die DSNr des letzten Datensatzes entsprechend der }
{ Sortierreihenfolge zur.ck. }
{ ---------------------------------------------------------------- }
FUNCTION IdxFindLast (F : PIdx;VAR DSNr : LONGINT) : BOOLEAN;
{ ---------------------------------------------------------------- }
{ Gibt die DSNr des aktuellen Datensatzes zur.ck. }
{ ( auf diesen Datensatz zeigt der Datenzeiger ) }
{ ---------------------------------------------------------------- }
FUNCTION IdxGetAkt (F : PIdx) : LONGINT;
{ ---------------------------------------------------------------- }
{ Erg.nzung durch Aurora: Gibt nicht nur die Datensatz-Nummer des }
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson