Visual Basic Server

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 muß 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).

 Ranking-Hits zurück Sitemap
Designed by www.wbrnet.info