[<<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