Programmieren

Visual Basic 5.0


Programmieren

Visual Basic 5.0

Christian Zahler

LEHRGANG


christian.zahler@telecom.at







5 Dateizugriff

Hier unterscheidet man drei Möglichkeiten:

Da meist bei Datenbanken der wahlfreie Zugriff angewandt wird, möchte ich diesen etwas genauer besprechen.

Vorgangsweise:

1. Festlegen eines "Records” als Datensatztyp:

Type Kundentyp

  Nachname  As String * 20

  Vorname   As String * 20

  Titel     As String * 10

End Type

Wichtig: Die Länge der Einzelstrings muss angegeben werden!

2. Definition einer Record-Variablen

Public Kunde As Kundentyp

3. Festlegen der Datei

Dim Dateiname As String

Dim FileHandle As Integer

Zunächst muss eine interne Nummer festgelegt werden, über die die Datei angesprochen werden kann, ein so genannter File Handle. (Anmerkung: Die Anzahl maximaler File Handles wird in DOS durch die Anweisung files=XX in der Datei config.sys begrenzt.)

Die nächste freie Dateinummer ermittelt man durch

FileHandle = FreeFile

Dann legt man einen Dateinamen fest:

Dateiname = "C:\DATEN.TXT"

Das Öffnen der nun festgelegten Datei zum wahlfreien Zugriff geschieht mit dem Befehl:

Open Dateiname For Random Access Read As FileHandle Len=Len(Kunde)

Die Länge eines einzelnen Datensatzes muss bereits beim Öffnen festgelegt werden.

Dann stehen für das Lesen und Schreiben folgende Befehle zur Verfügung:

Get FileHandle, nr%, Person

liest einen kompletten Datensatz. nr% gibt die Nummer des Datensatzes an. Wird nr% nicht angegeben, so wird der nächste Datensatz gelesen.

Put FileHandle, nr%, Person

schreibt einen kompletten Datensatz in die Datei. nr% gibt die Nummer des Datensatzes an. Wird nr% nicht angegeben, so wird der nächste Datensatz geschrieben.

Beispiel 5: Adreßdatenbank (B05)

ADRESS.VBP

Diese Datei gibt an, aus welchen Dateien das Projekt zusammengesetzt ist. (Diese Datei "erstellt sich selbst”, sie muss nicht extra codiert werden!)

Rahmen2

Man erkennt die Form ARBEITSO.FRM sowie ein Modul KUNDMOD1.BAS.

KUNDMOD1.BAS

 

Type person

 nname As String * 30

 Vorname As String * 30

 Strasse As String * 30

 PLZ As String * 30

 Ort As String * 30

 TelNr As String * 30

End Type


Public Kunde As person

Es erweist sich als günstig, die Typdefinition für die Recordvariable sowie die Deklaration der Recordvariable in einem Modul durchzuführen, da alle Formen auf dieses Modul zugreifen können.

ARBEITSO.FRM (frm_Datenbank)

Diese Form ist die Hauptform des Projekts.

Image129

„General Declarations":

Dim Dateiname As String   

   ‘Globale Variablen für ARBEITSO.FRM

 Dim filehandle As Integer

   ‘Nummer des DOS-File Handles

 Dim mox                   

   ‘Anzahl vorhandener Datensätze

 Dim Aktuell As Integer    

   ‘Nummer des aktuellen Datensatzes


Private Sub Ausgeben()

  Txt_Nachname.Text = Kunde.nname

  Txt_Strasse = Kunde.Strasse

  Txt_Postleitzahl.Text = Kunde.PLZ

  Txt_Wohnort.Text = Kunde.Ort

  Txt_Telefonnummer.Text = Kunde.TelNr

End Sub


Private Sub Einlesen()

  Kunde.nname = Txt_Nachname.Text

  Kunde.Strasse = Txt_Strasse.Text

  Kunde.PLZ = Txt_Postleitzahl.Text

  Kunde.Ort = Txt_Wohnort.Text

  Kunde.TelNr = Txt_Telefonnummer.Text

End Sub


Private Sub DatNumBerechnen()

  ‘Berechnet die Anzahl der bereits

  ‘gespeicherten Datensätze

  mox = LOF(filehandle) / Len(Kunde)

End Sub


Private Sub Form_Load()

  Msg = "In diesem Programm wird mit einer"  

  Msg = Msg & "Datei mit dem Namen "

  Msg = Msg & "DATEN.TXT gearbeitet. Öffnen"

  Msg = Msg & "Sie die Datei mit "

  Msg = Msg & "dem folgenden Eingabefeld."

  MsgBox Msg, 64, "Information"

  Dialogfeld.Action = 1

  Dateiname = Dialogfeld.filename

 

  ‘Hier wird überprüft, ob schon Datensätze

Programmieren.GIF

64

PCNEWS-60  November 1998

Christian Zahler christian.zahler@telecom.at    


Visual Basic 5.0

Programmieren


  ‘gespeichert sind. Wenn ja, so wird der

  ‘1. Datensatz gleich angezeigt.

  ‘Wenn nein, so wird eine entsprechende

  ‘Meldung ausgegeben und

  ‘die leere Maske angezeigt.


  filehandle = FreeFile

  Open Dateiname For Random As filehandle _

    Len = Len(Kunde)

  DatNumBerechnen

  Aktuell = 1

  If mox = 0 Then

    MsgBox "Noch keine Datensätze angelegt."

  Else

    Seek filehandle, Aktuell

    Get filehandle, , Kunde

    Ausgeben

  End If

  Close filehandle

 

End Sub


Private Sub cmd_aenderung_speichern_Click()

  filehandle = FreeFile

  If Txt_Nachname.Text <> "” And _

      Val(Txt_Nachname) = 0 Then

    Open Dateiname For Random _

      As filehandle Len = Len(Kunde)

    DatNumBerechnen

    Einlesen

    Seek filehandle, Aktuell

    Put filehandle, Aktuell, Kunde

    Close filehandle

  End If

End Sub


Private Sub Cmd_Beenden_Click()

  Unload Frm_Datenbank

End Sub


Private Sub cmd_Naechste_Click()

  filehandle = FreeFile

  Open Dateiname For Random As filehandle _

    Len = Len(Kunde)

  DatNumBerechnen

  If mox = 0 Then

    MsgBox "Noch keine Datensätze angelegt."

  Else

    If Aktuell < mox Then

      Aktuell = Aktuell + 1

      Seek filehandle, Aktuell

      Get filehandle, Aktuell, Kunde

      Ausgeben

    Else

      Msg = "Kein weiterer Datensatz "

      Msg = Msg & "vorhanden!"

      MsgBox Msg, 64, "Information"

    End If

 End If

 Close filehandle

End Sub


Private Sub cmd_Neue_Adresse_Click()

  Open Dateiname For Random Access Write _

     As filehandle Len = Len(Kunde)

  DatNumBerechnen

  Aktuell = Val(mox) + 1

  Einlesen

  Seek filehandle, Aktuell

    ‘Springt zur letzten Position + 1

  Put filehandle, , Kunde

    ‘Speicherung

  Close filehandle


    ‘Leeren der Bildschirmmaske

  Txt_Nachname = "”

  Txt_Strasse = ""

  Txt_Wohnort = ""

  Txt_Postleitzahl = ""

  Txt_Telefonnummer = ""

End Sub


Private Sub cmd_Suchen_Click()

  ‘sucht nach bereits vorhandenem Datensatz

  Dim eingabe As String * 30

  filehandle = FreeFile

  Msg = "Bitte geben Sie den Nachnamen ein:"

  eingabe = InputBox(Msg)


  If eingabe <> "" And Val(eingabe) = 0 Then

    Open Dateiname For Random Access Read _

      As filehandle Len = Len(Kunde)

    DatNumBerechnen

    For i = mox To 1 Step -1

      Seek filehandle, i

      Get filehandle, , Kunde

      If Kunde.nname = eingabe Then

        Aktuell = i

        Ausgeben

      End If ‘If Kunde.nname ...

    Next i

    Close filehandle

    If Txt_Nachname.Text <> eingabe Then

      Msg = "Es wurde kein Datensatz unter "

      Msg = Msg & "diesem Namen gefunden!"

      MsgBox Msg, , "Achtung!"

    End If ‘If Txt_Nachname.Text ...

  End If


End Sub


Private Sub cmd_vorherige_Click()

  filehandle = FreeFile

  Open Dateiname For Random As filehandle _

    Len = Len(Kunde)

  DatNumBerechnen

  If mox = 0 Then

    MsgBox "Noch keine Datensätze angelegt."

  Else

    If Aktuell > 1 Then

      Aktuell = Aktuell - 1

      Seek filehandle, Aktuell

      Get filehandle, Aktuell, Kunde

      Ausgeben

    Else

      Msg = "Der Dateianfang wurde “ & _

            “erreicht!"

      MsgBox Msg, 64, "Information"

    End If

  End If

  Close filehandle

End Sub

Vorschläge zum Weitermachen

Dieses Programm eignet sich optimal zum Erweitern!