| ![]()  | ||||||||||||||||||||
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 2.00
Begin Form Kundenstamm
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Fats-Testprogramm"
   FontBold        =   -1  'True
   FontItalic      =   0   'False
   FontName        =   "MS Sans Serif"
   FontSize        =   9,6
   FontStrikethru  =   0   'False
   FontUnderline   =   0   'False
   Height          =   4680
   Left            =   1584
   LinkTopic       =   "KunStamm"
   ScaleHeight     =   4308
   ScaleWidth      =   5424
   Top             =   1596
   Width           =   5520
   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
      TabIndex        =   26
      Top             =   1440
      Visible         =   0   'False
      Width           =   5175
   End
   Begin OptionButton Option3
      Caption         =   "Plz/Ort"
      Height          =   375
      Left            =   2760
      TabIndex        =   25
      Top             =   960
      Visible         =   0   'False
      Width           =   1215
   End
   Begin OptionButton Option2
      Caption         =   "Branche"
      Height          =   372
      Left            =   1440
      TabIndex        =   24
      Top             =   960
      Visible         =   0   'False
      Width           =   1332
   End
   Begin OptionButton Option1
      Caption         =   "Name"
      Height          =   375
      Left            =   120
      TabIndex        =   23
      Top             =   960
      Visible         =   0   'False
      Width           =   1215
   End
   Begin CommandButton Listen
      Caption         =   "Listen"
      Height          =   375
      Left            =   3240
      TabIndex        =   21
      Top             =   0
      Width           =   1060
   End
   Begin CommandButton SatzLoeschen
      Caption         =   "Löschen"
      Enabled         =   0   'False
      Height          =   375
      Left            =   2160
      TabIndex        =   20
      Top             =   0
      Width           =   1060
   End
   Begin CommandButton SatzSichern
      Caption         =   "Sichern"
      Height          =   375
      Left            =   1080
      TabIndex        =   19
      Top             =   0
      Width           =   1060
   End
   Begin CommandButton SatzNeu
      Caption         =   "Neu"
      Enabled         =   0   'False
      Height          =   375
      Left            =   0
      TabIndex        =   18
      Top             =   0
      Width           =   1065
   End
   Begin CommandButton SatzLetzter
      Caption         =   "Letzter"
      Height          =   375
      Left            =   4320
      TabIndex        =   17
      Top             =   370
      Width           =   1060
   End
   Begin CommandButton SatzNaechster
      Caption         =   ">>"
      Height          =   375
      Left            =   3240
      TabIndex        =   16
      Top             =   370
      Width           =   1060
   End
   Begin CommandButton SatzSuchen
      Caption         =   "Suchen"
      Height          =   375
      Left            =   2160
      TabIndex        =   15
      Top             =   370
      Width           =   1060
   End
   Begin CommandButton SatzVoriger
      Caption         =   "<<"
      Height          =   375
      Left            =   1080
      TabIndex        =   14
      Top             =   370
      Width           =   1060
   End
   Begin CommandButton SatzErster
      Caption         =   "Erster"
      Height          =   375
      Left            =   0
      TabIndex        =   13
      Top             =   370
      Width           =   1060
   End
   Begin CommandButton Create
      Caption         =   "Create"
      Height          =   375
      Left            =   4320
      TabIndex        =   12
      Top             =   0
      Width           =   1060
   End
   Begin TextBox Ort
      Height          =   324
      Left            =   2280
      MaxLength       =   20
      TabIndex        =   11
      Top             =   3240
      Width           =   2655
   End
   Begin TextBox PLZ
      Height          =   324
      Left            =   1440
      MaxLength       =   5
      TabIndex        =   10
      Top             =   3240
      Width           =   735
   End
   Begin TextBox Strasse
      Height          =   324
      Left            =   1440
      MaxLength       =   25
      TabIndex        =   9
      Top             =   2880
      Width           =   3495
   End
   Begin TextBox Branche
      Height          =   324
      Left            =   1440
      MaxLength       =   25
      TabIndex        =   8
      Top             =   2520
      Width           =   3495
   End
   Begin TextBox KName
      Height          =   324
      Left            =   1440
      MaxLength       =   25
      TabIndex        =   7
      Top             =   2160
      Width           =   3495
   End
   Begin TextBox Anrede
      Height          =   324
      Left            =   1440
      MaxLength       =   5
      TabIndex        =   6
      Top             =   1800
      Width           =   735
   End
   Begin Label Status
      Height          =   255
      Left            =   120
      TabIndex        =   22
      Top             =   3960
      Width           =   5175
   End
   Begin Label txtPLZOrt
      Caption         =   "Plz/Ort"
      Height          =   255
      Left            =   120
      TabIndex        =   5
      Top             =   3240
      Width           =   1215
   End
   Begin Label txtStrasse
      Caption         =   "Straße"
      Height          =   255
      Left            =   120
      TabIndex        =   4
      Top             =   2880
      Width           =   1215
   End
   Begin Label txtBranche
      Caption         =   "Branche"
      Height          =   255
      Left            =   120
      TabIndex        =   3
      Top             =   2520
      Width           =   1215
   End
   Begin Label txtName
      Caption         =   "Name"
      Height          =   255
      Left            =   120
      TabIndex        =   2
      Top             =   2160
      Width           =   1215
   End
   Begin Label txtAnrede
      Caption         =   "Anrede"
      Height          =   255
      Left            =   120
      TabIndex        =   1
      Top             =   1800
      Width           =   1215
   End
   Begin Label Ueberschrift
      Alignment       =   2  'Center
      Caption         =   "Kundenstamm"
      FontBold        =   -1  'True
      FontItalic      =   0   'False
      FontName        =   "MS Serif"
      FontSize        =   12
      FontStrikethru  =   0   'False
      FontUnderline   =   0   'False
      ForeColor       =   &H00800000&
      Height          =   375
      Left            =   1080
      TabIndex        =   0
      Top             =   960
      Width           =   3255
   End
End
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