Verwenden typisierter Dateien

Verwenden typisierter Dateien: As New Classmodul
Typisierte Datei: Für das Sichern von numerischen Daten bietet sich statt einer Textdatei eine typisierte Datei an.
Sie ist durch eine konstante Datensatzlänge gekennzeichnet; zwischen den einzelnen Datensätzen ist kein
Trennzeichen (wie z.B. bei einer Textdatei). Man muss also genau wissen, wie groß ein Datensatz ist.
Eine typisierte Datei läßt sich nicht als Textdatei lesen; es ist nur ein Fragment des ersten Datensatzes lesbar.
Einen Append-Modus (wie bei einer Textdatei) gibt es hier nicht.
Quellcode im Formular
Private aktPerson As New Datenschicht Datenschicht ist der Name des Klassenmoduls.
Sub maskeSpeichern() Methode Speichern.
On Error GoTo fehler
With aktPerson
.nachname = Text1(0).Text
If Text1(1).Text <> "" Then .geburtstag = CDate(Text1(1).Text)
.student = Check1.value
End With
Exit Sub
fehler:
Resume Next
End Sub
Sub maskeAnzeigen() Methode Anzeigen.
On Error GoTo fehler
With aktPerson
Text1(0).Text = .nachname
Text1(1).Text = Format$(.geburtstag, "dd.mm.yyyy")
Check1.value = -.student
Text2.Text = Str$(.nr)
End With
Text1(0).SetFocus
Exit Sub
fehler:
Resume Next
End Sub
Private Sub Command1_Click(Index As Integer) Alle Schaltflächen wurden als Steuerelementefeld
maskeSpeichern mit den Indizes 1 bis 6 realisiert.
With aktPerson
Select Case Index Datenbanknavigator.
Case 1: .zurueck
Case 2: .vor
Case 3: .letzter
Case 4: .erster
Case 5: .neu
Case 6: .entferne
End Select
End With
maskeAnzeigen
End Sub
Private Sub Form_Load() Dateimenü.
With CommonDialog1
.Flags = &H802 Warnung vor Überschreiben.
.Filter = "Personendatei (*.dat)|*.dat"
End With
mnuFSave.Enabled = False Die Enabled-Eigenschaft stellt zugleich fest, ob
End Sub bereits ein Dateiname zugewiesen wurde.
Private Sub aenderung() Menüaufrufe koordinieren.
If MsgBox("Änderungen speichern?", 36, "Frage") = 6 Then
If mnuFSave.Enabled Then
mnuFSave_Click
Else
mnuFSaveAs_Click
End If
End If
End Sub
Private Sub mnuFOpen_Click() Menüaufruf Datei öffnen.
aenderung
With CommonDialog1
.ShowOpen
If .FileName = "" Then Exit Sub
aktPerson.leseDatei (.FileName)
Me.Caption = .FileName Die Caption-Eigenschaft des Formulars dient als
mnuFSave.Enabled = True Zwischenspeicher für den Dateinamen.
End With
maskeAnzeigen
End Sub
Private Sub mnuFSave_Click() Menüaufruf Datei speichern.
maskeSpeichern
aktPerson.schreibeDatei (Me.Caption)
End Sub
Private Sub mnuFSaveAs_Click() Menüaufruf Datei speichern unter.
maskeSpeichern
With CommonDialog1
.ShowSave
If .FileName = "" Then Exit Sub
aktPerson.schreibeDatei (.FileName)
Me.Caption = .FileName
mnuFSave.Enabled = True
End With
Exit Sub
End Sub
Private Sub mnuFExit_Click() Menüaufruf Exit.
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
aenderung
End Sub
Klasse BusinessDataTier (Datenschicht mit
Quellcode im Klassenmodul Objektmodell und Persistenz).
Option Base 1 Array-Indizierung (Datensatzzeiger) beginnt mit 1.
Private Type TPerson Datensatzstruktur.
nachname As String * 20
geburtstag As Date
student As Boolean
End Type
Private dynArray() As TPerson Pufferarray und weitere private Klassenmitglieder.
Private pers As TPerson Hilfsvariable für Längenbestimmung.
Private max% Anzahl Datensätze.
Private pos% Aktuelle Position.
Private file% Filenummer.
Public Sub vor() Bewegungsmethoden vor, zurück, erster und letzter...
pos = pos + 1
If pos > max Then pos = max
End Sub
Public Sub zurueck()
pos = pos - 1
If pos < 1 Then pos = 1
End Sub
Public Sub erster()
pos = 1
End Sub
Public Sub letzter()
pos = max
End Sub
Kapselung der Klasseneigenschaften durch
Public Property Get nr() As Integer Zugriffsmethoden (hier ReadOnly).
nr = pos
End Property
Public Property Get nachname() As String
nachname = dynArray(pos).nachname
End Property
Public Property Let nachname(value As String)
dynArray(pos).nachname = value
End Property
Public Property Get geburtstag() As Date
geburtstag = dynArray(pos).geburtstag
End Property
Public Property Let geburtstag(value As Date)
dynArray(pos).geburtstag = value
End Property
Public Property Get student() As Boolean
student = dynArray(pos).student
End Property
Public Property Let student(value As Boolean)
dynArray(pos).student = value
End Property
Public Sub neu() Das Erzeugen und Löschen eines Datensatzes
Dim i% geschieht ausschließlich im Pufferspeicher.
max = max + 1
ReDim Preserve dynArray(max)
For i = max To pos + 1
dynArray(i) = dynArray(i - 1)
Next i
pos = pos + 1
dynArray(pos).nachname = ""
End Sub
Public Sub entferne()
Dim i% Den letzten Datensatz kann man nicht löschen. Er
If max = 1 Then Exit Sub kann nur überschrieben werdebn.
If MsgBox("Soll Datensatz wirklich gelöscht werden?", 36, "Achtung!") = 6 Then
If pos = max Then pos = pos - 1: GoTo marke
For i = pos + 1 To max
dynArray(i - 1) = dynArray(i)
Next i
marke: max = max - 1
ReDim Preserve dynArray(max)
End If
End Sub
Private Sub Class_Initialize()
pos = 1: max = 1
ReDim dynArray(max)
End Sub
Private Sub oeffneDatei(name As String) Persistente Methoden.
file = FreeFile Open = Datei öffnen.
Open name For Random As file Len = Len(pers) Wenn Datei noch nicht existiert, wird sie angelegt.
End Sub
Public Sub leseDatei(name As String) Datei an Dynamisches Array: alle Datensätze werden
Dim i% von der Festplatte in das dynamische Array gelesen.
Call oeffneDatei(name)
max = LOF(file) \ Len(pers)
ReDim dynArray(max)
For i = 1 To max
Get file, , dynArray(i) Get = Datensatz lesen.
Next i
Close file Close = Datei schließen (wenn man's vergisst, kann
pos = 1 der Inhalt verlorengehen).
End Sub
Public Sub schreibeDatei(name As String) Dynamisches Array an Datei: alle Datensätze werden
Dim i% vom dynamischen Array auf die Festplatte
max = UBound(dynArray) geschrieben.
Call oeffneDatei(name)
For i = 1 To max
Put file, , dynArray(i) Put = Datensatz schreiben.
Next i
Close file Close = Datei schließen (wenn man's vergisst, kann
End Sub der Inhalt verlorengehen).

Mehr Tipps: Access-Datenbank lesen

Sponsoren und Investoren

Sponsoren und Investoren sind jederzeit herzlich willkommen!
Wenn Sie die Information(en) auf dieser Seite interessant fanden, freuen wir uns über eine kleine Spende. Empfehlen Sie uns bitte auch in Ihren Netzwerken (z. B. Twitter, Facebook oder Google+). Herzlichen Dank!

Nach oben Sitemap
Impressum & Kontakt