| ![]() | ||||||||||||||||||||
Das nachfolgende Visual Basic Beispiel demonstriert die Verwendung der von FATS bereitgestellten
 Index-Befehle:
| "C" Create Indexfile (Indexdatei definieren, erstellen und öffnen.) | |
| "B" Build Record ((Haupt)-Schlüssel über den Cachepuffer in die Indexdatei einfügen und Datensatznummer besetzen.) | |
| "W" Write Page Map (Zurückschreiben im Cache befindlicher Daten.) | |
| "I" Insert Record ((Haupt)-Schlüssel in Indexdatei einfügen und Datensatznummer besetzen.) | |
| "D" Delete Record ((Haupt)-Schlüssel aus Indexdatei löschen und Datensatznummer freigeben.) | |
| "R" Replace Single Key (Ersetzt einen Schlüssel durch einen neuen Schlüsselwert.) | |
| "G" Search Generic (Suchen eines Datensatzes über einen unvollständig angegebenen Schlüssel.) | |
| "F" Search First (Suchen des ersten Schlüssels.) | |
| "L" Search Last (Suchen des letzten Schlüssels.) | |
| "A" Search Next After (Suchen des auf den angegebenen Schlüssel folgenden Schlüssels.) | |
| "E" Search Previous Before (Suchen des dem angegebenen Schlüssel vorangehenden Schlüssels.) |
VERSION 4.00
Begin VB.Form Kundenstamm
Appearance = 0 'Flat
BackColor = &H80000005&
BorderStyle = 1 'Fixed Single
Caption = "Fats-Testprogramm"
ClientHeight = 4308
ClientLeft = 1632
ClientTop = 1920
ClientWidth = 5376
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "MS Sans Serif"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 4680
Left = 1584
LinkTopic = "KunStamm"
ScaleHeight = 4308
ScaleWidth = 5376
Top = 1596
Width = 5472
Begin VB.ListBox Liste
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 240
Left = 120
TabIndex = 26
Top = 1440
Visible = 0 'False
Width = 5172
End
Begin VB.OptionButton Option3
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Plz/Ort"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 375
Left = 2760
TabIndex = 25
Top = 960
Visible = 0 'False
Width = 1215
End
Begin VB.OptionButton Option2
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Branche"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 372
Left = 1440
TabIndex = 24
Top = 960
Visible = 0 'False
Width = 1332
End
Begin VB.OptionButton Option1
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Name"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 375
Left = 120
TabIndex = 23
Top = 960
Visible = 0 'False
Width = 1215
End
Begin VB.CommandButton Listen
Appearance = 0 'Flat
Caption = "Listen"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3240
TabIndex = 21
Top = 0
Width = 1060
End
Begin VB.CommandButton SatzLoeschen
Appearance = 0 'Flat
Caption = "Löschen"
Enabled = 0 'False
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 2160
TabIndex = 20
Top = 0
Width = 1060
End
Begin VB.CommandButton SatzSichern
Appearance = 0 'Flat
Caption = "Sichern"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 1080
TabIndex = 19
Top = 0
Width = 1060
End
Begin VB.CommandButton SatzNeu
Appearance = 0 'Flat
Caption = "Neu"
Enabled = 0 'False
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 0
TabIndex = 18
Top = 0
Width = 1065
End
Begin VB.CommandButton SatzLetzter
Appearance = 0 'Flat
Caption = "Letzter"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 4320
TabIndex = 17
Top = 370
Width = 1060
End
Begin VB.CommandButton SatzNaechster
Appearance = 0 'Flat
Caption = ">>"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3240
TabIndex = 16
Top = 370
Width = 1060
End
Begin VB.CommandButton SatzSuchen
Appearance = 0 'Flat
Caption = "Suchen"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 2160
TabIndex = 15
Top = 370
Width = 1060
End
Begin VB.CommandButton SatzVoriger
Appearance = 0 'Flat
Caption = "<<"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 1080
TabIndex = 14
Top = 370
Width = 1060
End
Begin VB.CommandButton SatzErster
Appearance = 0 'Flat
Caption = "Erster"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 0
TabIndex = 13
Top = 370
Width = 1060
End
Begin VB.CommandButton Create
Appearance = 0 'Flat
Caption = "Create"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 8.4
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 4320
TabIndex = 12
Top = 0
Width = 1060
End
Begin VB.TextBox Ort
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 2280
MaxLength = 20
TabIndex = 11
Top = 3240
Width = 2655
End
Begin VB.TextBox PLZ
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 1440
MaxLength = 5
TabIndex = 10
Top = 3240
Width = 735
End
Begin VB.TextBox Strasse
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 1440
MaxLength = 25
TabIndex = 9
Top = 2880
Width = 3495
End
Begin VB.TextBox Branche
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 1440
MaxLength = 25
TabIndex = 8
Top = 2520
Width = 3495
End
Begin VB.TextBox KName
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 1440
MaxLength = 25
TabIndex = 7
Top = 2160
Width = 3495
End
Begin VB.TextBox Anrede
Appearance = 0 'Flat
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 324
Left = 1440
MaxLength = 5
TabIndex = 6
Top = 1800
Width = 735
End
Begin VB.Label Status
Appearance = 0 'Flat
BackColor = &H80000005&
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 22
Top = 3960
Width = 5175
End
Begin VB.Label txtPLZOrt
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Plz/Ort"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 5
Top = 3240
Width = 1215
End
Begin VB.Label txtStrasse
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Straße"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 4
Top = 2880
Width = 1215
End
Begin VB.Label txtBranche
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Branche"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 3
Top = 2520
Width = 1215
End
Begin VB.Label txtName
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Name"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 2
Top = 2160
Width = 1215
End
Begin VB.Label txtAnrede
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Anrede"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 9.6
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 255
Left = 120
TabIndex = 1
Top = 1800
Width = 1215
End
Begin VB.Label Ueberschrift
Alignment = 2 'Center
Appearance = 0 'Flat
BackColor = &H80000005&
Caption = "Kundenstamm"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Courier New"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00800000&
Height = 375
Left = 1080
TabIndex = 0
Top = 960
Width = 3255
End
End
Attribute VB_Name = "Kundenstamm"
Attribute VB_Creatable = False
Attribute VB_Exposed = False
Option Explicit
Dim kunden As kdat
Dim dwCurrentRecno As Long
Dim nListmode As Integer
Private Sub Create_Click()
Dim szDemoFile As String
Dim szIndexFile As String
Dim szCmnd As String
Dim szMsg As String
If MsgBox("Wollen Sie die Datei wirklich neu aufbauen ?", 4) <> 6 Then Exit Sub
szDemoFile = App.Path + "\..\..\..\DEMODATA\" + "KUNDEN.ANS"
szIndexFile = App.Path + "\" + "KUNDEN.KEY"
If Dir$(szDemoFile) = "" Then
szMsg = "Datei " + szDemoFile + " nicht gefunden"
MsgBox (szMsg)
Exit Sub
End If
'
"C" Create Indexfile
'
' Mit diesem Befehl erstellen Sie eine Indexdatei, wobei eine
' eventuell bereits vorhandene Datei mit demselben Dateinamen
' gelöscht wird.
' Die Indexdatei wird dabei gleichzeitig mit den über den
' Befehl Auto Refresh (Y) definierten Öffnungsflags geöffnet
' und der Dateinummer "FileNo" zugewiesen. Diese Nummer muß bei
' allen nachfolgenden FATS-Befehlen angegeben werden, um mit
' der Indexdatei zu arbeiten.
'
' Maximal 200 Schlüssel pro Datensatz können in einer Indexdatei
' verwaltet werden, wobei die maximale Schlüssellänge 240 Zeichen
' beträgt.
'
' Beachten Sie bei der Dateipfadangabe, daß der Backslash (\) von
' FATS als Trennzeichen behandelt wird und daher im Pfad durch
' einen normalen Schrägstrich ersetzt werden sollte.
' Alternativ dazu können Sie auch das Trennzeichen umdefinieren,
' indem Sie dieses als erstes Zeichen im Befehlsstring angeben,
' z.B. szCmnd = "&C&C:\ARTIKEL.KEY&1&1&A&1" (das Trennzeichen muß
' ein ASCII-Zeichen kleiner als 48 sein).
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "C\{Filename}\{KeyLength}\{KeyCount}\{KeyType}\{FileNo}"
'
' FileName Name der Datei, eventuell mit Pfadangabe
' (z.B. C:/DATEN/ARTIKEL.KEY oder ARTIKEL.KEY)
'
' KeyLength Maximale Länge der Schlüssel
'
' KeyCount Anzahl Schlüssel (1-200)
'
' KeyType Art der Schlüssel (A=ASCII Textschlüssel, I=Integer)
'
' FileNo Nummer der Indexdatei (1-40)
szCmnd = "&C&" + szIndexFile + "&25&3&A&1"
Call FATSCall (szCmnd)
Open szDemoFile For Random As #2 Len = 105
Dim szDemoData As String * 105
Dim nCounter As Integer
For nCounter = 1 To 222
Get #2, nCounter, szDemoData
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)
'
"B" Build Record
'
' Dieser Befehl entspricht dem Befehl Insert Record (I),
' die Daten werden jedoch nicht sofort nach dem Befehl auf
' die Platte geschrieben, sondern solange in den FATS
' internen Cachepuffern behalten, bis diese überlaufen.
'
' Da das Zurückschreiben veränderter Daten bei heutigen
' Festplatten einen Großteil der Verarbeitungszeit in
' Anspruch nimmt, wird das Einfügen von Schlüsseln mit
' diesem Befehl erheblich beschleunigt und eignet sich
' daher besonders zum Reorganisieren von Indexdateien.
'
' Beachten Sie jedoch, daß dieser Befehl im normalen
' Netzwerkbetrieb nicht erlaubt ist, da die Indexdatei
' einen undefinierten Zustand hat. Im Netzwerk sollten Sie
' die Datei daher mit exklusiven Zugriffsrechten öffnen,
' bevor Sie mit diesem Befehl arbeiten (siehe Auto Refresh "Y").
' Das Zurückschreiben der Cachepuffer kann auch jederzeit
' durch den Befehl Write Page Map (W) oder durch das
' Schließen der Datei erreicht werden. Wenn die internen
' Cachepuffer überlaufen und FATS Daten auf die Platte
' schreiben muß, dann ist sichergestellt, daß dabei sämtliche
' relevanten Daten berücksichtigt werden, d.h. die Indexdatei
' konsistent bleibt.
'
' Mit Ausnahme dieses Befehles werden nach jedem FATS-Befehl
' sämtliche veränderten Daten auf die Platte geschrieben, wenn
' dies nicht ausdrücklich mit dem Befehl Auto Refresh (Y)
' abgeschaltet wurde.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "B\{FileNo}\{KeyStr1}[\{KeyStr2}[\{KeyStr3}]]"
'
' FileNo Nummer der Indexdatei
'
' KeyStr# Schlüssel
szCmnd = "B\1\" + 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 For
End If
Kundenstamm.Status = Str$(dwFATSRecno) + " Datensätze"
If (dwFATSRecno And 8) Then Kundenstamm.Status.Refresh
Put #1, dwFATSRecno, kunden
Next nCounter
Close #2
'
"W" Write Page Map
'
' Wenn Sie den Datencache mit dem Befehl Auto Refresh (Y)
' aktiviert haben, dann werden eventuell noch im Cache-
' puffer befindliche Daten mit diesem Befehl auf die
' Platte geschrieben.
'
' Wenn der Datencache inaktiv ist, dann werden nach jedem
' FATS-Befehl, mit Ausnahme des Befehls Build Record (B),
' sämtliche veränderten Daten auf die Platte geschrieben.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "W\{FileNo}"
'
' FileNo Nummer der Indexdatei
Call FATSCall ("W\1")
Call SatzErster_Click
End Sub
Private Sub knoepfe()
If dwCurrentRecno = 0 Then
SatzNeu.Enabled = False
SatzLoeschen.Enabled = False
Else
SatzNeu.Enabled = True
SatzLoeschen.Enabled = True
End If
End Sub
Private Sub Listen_Click()
SatzNeu.Enabled = nListmode
SatzSichern.Enabled = nListmode
SatzLoeschen.Enabled = nListmode
Create.Enabled = nListmode
SatzErster.Enabled = nListmode
SatzNaechster.Enabled = nListmode
SatzSuchen.Enabled = nListmode
SatzVoriger.Enabled = nListmode
SatzLetzter.Enabled = nListmode
Anrede.Enabled = nListmode
KName.Enabled = nListmode
Branche.Enabled = nListmode
Strasse.Enabled = nListmode
PLZ.Enabled = nListmode
Ort.Enabled = nListmode
Ueberschrift.Visible = nListmode
If nListmode = False Then
nListmode = True
Liste.Height = 2370
dwCurrentRecno = 0
Else
nListmode = False
SatzErster_Click
End If
Option1.Visible = nListmode
Option2.Visible = nListmode
Option3.Visible = nListmode
Liste.Visible = nListmode
End Sub
Private Sub Option1_Click()
Dim szCmnd As String
Liste.Clear
Kundenstamm.Status = "Aufsteigend sortiert nach Name"
'
"F" Search First
'
' Dieser Befehl gibt die Datensatznummer und den Schlüsselwert
' des kleinsten Schlüssels der angegebenen Schlüsselnummer
' zurück.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "F\{KeyNo}\{FileNo}"
'
' KeyNo Schlüsselnummer
'
' FileNo Nummer der Indexdatei
szCmnd = "F\1\1"
SCHLEIFE:
Call FATSCall (szCmnd)
If uFATSError <> 0 Then GoTo WEITER
Liste.AddItem szFATSkey
'
"A" Search Next After
'
' Dieser Befehl sucht den über "KeyString" und "RecNo"
' spezifizierten Schlüssel in der Indexdatei und blättert dann
' um eine Position weiter.
' Als Ergebnis wird der auf den angegebenen Schlüssel folgende
' Schlüssel zurückgegeben. Der Aufruf entspricht daher den
' Befehlen Search Generic (G) mit anschließendem Search Next (N).
'
' Im Gegensatz zum Befehl "Search Next" kann dieser Befehl auch
' problemlos im Netzwerk verwendet werden.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "A\{KeyNo}\{RecNo}\{FileNo}\{KeyString}"
'
' KeyNo Schlüsselnummer
'
' RecNo Datensatznummer
'
' FileNo Nummer der Indexdatei
'
' KeyString Schlüssel
szCmnd = "A\1\" + Str$(dwFATSRecno) + "\1\" + szFATSkey
GoTo SCHLEIFE
WEITER:
End Sub
Private Sub Option2_Click()
Dim szCmnd As String
Liste.Clear
Kundenstamm.Status = "Aufsteigend sortiert nach Branche"
szCmnd = "F\2\1"
SCHLEIFE2:
Call FATSCall (szCmnd)
If uFATSError <> 0 Then GoTo WEITER2
Get #1, dwFATSRecno, kunden
Liste.AddItem kunden.Branche$ + kunden.Name$
szCmnd = "A\2\" + Str$(dwFATSRecno) + "\1\" + szFATSkey
GoTo SCHLEIFE2
WEITER2:
End Sub
Private Sub Option3_Click()
Dim szCmnd As String
Liste.Clear
Kundenstamm.Status = "Absteigend sortiert nach Plz/Ort"
'
"L" Search Last
'
' Dieser Befehl gibt die Datensatznummer und den Schlüsselwert
' des größten Schlüssels der angegebenen Schlüsselnummer zurück.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "L\{KeyNo}\{FileNo}"
'
' KeyNo Schlüsselnummer
'
' FileNo Nummer der Indexdatei
szCmnd = "L\3\1"
SCHLEIFE3:
Call FATSCall (szCmnd)
If uFATSError <> 0 Then GoTo WEITER3
Get #1, dwFATSRecno, kunden
Liste.AddItem kunden.PLZ$ + kunden.Ort$ + kunden.Name$
'
"E" Search Previous Before
'
' Dieser Befehl sucht den über "KeyString" und "RecNo"
' spezifizierten Schlüssel in der Indexdatei und blättert dann
' um eine Position zurück.
' Als Ergebnis wird der dem angegebenen Schlüssel vorangehende
' Schlüssel zurückgegeben. Der Aufruf entspricht daher den
' Befehlen "Search Generic" mit anschließendem "Search Prev".
'
' Im Gegensatz zum Befehl "Search Previous" kann dieser Befehl
' auch problemlos im Netzwerk verwendet werden.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "E\{KeyNo}\{RecNo}\{FileNo}\{KeyString}"
'
' KeyNo Schlüsselnummer
'
' RecNo Datensatznummer
'
' FileNo Nummer der Indexdatei
'
' KeyString Schlüssel
szCmnd = "E\3\" + Str$(dwFATSRecno) + "\1\" + szFATSkey
GoTo SCHLEIFE3
WEITER3:
End Sub
Private Function replacekey(keyold$, keynew$, keynr%) As Integer
Dim szCmnd As String
Dim szMsg As String
If keyold$ <> keynew$ Then
'
"R" Replace Single Key
'
' Dieser Befehl verändert den über die Satznummer "RecNo"
' und den Schlüsselwert "KeyStrOld" spezifizierten Schlüssel
' in den neuen Schlüsselwert "KeyStrNew" mit derselben
' Satznummer.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "R\{KeyNo}\{RecNo}\{FileNo}\{KeyStrOld}\{KeyStrNew}"
'
' KeyNo Schlüsselnummer
'
' RecNo Datensatznummer
'
' FileNo Nummer der Indexdatei
'
' KeyStrOld Alter Schlüsselwert
'
' KeyStrNew Neuer Schlüsselwert
szCmnd = "R\" + Str$(keynr%) + "\" + Str$(dwCurrentRecno) + "\1\" + keyold$ + "\" + keynew$
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
Private Sub SatzErster_Click()
Call FATSCall ("F\1\1")
If uFATSError = 0 Then
SatzLaden
Else
SatzNeu_Click
End If
End Sub
Private Sub SatzLaden()
Get #1, dwFATSRecno, kunden
dwCurrentRecno = dwFATSRecno
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$(dwCurrentRecno)
Call knoepfe
End Sub
Private Sub SatzLetzter_Click()
Call FATSCall ("L\1\1")
If uFATSError = 0 Then SatzLaden
End Sub
Private Sub SatzLoeschen_Click()
Dim szCmnd As String
Dim szMsg As String
If dwCurrentRecno <> 0 Then
'
"D" Delete Record
'
' Diesem Befehl wird die im "Create Indexfile"-Befehl
' angegebene Anzahl Schlüssel und die zugehörige Satznummer
' im Kommandostring übergeben. Die Schlüssel werden aus der
' Indexdatei entfernt und die Satznummer freigegeben.
'
' Die Satznummer wird von FATS in eine Liste der bereits
' gelöschten Daten-sätze aufgenommen, damit der Befehl
' Insert Record (I) diese eventuell wiederverwenden kann,
' bevor die Datendatei erweitert werden muß. Diese Liste
' wird nach dem Prinzip last-in, first-out verwaltet, d.h.
' der zuletzt gelöschte Satz wird als nächster wiederverwendet.
'
' Beachten Sie bitte, daß mit diesem Befehl nur Hauptschlüssel
' gelöscht werden können. Nebenschlüssel, die mit dem Befehl
' Insert Single Key (1) erstellt wurden, sollten zuvor mit dem
' Befehl Delete Single Key (2) entfernt werden.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "D\{RecNo}\{DelFlag}\{FileNo}\{KeyStr1}[\{KeyStr2}...]"
'
' RecNo Datensatznummer
'
' DelFlag Schalter (Y/N)
' Bei gesetztem Schalter ("Y") überprüft FATS
' das Vorhandensein aller übergebenen Schlüssel
' bevor diese gelöscht werden. Sollte einer der
' Schlüssel nicht in der Indexdatei präsent sein,
' wird keiner gelöscht. Durch diese Option braucht
' der Löschvorgang etwas mehr Zeit.
'
' FileNo Nummer der Indexdatei
'
' KeyStr# Schlüssel
szCmnd = "D\" + Str$(dwCurrentRecno) + "\Y\1\" + 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
Call SatzNeu_Click
End If
End Sub
Private Sub SatzNaechster_Click()
'
"A" Search Next After
'
' Dieser Befehl sucht den über "KeyString" und "RecNo"
' spezifizierten Schlüssel in der Indexdatei und blättert dann
' um eine Position weiter.
' Als Ergebnis wird der auf den angegebenen Schlüssel folgende
' Schlüssel zurückgegeben. Der Aufruf entspricht daher den
' Befehlen Search Generic (G) mit anschließendem Search Next (N).
'
' Im Gegensatz zum Befehl "Search Next" kann dieser Befehl auch
' problemlos im Netzwerk verwendet werden.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "A\{KeyNo}\{RecNo}\{FileNo}\{KeyString}"
'
' KeyNo Schlüsselnummer
'
' RecNo Datensatznummer
'
' FileNo Nummer der Indexdatei
'
' KeyString Schlüssel
Call FATSCall ("A\1\" + Str$(dwCurrentRecno) + "\1\" + UCase$(RTrim$(KName.Text)))
If uFATSError = 0 Then SatzLaden
End Sub
Private Sub SatzNeu_Click()
dwCurrentRecno = 0
Anrede.Text = ""
KName.Text = ""
Branche.Text = ""
Kundenstamm.Strasse = ""
PLZ.Text = ""
Ort.Text = ""
Kundenstamm.Status = "Neuanlage"
Call knoepfe
End Sub
Private Sub SatzSichern_Click()
Dim szCmnd As String
Dim szStr1 As String
Dim szStr2 As String
Dim szMsg As String
szStr2 = PLZ.Text
If Len(szStr2) < 5 Then szStr2 = szStr2 + Space$(5 - Len(szStr2))
szStr2 = szStr2 + UCase$(RTrim$(Ort.Text))
If dwCurrentRecno = 0 Then
'
"I" Insert Record
'
' Diesem Befehl wird die im "Create Indexfile"-Befehl
' angegebene Anzahl Schlüssel im Kommandostring übergeben.
' Die Schlüssel werden in die Indexdatei einsortiert und
' einer Satznummer zugeordnet, welche in der "RECNO"
' Variable an das Anwenderprogramm zurückgegeben wird.
'
' Anschließend sollte das aufrufende Programm den zugehörigen
' Datensatz entsprechend der zurückgegebenen Satznummer in
' die Datendatei speichern.
'
' Die Länge der übergebenen Schlüssel darf die beim
' "Create-Indexfile" angegebene Länge nicht überschreiten,
' kürzere Schlüssel werden mit dem ASCII-Zeichen 00h auf die
' maximale Schlüssellänge erweitert.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "I\{FileNo}\{KeyStr1}[\{KeyStr2}[\{KeyStr3}]]"
'
' FileNo Nummer der Indexdatei
'
' KeyStr# Schlüssel
szCmnd = "I\1\" + UCase$(RTrim$(KName.Text)) + "\" + UCase$(RTrim$(Branche.Text)) + "\" + szStr2
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
dwCurrentRecno = dwFATSRecno
Else
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
szStr1 = kunden.PLZ + UCase$(RTrim$(kunden.Ort))
If replacekey(szStr1, szStr2, 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, dwCurrentRecno, kunden
Kundenstamm.Status = "Datensatz: " + Str$(dwCurrentRecno)
Call knoepfe
End Sub
Private Sub SatzSuchen_Click()
'
"G" Search Generic
'
' Dieser Befehl dient wie der Befehl Search (S) dem Suchen
' eines Datensatzes über den angegebenen Schlüssel, wobei
' hier allerdings keine vollständige Angabe des Schlüssels
' erforderlich ist.
' Gesucht wird nach dem ersten Schlüssel, welcher mit den
' in "KeyString" übergebenen Zeichen beginnt. Lautet
' "KeyString" beispielsweise "WASCH", dann könnte der zurück-
' gegebene Schlüssel "WASCHEN" oder "WASCHMASCHINE" sein.
'
' Mit den Befehlen Search Next (N) bzw. Search Next After (A)
' können Sie die nächsten Datensätze ermitteln, wobei Sie die
' zurückgegebenen Schlüssel jeweils mit "KeyString"
' vergleichen müssen.
'
' Folgende Fehlercodes kann dieser Befehl zurückliefern:
'
' 0 Kein Fehler, die Satznummer des erster Schlüssels,
' der mit den in"KeyString" übergebenen Zeichen beginnt,
' steht in "RECNO".
'
' 12 Es gibt keinen Schlüssel, der mit der in "KeyString"
' übergebenen Zeichenkette beginnt, zurückgegeben wurde
' der nächst kleinere Schlüssel.
'
' 13 "KeyString" ist kleiner als alle vorhandenen Schlüssel,
' es wurde der erste (kleinste) Schlüssel zurückgegeben.
'
' 15 "KeyString" ist größer als alle vorhandenen Schlüssel,
' es wurde der letzte (größte) Schlüssel zurückgegeben.
'
' 16 Es wurden noch keine Schlüssel eingefügt.
'
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "G\{KeyNo}\{FileNo}\{KeyString}"
'
' KeyNo Schlüsselnummer
'
' FileNo Nummer der Indexdatei
'
' KeyString Gesuchter Schlüssel
Call FATSCall ("G\1\1\" + UCase$(RTrim$(KName.Text)))
If uFATSError = 0 Or (uFATSError > 11 And uFATSError < 15) Then SatzLaden
End Sub
Private Sub SatzVoriger_Click()
'
"E" Search Previous Before
'
' Dieser Befehl sucht den über "KeyString" und "RecNo"
' spezifizierten Schlüssel in der Indexdatei und blättert dann
' um eine Position zurück.
' Als Ergebnis wird der dem angegebenen Schlüssel vorangehende
' Schlüssel zurückgegeben. Der Aufruf entspricht daher den
' Befehlen "Search Generic" mit anschließendem "Search Prev".
'
' Im Gegensatz zum Befehl "Search Previous" kann dieser Befehl
' auch problemlos im Netzwerk verwendet werden.
'
' Der Aufbau des Kommandostrings:
'
' szCmnd = "E\{KeyNo}\{RecNo}\{FileNo}\{KeyString}"
'
' KeyNo Schlüsselnummer
'
' RecNo Datensatznummer
'
' FileNo Nummer der Indexdatei
'
' KeyString Schlüssel
Call FATSCall ("E\1\" + Str$(dwCurrentRecno) + "\1\" + UCase$(RTrim$(KName.Text)))
If uFATSError = 0 Then SatzLaden
End Sub
© 2008
GCS Software, Udo Gertz