|
Einführung
Funktionsweise
Technische Daten
Beispielprogramm
Einführung
Der Einsatz moderner Anwendungsprogramme erlaubt das Erfassen und Bearbeiten großer Datenmengen. Für den Anwender wird es daher immer schwieriger, in dem vorhandenen Datenbestand die für ihn relevanten Informationen zu finden.
Als Lösung bieten die Softwareprogramme in der Regel indexbasiertes Retrieval an, welches vom Programmierer z.B. durch ein Toolkit wie FATS realisiert werden kann. Es ermöglicht dem Anwender die Suche bestimmter Datensätze durch die Eingabe von Schlagwörtern bzw. Indizes, die den Datensätzen bei deren Erfassung zugeordnet wurden. Beispiele hierfür sind Artikelnummern zur Identifikation eines Artikel-Stammsatzes oder der Kunden-Nachname zur Suche im Kundenstamm.
Herkömmliche Suchverfahren haben daher folgende Nachteile:
FATS Extended bietet Ihnen mit den Matchcode Befehlen faszinierende neue Möglichkeiten, um die genannten Probleme bei der Datensuche zu überwinden.Mit Hilfe dieser Befehle können Sie Ihre Anwendungprogramme innerhalb weniger Stunden um eine Matchcode- bzw. Volltextsuche erweitern, die den Anwendern Ihrer Software eine natürliche, dem Menschen angepaßte Retrievalfunktion mit maximalem Komfort bietet.
Folgende Vorteile bietet die FATS-Matchcodesuche:
Funktionsweise
Mit den FATS-Matchcode Befehlen läßt sich auf einfachste Weise ein Volltext-Index mit dem Inhalt der von Ihnen gewünschten Spalten bzw. Felder einer Datentabelle bzw. -datei erstellen. Jedes Wort und jede Zahl wird in den Index aufgenommen, es wird eine "invertierte Liste" erstellt.
Dieser Index ermöglicht es FATS, jeden Datensatz durch Angabe beliebiger Begriffe in Sekundenbruchteilen zu finden.
Der Matchcode wurde auf Fragment- bzw. Wortfetzensuche optimiert, d.h. im Unterschied zu herkömmlichen Volltext-Suchsystemen nimmt die Geschwindigkeit bei der Suche nach Wortteilen nicht ab (Wortmitte, Wortende etc.).
FATS stellt dem Anwendungsprogramm unmittelbar nach der Suche eine Liste aller gefundener Satznummern bzw. Primary-Keys zur Verfügung.
Technische Daten
Beispielprogramm
Das nachfolgende Visual Basic Beispiel demonstriert die Verwendung der FATS Matchcode-Befehle. Auch wenn Sie mit einer anderen Programmiersprache arbeiten, sollten Sie die folgenden Erläuterungen durchlesen. Eine individuelle Beschreibung der Programmiersprachen-Schnittstellen finden Sie im Kapitel 9. Auf der FATS-Diskette finden Sie außerdem zu jeder Programmiersprache ein Beispielprogramm.
Die Matchcode Befehle sind nur in der erweiterten Version von FATS verfügbar.
Matchcode-Indexdatei erstellen
Der Matchcode-Index wird mit dem Befehl Create Matchcode File (MC) erstellt. Dabei geben Sie die logischen Suchgruppen und deren Eigenschaften an. Eine Suchgruppe besteht aus dem Inhalt eines oder mehrerer Datenfelder, in denen bei Angabe der Suchbegriffe gemeinsam gesucht werden soll. Eine Matchcodedatei verwaltet bis zu 32 Suchgruppen, in denen bei späteren Abfragen "UND-verknüpft" gesucht werden kann.
In diesem Beispiel sollen einige Datenfelder eines Kundenstamms im Volltext indiziert werden. Der Datensatz hat dabei folgenden Aufbau:
Type kdat
Loeschkennz As String * 1
Anrede As String * 5
Name As String * 25
Branche As String * 25
Strasse As String * 25
Plz As String * 5
Ort As String * 20
End Type
Die folgende Programmsequenz erstellt die Matchcode-Indexdatei "kunden.fms" mit den Suchgruppen Name (I1), Branche (I2) und Plz/Ort (I3):
szCmnd = "MC\kunden.fms\\1\I1\I2\I3"
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
Der Aufbau des Befehls:
CMND$ = "MC\FileName\Flags\FileNo\Col1def[\Col2def]"
FileName Name der Datei, eventuell mit Pfadangabe
(z.B. C:/DATEN/KUNDEN.FMS oder KUNDEN.FMS)Flags Momentan noch nicht benutzt FileNo Nummer der Indexdatei Col#def Definition der Datenspalte # (Flags, durch Komma getrennt).
Der Inhalt der entsprechenden Datenspalten wird später den Befehlen "MB", "MI" und "MD" in der durch diesen Befehl festgelegten Reihenfolge übergeben.I# Spalteninhalt in der Suchgruppe # (1-32) indizieren. Sie können mehrere Spalten zu einer logischen Suchgruppe zusammenfassen (z.B. Vorname, Nachname). An dieser Stelle sind noch weitere Einstellungen möglich, die ausführlich auf der Seite Seite 4-56 beschrieben sind.
Matchcode generieren (Indizierung)
Nachdem die Datei definiert und erzeugt wurde, wird der Inhalt der Datensätze mit dem Befehl Build Matchcode (MB) in die Datei eingefügt. Dabei dient die Definition, welche Sie über den Befehl Create Matchcode File (MC) festgelegt haben, als Schablone für diesen Befehl.
Der Aufbau des Befehls:
CMND$ = "MB\FileNo\RecID\Col1data[\Col2data[\Col3data]]"
FileNo Nummer der Indexdatei RecID <> 0 Datensatz- bzw. ID-Nummer
== 0 Matchcode-Indizierung beendenCol#data Inhalt der Datenspalte X [ ] Optional
Der folgende Beispiel-Programmcode indiziert den Inhalt der gesamten Datendatei innerhalb einer Schleife:
dwDatensatzNr = 0
Do
' Datensatz in Puffer einlesen
Get #1, dwDatensatzNr + 1, kunden
If Not EOF(1) Then
dwDatensatzNr = dwDatensatzNr + 1
' FATS-Kommandostring erstellen...
szCmnd = "MB\1\" & Str$(dwDatensatzNr)
If kunden.loeschkennz = " " Then
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
End If
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
If nErrorcode <> 0 Then
' Wenn bei der Generierung des Matchcode-Indizes ein Fehler auftritt, dann
' wird die entsprechende Datei automatisch geschlossen.
Print "FATS Fehlercode: "; nErrorcode; " (Befehl: MB)"
Exit Do
End If
Else
' Nachdem der letzte Datensatz indiziert wurde, wird die Indizierung durch die
' Angabe einer Null anstelle einer gültigen Datensatznummer beendet
' ("MB\{Dateinummer}\0"). Die Datei wird dabei geschlossen - ein Close-Befehl
' ist danach nicht mehr nötig.
dwRecno = FATSCall("MB\1\0", nErrorcode, nKeylen, 0)
End If
Loop While Not EOF(1)
Matchcode-Indexdatei öffnen
Mit dem Befehl Open Indexfile (O) wird eine Matchcodedatei mit den über den Befehl Auto Refresh (Y) definierten Öffnungsflags geöffnet und der angegebenen Dateinummer zugewiesen. Diese Nummer muß bei allen nachfolgenden FATS-Befehlen angegeben werden, um mit der Indexdatei zu arbeiten.
CMND = "O\kunden.fms\1"
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
Suchen im Matchcode-Index
Der Befehl Search in Matchcode (MS) führt eine Matchcode-Abfrage durch und erstellt eine Ergebnistabelle mit den Datensatz- bzw. ID-Nummern der Datensätze, welche die gesuchten Begriffe beinhalten. Bei erfolgreicher Verarbeitung (nErrorcode == 0) wird der Applikation die Datensatz- bzw. ID-Nummer des ersten Treffers über die Variable "dwRecno" zur weiteren Verarbeitung zur Verfügung gestellt. Die Ergebnistabelle kann anschließend mit den Browserbefehlen ( "MA", "ME", "MN", "MP" etc.) ausgelesen werden.
Der folgende Programmcode übergibt der FATS-Matchcodesuche den Inhalt der Eingabefelder bzw. –strings szName (Suchgruppe 1), szBranche (Gruppe 2) und szPlzOrt (Gruppe 3: PLZ und Ort). FATS generiert daraufhin eine Ergebnistabelle der Datensätze, die alle gesuchten Begriffe beinhalten:
CMND = "MS\1\\0\" & szName & "\" & szBranche & "\" & szPlzOrt
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
Der Aufbau des Befehls:
CMND$ = "MS\FileNo\Flags\Total\SearchGrp1[\SearchGrp2...]"
FileNo Nummer der Indexdatei Flags Der Suchvorgang kann durch die Angabe verschiedener Flags beeinflußt werden. Eine Beschreibung der Flags finden Sie in der Befehlsreferenz Total Maximale Anzahl Treffer in der Ergebnistabelle: 0 Es werden alle Treffer in die Ergebnistabelle gestellt. Diese Einstellung arbeitet sehr schnell, es findet aber auch keine Sortierung anhand der Trefferqualität statt. > 0 Es wird versucht, die angegebene Anzahl Treffer in die Ergebnistabelle zu stellen. Diese Treffer werden einer Sortierung bezüglich ihrer Qualität unterzogen und dann in eine von 7 Sortiergruppen eingeordnet. SearchGrp# Hier werden die in der Suchgruppe # gesuchten Begriffe angegeben.
Auswertung der Ergebnistabelle
Für die Auswertung der Ergebnistabelle können abhängig von der Programmlogik verschiedene FATS-Befehle verwendet werden. In dem folgenden Beispiel werden alle Treffer in einer Visual-Basic Listbox ausgegeben:
' Die Satznummer des ersten Treffers steht bereits in der
' dwRecno-Variable (siehe oben)
Do
' Datensatz laden und in Liste ausgeben.
Get #1, dwRecno, kunden
Liste.AddItem kunden.Name & " | " & kunden.Plz & " " & kunden.Ort
' Nächsten Treffer mit dem "MN"-Befehl (Next Result) ermitteln
dwRecno = FATSCall("MN\1", nErrorcode, nKeylen, 0)
Loop While nErrorcode = 0
Folgende Befehle werden von FATS angeboten:
Get First Result; Seite 4-66
Get Last Result; Seite 4-71
Get Previous Result; Seite 4-75
Get Next Result; Seite 4-73
Get Next Result After; Seite 4-51
Get Previous Result Before; Seite 4-64
Einfügen eines neuen Datensatzes
Bei der Neuanlage eines Datensatzes kann der Befehl "MI" angewendet werden, um den Matchcode-Index zu aktualisieren:
CMND$ = "MI\FileNo\RecID\Col1data[\Col2data[\Col3data]]"
FileNo Nummer der Indexdatei RecID Datensatz- bzw. ID-Nummer Col#data Inhalt der Datenspalte X [ ] Optional
Dieser Befehl fügt den Inhalt der Datenspalten ("Col#data") des über "RecID" spezifizierten Datensatzes dem Matchcode Index hinzu.
Die Position der Datenspalten ("Col#data") innerhalb des Kommandostrings entspricht der beim Aufruf des Befehls Create Matchcode File (MC) festgelegten Definition. Die Syntax des Kommandostrings entspricht der des Befehls Build Matchcode (MB).
Beispiel:
szCmnd = "MI\1\" & Str$(dwDatensatzNr)
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
Löschen eines Datensatzes
Beim Entfernen eines Datensatzes aus der Datendatei sollte auch der Matchcode-Index aktualisiert werden. Dafür steht Befehl "MD" zur Verfügung. Die Syntax des Kommandostrings enspricht der des "MI"-Befehls.
szCmnd = "MD\1\" & Str$(dwDatensatzNr)
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
Änderung eines Datensatzes
Bei der Änderung eines bereits indizierten Datensatzes wird zuerst mit dem Befehl Delete Matchcode (MD) dessen bisheriger Inhalt (vor der Änderung) aus dem Matchcode-Index entfernt, bevor der neue Inhalt mit dem Befehl Insert Matchcode (MI) wieder eingefügt wird. Im nachfolgenden Beispiel wird daher bereits vor der Änderung des Datensatzes ein Kommandostring gebildet:
' Bisherigen Inhalt des Datensatzes sichern
szAlt = RTrim$(kunden.Name)
szAlt = szAlt & "\" & RTrim$(kunden.Branche)
szAlt = szAlt & "\" & RTrim$(kunden.Plz) & " " & RTrim$(kunden.Ort)
' Datensatz ändern
Call DatensatzAenderung
szNeu = RTrim$(kunden.Name)
szNeu = szNeu & "\" & RTrim$(kunden.Branche)
szNeu = szNeu & "\" & RTrim$(kunden.Plz) & " " & RTrim$(kunden.Ort)
If szAlt <> szNeu Then
szCmnd = "MD\1\" & Str$(dwSatznummer) & "\" & szAlt
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
szCmnd = "MI\1\" & Str$(dwSatznummer) & "\" & szNeu
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)
End If
Matchcode-Indexdatei schließen
Die Matchcode-Indexdatei schließen Sie mit dem Befehl Close Indexfile (K).
dwRecno = FATSCall("K\1", nErrorcode, nKeylen, 0)
© 2008 GCS Software, Udo Gertz