| ![]() | ||||||||||||||||||||
Mit den Dieser Index ermöglicht es FATS, jeden Datensatz durch Angabe beliebiger Begriffe in Sekundenbruchteilen zu finden. FATS stellt dem Anwendungsprogramm unmittelbar nach der Suche eine Liste aller gefundener Satznummern bzw. Primary-Keys zur Verfügung. Das nachfolgende Visual Basic Beispiel demonstriert die Verwendung der FATS Matchcode-Befehle:
 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.
| "MC" Create Matchcode File (Matchcode-Indexdatei definieren, erstellen und öffnen.) | |
| "MB" Build Matchcode (Inhalte der Datenspalten in den Matchcode-Index einfügen.) | |
| "O" Open Indexfile (Indexdatei öffnen.) | |
| "MI" Insert Matchcode (Neuanlage bzw. Update eines Datensatzes im Matchcode Index.) | |
| "MD" Delete Matchcode (Entfernt den Inhalt eines Datensatzes aus dem Matchcode-Index.) | |
| "MS" Search in Matchcode (Matchcode-Suchabfrage durchführen.) | |
| "MF" Get First Result (Ermitteln des ersten Treffers in der Ergebnistabelle einer Matchcodesuche.) | |
| "ML" Get Last Result (Ermitteln des letzten Treffers in der Ergebnistabelle einer Matchcodesuche.) | |
| "MN" Get Next Result (Ermitteln des nächsten Treffers in der Ergebnistabelle einer Matchcodesuche.) | |
| "MA" Get Next Result After (Ermitteln des auf den angegebenen Treffer folgenden Treffers in der Ergebnistabelle einer Matchcodesuche.) | |
| "ME" Get Previous Result Before (Ermitteln des dem angegegebenen Treffers vorangehenden Treffers in der Ergebnistabelle einer Matchcodesuche.) |
VERSION 2.00
Begin Form Kundenstamm
BorderStyle = 2
Caption = "FATS-Testprogramm"
FontBold = -1 'True
FontItalic = 0 'False
FontName = "MS Sans Serif"
FontSize = 9,6
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 5664
Left = 1584
LinkTopic = "KunStamm"
ScaleHeight = 5292
ScaleWidth = 5400
Top = 1596
Width = 5496
Begin OptionButton txtSuchenStatus
Caption = "Suche nach Primary Key:"
Height = 204
Left = 0
TabIndex = 30
Top = 380
Width = 5412
Visible = 0 'False
End
Begin CommandButton Listen
Caption = "Listen"
Height = 375
Left = 3240
TabIndex = 29
Top = 0
Width = 1095
End
Begin CommandButton SatzLoeschen
Caption = "Löschen"
Enabled = 0 'False
Height = 375
Left = 2160
TabIndex = 28
Top = 0
Width = 1095
End
Begin CommandButton SatzSichern
Caption = "Sichern"
Height = 375
Left = 1080
TabIndex = 27
Top = 0
Width = 1095
End
Begin CommandButton SatzNeu
Caption = "Neu"
Enabled = 0 'False
Height = 375
Left = 0
TabIndex = 26
Top = 0
Width = 1095
End
Begin CommandButton SatzLetzter
Caption = "Letzter"
Height = 375
Left = 4320
TabIndex = 25
Top = 600
Width = 1095
End
Begin CommandButton SatzNaechster
Caption = ">>"
Height = 375
Left = 3240
TabIndex = 24
Top = 600
Width = 1095
End
Begin CommandButton SatzSuchen
Caption = "&Suchen"
Height = 375
Left = 2160
TabIndex = 23
Top = 600
Width = 1095
End
Begin CommandButton SatzVoriger
Caption = "<<"
Height = 375
Left = 1080
TabIndex = 22
Top = 600
Width = 1095
End
Begin CommandButton SatzErster
Caption = "Erster"
Height = 375
Left = 0
TabIndex = 21
Top = 600
Width = 1095
End
Begin CommandButton CreateMatchcode
Caption = "Create"
Height = 375
Left = 4320
TabIndex = 20
Top = 0
Width = 1095
End
Begin CommandButton CreateTestData
Caption = "Testdatei erstellen"
Height = 372
Left = 3720
TabIndex = 19
Top = 4920
Width = 1692
End
Begin ListBox Liste
FontBold = -1 'True
FontItalic = 0 'False
FontName = "Courier New"
FontSize = 9,6
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 270
Left = 120
MultiSelect = 0 'False
TabIndex = 18
Top = 2966
Visible = 0 'False
Sorted = 0 'False
Width = 5175
End
Begin Label txtMatchcode1
BackColor = &H00C0C0C0&
Caption = "Matchcode Suche im Datenfeld Name:"
Height = 204
Left = 120
TabIndex = 1
Top = 1100
Width = 5172
End
Begin TextBox Matchcode1
Height = 288
Left = 120
MaxLength = 80
TabIndex = 9
Top = 1320
Width = 5172
End
Begin Label txtMatchcode2
BackColor = &H00C0C0C0&
Caption = "Matchcode Suche im Datenfeld Branche:"
Height = 204
Left = 120
TabIndex = 2
Top = 1660
Width = 5172
End
Begin TextBox Matchcode2
Height = 288
Left = 120
MaxLength = 80
TabIndex = 10
Top = 1874
Width = 5172
End
Begin Label txtMatchcode3
BackColor = &H00C0C0C0&
Caption = "Matchcode Suche in Plz/Ort:"
Height = 204
Left = 120
TabIndex = 3
Top = 2220
Width = 5172
End
Begin TextBox Matchcode3
Height = 288
Left = 120
MaxLength = 80
TabIndex = 11
Top = 2438
Width = 5172
End
Begin TextBox Ort
Height = 285
Left = 2280
MaxLength = 20
TabIndex = 17
Top = 4406
Width = 2655
End
Begin TextBox PLZ
Height = 285
Left = 1440
MaxLength = 5
TabIndex = 16
Top = 4406
Width = 735
End
Begin TextBox Strasse
Height = 285
Left = 1440
MaxLength = 25
TabIndex = 15
Top = 4046
Width = 3495
End
Begin TextBox Branche
Height = 285
Left = 1440
MaxLength = 25
TabIndex = 14
Top = 3686
Width = 3495
End
Begin TextBox KName
Height = 285
Left = 1440
MaxLength = 25
TabIndex = 13
Top = 3326
Width = 3495
End
Begin TextBox Anrede
Height = 285
Left = 1440
MaxLength = 5
TabIndex = 12
Top = 2966
Width = 735
End
Begin Label Status
Height = 255
Left = 120
TabIndex = 22
Top = 4980
Width = 3492
End
Begin Label txtPLZOrt
Caption = "Plz/Ort"
Height = 255
Left = 120
TabIndex = 8
Top = 4406
Width = 1215
End
Begin Label txtStrasse
Caption = "Straße"
Height = 255
Left = 120
TabIndex = 7
Top = 4046
Width = 1215
End
Begin Label txtBranche
Caption = "Branche"
Height = 255
Left = 120
TabIndex = 6
Top = 3686
Width = 1215
End
Begin Label txtName
Caption = "Name"
Height = 255
Left = 120
TabIndex = 5
Top = 3326
Width = 1215
End
Begin Label txtAnrede
Caption = "Anrede"
Height = 255
Left = 120
TabIndex = 4
Top = 2966
Width = 1215
End
End
Dim kunden As kdat
Dim dwAktuellerSatz As Long
Dim nListeAktiv As Integer
Dim nMatchcodeSuche As Integer
Const maxTreffer = 20
Sub CreateMatchcode_Click ()
Dim szCmnd As String
Dim szMsg As String
Dim dwDatensatzNr As Long
Dim szFATSDatei As String
' ========================================================================
' Matchcode generieren
' ========================================================================
If MsgBox("Wollen Sie die Matchcodedatei neu aufbauen ?", 260) <> 6 Then Exit Sub
Call FATSCall ("K\1")
' -------> Matchcode Datei erstellen
'
' Der Matchcode wird mit dem Kommando
"MC" Create Matchcode File
' generiert. 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.
'
' In diesem Beispiel werden folgende Suchgruppen definiert:
'
' Suchgruppe Felder
'
' I1 NAME
' I2 BRANCHE
' I3 PLZ & ORT
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MC\{FileName}\{Flags}\{FileNo}\{Col1def}[\{Col2def}]"
'
' FileName Name der Matchcode-Datei, eventuell mit Pfadangabe
' (z.B. C:/DATEN/KUNDEN.FMS oder KUNDEN.FMS)
'
' Flags Momentan noch nicht benutzt
'
' FileNo Nummer der Matchcode-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 im Benutzerhandbuch beschrieben sind.
szFATSDatei = App.Path & "\" & "KUNDEN.FTS"
szCmnd = "&MC&" & szFATSDatei & "&&1&I1&I2&I3"
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS Fehler: " & Str$(uFATSError) & " (Kommando: MC)"
MsgBox (szMsg)
Exit Sub
End If
Call Knoepfe(False)
' -------> Texte einfügen
'
' Nachdem die Datei definiert und erzeugt wurde, wird der Inhalt der
' Datensätze mit dem Kommando
"MB" Build Matchcode in die Datei
' eingefügt. Dabei dient die Definition, welche Sie über den Befehl
' "MC" festgelegt haben, als Schablone für dieses Kommando.
'
' Syntax des Kommandostrings:
'
' szCmnd = "MB\{FileNo}\{RecNo}\{Col1data}[\{Col2data}[\{Col3data}]]"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' RecNo <> 0 Datensatz- bzw. ID-Nummer
' == 0 Matchcode-Indizierung beenden
'
' Col#data Inhalt der Datenspalte X
dwDatensatzNr = 0
' Bei der Indizierung sequentieller Datenbestände sollte die über
' "RecNo" spezifizierte Nummer der physikalischen Datensatznummer
' entsprechen, d.h. der erste Datensatz hat die Nummer 1, der
' zweite Satz die Nummer 2 etc., bei als gelöscht markierten
' Datensätzen wird der Inhalt der Datenspalten nicht mit angegeben
' ("MB\{FileNo}\{RecNo}").
' Der Build Matchcode (MB) Befehl verlangt eine aufsteigende Nummer
' als "RecNo"-Argument, d.h. der Matchcode kann normalerweise nicht
' in der logischen Ordnung eines Indizes indiziert werden.
' Das Beispielprogramm MCSORT zeigt die Verwendung eines
' Keys beim Generieren der Matchcode Indexdatei.
Do
Get #1, dwDatensatzNr + 1, kunden
If Not EOF(1) Then
dwDatensatzNr = dwDatensatzNr + 1
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
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS Fehler: " & Str$(uFATSError) & " (Kommando: MB)"
MsgBox (szMsg)
Exit Sub
End If
Kundenstamm.Status = Str$(dwDatensatzNr) & " Datensätze"
If ((dwDatensatzNr And 31) = 0) Then Kundenstamm.Status.Refresh
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.
Call FATSCall ("MB\1\0")
' -------> Matchcode Datei öffnen
'
' Mit dem Befehl
"O" Open Indexfile wird eine Matchcode-
' Indexdatei mit den über den Befehl Auto Refresh ("Y")
' definierten Öffnungsflags geöffnet und der Dateinummer
' "FileNo" zugewiesen. Diese Nummer muß bei allen nach-
' folgenden FATS-Befehlen angegeben werden, um mit der
' Indexdatei zu arbeiten.
szCmnd = "&O&" & szFATSDatei & "&1"
Call FATSCall(szCmnd)
End If
Loop While Not EOF(1)
Call Knoepfe(True)
Call SatzErster_Click
End Sub
Sub SatzLaden (dwNeuerSatz As Long, nListenIndex As Integer)
Get #1, dwNeuerSatz, kunden
If nListenIndex >= 0 Then
Liste.AddItem kunden.Name & "|" & kunden.Branche & "|" & kunden.Plz & " " & kunden.Ort
Liste.ItemData(nListenIndex) = dwNeuerSatz
End If
If nListenIndex <= 0 Then
dwAktuellerSatz = dwNeuerSatz
Anrede.Text = RTrim$(kunden.Anrede)
KName.Text = RTrim$(kunden.Name)
Branche.Text = RTrim$(kunden.Branche)
Kundenstamm.Strasse = RTrim$(kunden.Strasse)
Plz.Text = RTrim$(kunden.Plz)
Ort.Text = RTrim$(kunden.Ort)
Kundenstamm.Status = "Datensatz: " & Str$(dwAktuellerSatz)
Call knoepfe(True)
End If
End Sub
Sub SatzSuchen_Click ()
Dim szCmnd As String
' ========================================================================
' Matchcode Suche
' ========================================================================
szCmnd = RTrim$(Matchcode1.Text)
szCmnd = szCmnd & "\" & RTrim$(Matchcode2.Text)
szCmnd = szCmnd & "\" & RTrim$(Matchcode3.Text)
If (nListeAktiv = True) Or (Len(szCmnd) > 2) Then
nMatchcodeSuche = True
' -------> In der Suchgruppe 1 (NAME) suchen
'
' Der Befehl
"MS" Search in Matchcode 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 (Errorcode == 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 Aufbau des Kommandostrings:
'
' szCmnd = "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.
'
' 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 auf den Bildschirm
' ausgegeben:
' In dem folgenden Beispiel werden alle Treffer auf den
' Bildschirm ausgegeben:
szCmnd = "MS\1\\0\" & szCmnd
Else
nMatchcodeSuche = False
szCmnd = "G\1\2\" & UCase$(RTrim$(KName.Text))
End If
Kundenstamm.liste.Clear
Call FATSCall (szCmnd)
If uFATSError = 0 Or (uFATSError > 11 And uFATSError < 15) Then
Do
Call SatzLaden(dwFATSRecno, CInt(Liste.ListCount))
If (nMatchcodeSuche = True) And (Liste.ListCount < maxTreffer) Then
'
"MN" Get Next Result (Matchcode)
'
' Dieser Befehl gibt die Datensatz- bzw. ID-Nummer des nächsten
' Datensatzes der über einen vorangehenden Befehl "MS - Search
' in Matchcode" erstellten Ergebnistabelle zurück.
' Ausgegangen wird dabei vom Ergebnis des letzten Browserbefehls,
' d.h. unmittelbar vor der Anwendung dieses Befehls muß einer
' der Befehle "MA", "ME", "MF", "MN", "MP" oder "MS" ausgeführt
' worden sein.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MN\{FileNo}"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' Wenn keine weiteren Treffer vorhanden sind, dann wird der
' Fehlercode #15 zurückgegeben.
Call FATSCall ("MN\1")
Else
Exit Do
End If
Loop While uFATSError = 0
' Folgende Browser-Befehle werden von FATS angeboten:
'
' "MF" - Get First Result
' "ML" - Get Last Result
' "MP" - Get Previous Result
' "MN" - Get Next Result
' "MA" - Get Next Result After
' "ME" - Get Previous Result Before
Liste.ListIndex = 0
If (Liste.ListCount > 1) And (nListeAktiv = False) Then Call Listen_Click
Else
If nMatchcodeSuche = True Then
Kundenstamm.SatzErster.Enabled = False
Kundenstamm.SatzNaechster.Enabled = False
Kundenstamm.SatzVoriger.Enabled = False
Kundenstamm.SatzLetzter.Enabled = False
Kundenstamm.Status = "Keine Datensätze gefunden"
If uFATSError = 11 Then
Call CreateMatchcode_Click
ElseIf uFATSError = 241 Then
MsgBox ( "Trial Version: Nutzungsdauer des Matchcode Index abgelaufen. Bitte neu generieren !" )
End If
End If
End If
If nMatchcodeSuche = True Then
Kundenstamm.txtSuchenStatus.Value = False
Kundenstamm.txtSuchenStatus.Visible = True
Kundenstamm.txtSuchenStatus.Caption = "Matchcode Suche: ('" & RTrim$(Matchcode1.Text) & "','" & RTrim$(Matchcode2.Text) & "','" & RTrim$(Matchcode3.Text) & "')"
Else
Kundenstamm.txtSuchenStatus.Visible = False
End If
Kundenstamm.txtSuchenStatus.Refresh
If nListeAktiv = False Then
Kundenstamm.Matchcode1.SetFocus
Else
Kundenstamm.Liste.SetFocus
End If
End Sub
Sub SatzErster_Click ()
If nMatchcodeSuche = True Then
'
"MF" Get First Result (Matchcode)
'
' Dieser Befehl gibt die Datensatz- bzw. ID-Nummer des ersten
' Datensatzes der über einen vorangehenden Befehl "MS" Search
' in Matchcode erstellten Ergebnistabelle zurück.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MF\{FileNo}"
'
' FileNo Nummer der Matchcode-Indexdatei
Call FATSCall ("MF\1")
Else
Call FATSCall ("F\1\2")
End If
If uFATSError = 0 Then
Call SatzLaden(dwFATSRecno, -1)
Else
Call SatzNeu_Click
End If
End Sub
Sub SatzLetzter_Click ()
If nMatchcodeSuche = True Then
'
"ML" Get Last Result (Matchcode)
'
' Dieser Befehl gibt die Datensatz- bzw. ID-Nummer des letzten
' Datensatzes der über einen vorangehenden Befehl "MS" Search
' in Matchcode erstellten Ergebnistabelle zurück.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "ML\{FileNo}"
'
' FileNo Nummer der Matchcode-Indexdatei
Call FATSCall ("ML\1")
Else
Call FATSCall ("L\1\2")
End If
If uFATSError = 0 Then Call SatzLaden(dwFATSRecno, -1)
End Sub
Sub SatzVoriger_Click ()
If nMatchcodeSuche = True Then
'
"ME" Get Previous Result Before (Matchcode)
'
' Dieser Befehl sucht den über "RecNo" spezifizierten Datensatz in der über
' einen vorangehenden Befehl Search in Matchcode ("MS") erstellten Ergebnis-
' tabelle und blättert dann um eine Position zurück.
' Als Ergebnis wird die Datensatz- bzw. ID-Nummer des dem angegebenen Daten-
' satz vorangehenden Datensatzes der Ergebnistabelle zurückgegeben.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "ME\{FileNo}\{RecNo}"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' RecNo Datensatznummer bzw. Satz-ID
Call FATSCall ("ME\1\" & Str$(dwAktuellerSatz))
Else
Call FATSCall ("E\1\" & Str$(dwAktuellerSatz) & "\2\" & UCase$(RTrim$(KName.Text)))
End If
If uFATSError = 0 Then Call SatzLaden(dwFATSRecno, -1)
End Sub
Sub SatzNaechster_Click ()
If nMatchcodeSuche = True Then
'
"MA" Get Next Result After (Matchcode)
'
' Dieser Befehl sucht den über "RecNo" spezifizierten Datensatz
' in der über einen vorangehenden Befehl Search in Matchcode ("MS")
' erstellten Ergebnistabelle und blättert dann um eine Position
' weiter.
' Als Ergebnis wird die Datensatz- bzw. ID-Nummer des dem
' angegebenen Datensatz folgenden Datensatzes der Ergebnistabelle
' zurückgegeben.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MA\{FileNo}\{RecNo}"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' RecNo Datensatznummer bzw. Satz-ID
Call FATSCall ("MA\1\" & Str$(dwAktuellerSatz))
Else
Call FATSCall ("A\1\" & Str$(dwAktuellerSatz) & "\2\" & UCase$(RTrim$(KName.Text)))
End If
If uFATSError = 0 Then Call SatzLaden(dwFATSRecno, -1)
End Sub
Sub SatzNeu_Click ()
dwAktuellerSatz = 0
Anrede.Text = ""
KName.Text = ""
Branche.Text = ""
Kundenstamm.Strasse = ""
Plz.Text = ""
Ort.Text = ""
Kundenstamm.Status = "Neuanlage"
Call txtSuchenStatus_Click
End Sub
Sub SatzSichern_Click ()
Dim szCmnd As String
Dim szKey3loeschen As String
Dim szKey3einfuegen As String
Dim szMCloeschen As String
Dim szMCeinfuegen As String
Dim szMsg As String
If Len(RTrim$(KName.Text)) = 0 Then
MsgBox ( "Bitte das Feld NAME ausfuellen" )
Exit Sub
End If
szKey3einfuegen = Plz.Text
If Len(szKey3einfuegen) < 5 Then szKey3einfuegen = szKey3einfuegen & Space$(5 - Len(szKey3einfuegen))
szKey3einfuegen = szKey3einfuegen & UCase$(RTrim$(Ort.Text))
szMCeinfuegen = RTrim$(KName.Text)
szMCeinfuegen = szMCeinfuegen & "\" & RTrim$(Branche.Text)
szMCeinfuegen = szMCeinfuegen & "\" & RTrim$(Plz.Text) & " " & RTrim$(Ort.Text)
If dwAktuellerSatz = 0 Then
szMCloeschen = ""
szCmnd = "I\2\" & UCase$(RTrim$(KName.Text)) & "\" & UCase$(RTrim$(Branche.Text)) & "\" & szKey3einfuegen
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS-Fehler: " & Str$(uFATSError) & szCmnd
MsgBox (szMsg)
Exit Sub
End If
LSet kunden.Name = KName.Text
LSet kunden.Branche = Branche.Text
LSet kunden.Plz = Plz.Text
LSet kunden.Ort = Ort.Text
dwAktuellerSatz = dwFATSRecno
Else
szMCloeschen = RTrim$(kunden.Name)
szMCloeschen = szMCloeschen & "\" & RTrim$(kunden.Branche)
szMCloeschen = szMCloeschen & "\" & RTrim$(kunden.Plz) & " " & RTrim$(kunden.Ort)
If szMCloeschen = szMCeinfuegen Then
' der Matchcode wurde nicht geändert, es ist kein Update nötig
szMCloeschen = ""
szMCeinfuegen = ""
End If
If replacekey(UCase$(RTrim$(kunden.Name)), UCase$(RTrim$(KName.Text)), 1) <> 0 Then LSet kunden.Name = KName.Text
If replacekey(UCase$(RTrim$(kunden.Branche)), UCase$(RTrim$(Branche.Text)), 2) <> 0 Then LSet kunden.Branche = Branche.Text
szKey3loeschen = kunden.Plz & UCase$(RTrim$(kunden.Ort))
If replacekey(szKey3loeschen, szKey3einfuegen, 3) <> 0 Then
LSet kunden.Plz = Plz.Text
LSet kunden.Ort = Ort.Text
End If
End If
LSet kunden.loeschkennz = " "
LSet kunden.Anrede = Anrede.Text
LSet kunden.Strasse = Strasse.Text
Put #1, dwAktuellerSatz, kunden
If Len(szMCloeschen) Then
Call FATSCall ("MD\1\" & Str$(dwAktuellerSatz) & "\" & szMCloeschen)
If uFATSError <> 0 Then MsgBox ( "FATS-Fehler: " & Str$(uFATSError) & " (Kommando MD)" )
End If
If Len(szMCeinfuegen) Then
'
"MI" Insert Matchcode
'
' Dieser Befehl fügt den Inhalt der Datenspalten ("Col#data") des
' über "RecNo" spezifizierten Datensatzes dem Matchcode Index hinzu.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MI\{FileNo}\{RecNo}\{Col1data}[\{Col2data}[\{Col3data}]]"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' RecNo Datensatznummer bzw. Satz-ID
'
' Col#data Inhalt der Datenspalte #
'
'
' Die Position der Datenspalten ("Col#data") innerhalb des Kommando
' strings entspricht der beim Aufruf des Befehls "MC" Create Matchcode
' File festgelegten Definition. Die Syntax des Kommandostrings
' entspricht der des Befehls Build Matchcode ("MB").
'
' Bitte beachten Sie, daß bei der Änderung eines bereits indizierten
' Datensatzes zuerst mit dem Befehl Delete Matchcode ("MD") dessen
' bisheriger Inhalt (vor der Änderung) aus dem Matchcode-Index entfernt
' werden muß, bevor der neue Inhalt mit diesem Befehl wieder eingefügt
' wird.
'
' Bei der Neuerstellung bzw. Reorganisation des Matchcode-Indizes
' sollte aus Geschwindigkeitsgründen immer der Befehl Build
' Matchcode (MB) anstatt diesem Befehl angewandt werden.
'
' Wenn bei der Erstellung der Matchcode-Indexdatei ein Primärschlüssel
' definiert wurde (Flag "K#:#"), dann hat die über "RecNo" angegebene
' Datensatz- bzw. ID-Nummer keine Bedeutung, d.h. es muß wie bereits
' beim "MB"-Befehl der Primärschlüssel über "Col#data" angegeben werden.
Call FATSCall ("MI\1\" & Str$(dwAktuellerSatz) & "\" & szMCeinfuegen)
If uFATSError <> 0 Then MsgBox ( "FATS-Fehler: " & Str$(uFATSError) & " (Kommando MI)" )
End If
Kundenstamm.Status = "Datensatz: " & Str$(dwAktuellerSatz)
Call txtSuchenStatus_Click
End Sub
Function replacekey (szKeyOld As String, szKeyNew As String, nKey As Integer) As Integer
Dim szCmnd As String
Dim szMsg As String
If szKeyOld <> szKeyNew Then
szCmnd = "R\" & Str$(nKey) & "\" & Str$(dwAktuellerSatz) & "\2\" & szKeyOld & "\" & szKeyNew
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS-Fehler: " & Str$(uFATSError) & szCmnd
MsgBox (szMsg)
replacekey = 0
Exit Function
End If
End If
replacekey = 1
End Function
Sub SatzLoeschen_Click ()
Dim szCmnd As String
Dim szMsg As String
If dwAktuellerSatz <> 0 Then
szCmnd = "D\" & Str$(dwAktuellerSatz) & "\Y\2\" & UCase$(RTrim$(kunden.Name)) & "\" & UCase$(RTrim$(kunden.Branche)) & "\" & kunden.Plz & UCase$(RTrim$(kunden.Ort))
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS-Fehler: " & Str$(uFATSError)
MsgBox (szMsg)
Exit Sub
End If
kunden.loeschkennz = "D"
Put #1, dwFATSRecno, kunden
'
"MD" Delete Matchcode
'
' Dieser Befehl entfernt den Inhalt der Datenspalten ("Col#data") des
' über "RecNo" spezifizierten Datensatzes aus dem Matchcode Index.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "MD\{FileNo}\{RecNo}\{Col1data}[\{Col2data}[\{Col3data}]]"
'
' FileNo Nummer der Matchcode-Indexdatei
'
' RecNo Datensatznummer bzw. Satz-ID
'
' Col#data Inhalt der Datenspalte #
'
'
' Die Position der Datenspalten ("Col#data") innerhalb des Kommando
' strings entspricht der beim Aufruf des Befehls "MC" Create Matchcode
' File festgelegten Definition. Die Syntax des Kommandostrings
' entspricht der des Befehls Build Matchcode ("MB").
'
' Eine vor der Ausführung dieses Befehls generierte Ergebnistabelle
' bleibt von dem Befehl unberührt, d.h. kann eventuell nachträglich
' gelöschte Datensätze beinhalten.
'
' Wenn bei der Erstellung der Matchcode-Indexdatei ein Primärschlüssel
' definiert wurde (Flag "K#:#"), dann hat die über "RecNo" angegebene
' Datensatz- bzw. ID-Nummer keine Bedeutung, d.h. es muß wie bereits
' beim "MB"-Befehl der Primärschlüssel über "Col#data" angegeben werden.
szCmnd = "MD\1\" & Str$(dwFATSRecno)
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
Call FATSCall (szCmnd)
If uFATSError <> 0 Then MsgBox ( "FATS-Error: " & Str$(uFATSError) & szCmnd )
Call SatzNeu_Click
End If
End Sub
Sub CreateTestData_Click ()
Dim szCmnd As String
Dim szMsg As String
Dim dwDatensatzNr As Long
Dim szDemodatei As String
Dim szIndexdatei As String
If MsgBox("Wollen Sie die Datei wirklich neu aufbauen ?", 260) <> 6 Then Exit Sub
szDemodatei = App.Path & "\..\..\..\DEMODATA\" & "KUNDEN.ANS"
szIndexdatei = App.Path & "\" & "KUNDEN.KEY"
If Dir$(szDemodatei) = "" Then
szMsg = "Datei " & szDemodatei & " nicht gefunden"
MsgBox (szMsg)
Exit Sub
End If
szCmnd = "&C&" & szIndexdatei & "&25&3&A&2"
Call FATSCall (szCmnd)
Open szDemodatei For Random As #2 Len = 105
Dim szDemodata As String * 105
Call Knoepfe(False)
dwDatensatzNr = 0
Do
Get #2, dwDatensatzNr + 1, szDemodata
If Not EOF(2) Then
dwDatensatzNr = dwDatensatzNr + 1
LSet kunden.loeschkennz = " "
LSet kunden.Anrede = Mid$(szDemodata, 1, 5)
LSet kunden.Name = Mid$(szDemodata, 6, 25)
LSet kunden.Branche = Mid$(szDemodata, 31, 25)
LSet kunden.Strasse = Mid$(szDemodata, 56, 25)
LSet kunden.Plz = Mid$(szDemodata, 81, 5)
LSet kunden.Ort = Mid$(szDemodata, 86, 20)
szCmnd = "B\2\" & UCase$(RTrim$(kunden.Name)) & "\" & UCase$(RTrim$(kunden.Branche)) & "\" & kunden.Plz & UCase$(RTrim$(kunden.Ort))
Call FATSCall (szCmnd)
If uFATSError <> 0 Then
szMsg = "FATS-Fehler: " & Str$(uFATSError)
MsgBox (szMsg)
Exit Do
End If
Put #1, dwFATSRecno, kunden
Kundenstamm.Status = Str$(dwFATSRecno) & " Datensätze"
If ((dwDatensatzNr And 31) = 0) Then Kundenstamm.Status.Refresh
End If
Loop While Not EOF(2)
Close #2
Call FATSCall ("W\2")
If Dir$(App.Path & "\" & "KUNDEN.FTS") <> "" Then
Call FATSCall ("K\1")
Kill (App.Path & "\" & "KUNDEN.FTS")
End If
Call Knoepfe(True)
Call SatzErster_Click
End Sub
Sub knoepfe (nAktiviert)
If dwAktuellerSatz = 0 Then
SatzNeu.Enabled = False
SatzLoeschen.Enabled = False
Else
SatzNeu.Enabled = nAktiviert
SatzLoeschen.Enabled = nAktiviert
End If
Kundenstamm.SatzErster.Enabled = nAktiviert
Kundenstamm.SatzNaechster.Enabled = nAktiviert
Kundenstamm.SatzVoriger.Enabled = nAktiviert
Kundenstamm.SatzLetzter.Enabled = nAktiviert
Kundenstamm.SatzSuchen.Enabled = nAktiviert
Kundenstamm.SatzSichern.Enabled = nAktiviert
Kundenstamm.CreateMatchcode.Enabled = nAktiviert
Kundenstamm.CreateTestData.Enabled = nAktiviert
Kundenstamm.Listen.Enabled = nAktiviert
End Sub
Sub Listen_Click ()
Call Knoepfe(nListeAktiv)
Kundenstamm.Listen.Enabled = True
Kundenstamm.SatzSuchen.Enabled = True
Kundenstamm.Anrede.Enabled = nListeAktiv
Kundenstamm.KName.Enabled = nListeAktiv
Kundenstamm.Branche.Enabled = nListeAktiv
Kundenstamm.Strasse.Enabled = nListeAktiv
Kundenstamm.Plz.Enabled = nListeAktiv
Kundenstamm.Ort.Enabled = nListeAktiv
If nListeAktiv = False Then
nListeAktiv = True
Kundenstamm.Listen.Caption = "Maske"
liste.Height = 1860
Else
nListeAktiv = False
Kundenstamm.Listen.Caption = "Liste"
Kundenstamm.Liste.Clear
If dwAktuellerSatz <> 0 Then
Call SatzLaden(dwAktuellerSatz, -1)
Kundenstamm.Anrede.SetFocus
Else
Call SatzNeu_Click
End If
End If
liste.Visible = nListeAktiv
End Sub
Sub txtSuchenStatus_Click ()
nMatchcodeSuche = False
Matchcode1.Text = ""
Matchcode2.Text = ""
Matchcode3.Text = ""
Kundenstamm.txtSuchenStatus.Visible = False
If nListeAktiv = False Then
Call Knoepfe(True)
End If
Kundenstamm.Matchcode1.SetFocus
End Sub
Sub Form_Resize ()
Kundenstamm.Liste.Width = 5175 + (Kundenstamm.Width - 5496)
End Sub
Sub Matchcode1_KeyUp (KeyCode As Integer, Shift As Integer)
If KeyCode = &HD Then Kundenstamm.Matchcode2.SetFocus
End Sub
Sub Matchcode2_KeyUp (KeyCode As Integer, Shift As Integer)
If KeyCode = &HD Then Kundenstamm.Matchcode3.SetFocus
End Sub
Sub Matchcode3_KeyUp (KeyCode As Integer, Shift As Integer)
If KeyCode = &HD Then Call SatzSuchen_Click
End Sub
Sub Liste_Click ()
Dim szStatuszeile
dwAktuellerSatz = Liste.ItemData(Liste.ListIndex)
szStatuszeile = "Treffer " & Str$(Liste.ListIndex + 1)
If (Liste.ListCount < maxTreffer) Then
szStatuszeile = szStatuszeile & " von " & Str$(Liste.ListCount)
Else
szStatuszeile = szStatuszeile & " von mehr als " & Str$(maxTreffer)
End If
Kundenstamm.Status = szStatuszeile
End Sub
Sub Liste_DblClick ()
Call Listen_Click
End Sub
Sub Liste_KeyUp (KeyCode As Integer, Shift As Integer)
If KeyCode = &HD Then Call Listen_Click
End Sub
© 2008
GCS Software, Udo Gertz