
Das Ziel dieser Übung ist das Kennenlernen der verschiedenen Dateiarten und der Umgang mit diesen. Am Ende dieser Übung sollte man folgendes beherrschen:
Auswählen eines geeigneten Dateityps für jede Situation.
Öffnen einer Datei für das Einlesen oder für das Schreiben von Daten.
Auslesen aus einer Datei oder Schreiben in eine Datei.
Korrektes Schließen einer Datei.
Visual Basic verfügt über drei Arten, um auf Dateien zuzugreifen (ausgenommen des Daten-Steuerelementes, welches auf Datenbanken zugreift): 1. Sequentieller Zugriff, 2. Wahlfreier Zugriff (Random), und 3. Binärer Zugriff.
Sequentieller Zugriff auf Dateien liest und schreibt in Dateien zeilenweise. Das Speichern ist zwar effizient, aber der Zugriff auf die Daten an unterschiedlichen Stellen der Dateit ist schwieriger, wegen des sequentiellen Zugriffmechanismus.
Wahlfreier Zugriff liest und schreibt Daten datensatzweise an jede beliebige Stelle in der Datei. Diese Art des Zugriffs ist empfehlenswert wenn die Datenstruktur in der Datei homogen ist. Das Speichern ist allerdings weniger effizient, denn die einzelnen Daten der Datensätze werden soweit mit Leerzeichen aufgefüllt, bis sie ihre voreingestellte Länge haben, womit der Dateiumfang relativ groß wird.
Binärer Zugriff liest und schreibt Daten byteweise an jeder beliebigen Stelle der Datei. Im Vergleich zu den anderen bleibt bei dieser Art des Zugriffs der Dateiumfang am geringsten, sie ist aber auch am schwierigsten zu programmieren.
Häufig gibt es in Anwendungen eine Vielzahl von Einstellungen, die vom Benutzer eingerichtet oder abgeändert werden können. Da diese Änderungen zur Laufzeit, und nicht zur Entwurfszeit geschehen, gehen sie verloren, sobald die Anwendung beendet wird. Um diese Änderungen beibehalten zu können, muß daher die Anwendungen die Informationen über diese Änderungen irgendwo außerhalb speichern. Eine Möglichkeit hierfür ist der Einsatz einer Datei mit sequentiellen Datenzugriff, die die Anwendung vor dem Beenden erstellt, und die sie beim nächsten Starten dann ausliest. In diese Datei können alle Informationen geschrieben werden, die z.B. mit Schriftart, Farbgebung, Fensterpositionen oder Eigenschaften von Steuerelementen (sichtbar, angewählt, usw.) zu tun haben.
Fügen Sie die Möglichkeit zum Speichern der Einträge in der als Teil der Menü- und Listen-Bearbeitungs-Übung erstellten 'Sprach-Tutor'-Anwendung hinzu.
Verwenden Sie das ‘Form_Unload’-Ereignis, um eine Routine zu schreiben, die eine angemessen benannte Datei öffnet und die aktuellen Einstellungen speichert.
Dim FileNum As Integer
FileNum = FreeFile
Open "A:\Einstell.dat" For Output As FileNum
Print #FileNum, lstEnglish.FontName
Print #FileNum, lstEnglish.BackColor
...
Close FileNum ' Wichtig, die Datei zu schließen
Fügen Sie im ‘Form_Load’-Ereignis eine Routine ein, die die im vorangegangenen Punkt erstellte Datei öffnet und deren Inhalt ausliest, und danach die Eigenschaften der Steuerelemente dort wo nötig abändert, um den früheren Zustand der Anwendung wiederherzustellen.
Dim FileNum As Integer
Dim temp
FileNum = FreeFile
Open "A:\Einstell.dat" For Input As FileNum
Input #FileNum temp
lstEnglish.FontName = temp
Input #FileNum temp
lstEnglish.BackColor = temp
...
Close FileNum ' Wichtig, die Datei zu schließen
Anmerkung: Die Variable ‘temp’ wird verwendet, weil Steuerelemente-Eigenschaften nicht direkt mit einer Input-Anweisung verbunden werden können. Deshalb wird jeder Zeile der Datei zuerst in ‘temp’ eingelesen, und dann wird ‘temp’ in der gewohnten Art und Weise einer Steuerelemente-Eigenschaft zugewiesen.
Der Nachteil von sequentiellen Dateien besteht darin, daß beispielsweise um Zeile 636 der Datei auszulesen das Programm erst die vorangegangenen 635 Zeilen auslesen muß. Dieses Problem tritt bei wahlfreiem Zugriff nicht auf. Das Programm kann direkt an jeder Stelle der Datei schreiben oder lesen. Jedoch verursacht der nötige Programmcode für den wahlfreien Zugriff etwas mehr Arbeit. Die Struktur der Daten muß zuvor penibel exakt festgelegt werden. In dieser zweiten Aufgabe soll eine kleine Datenbank erstellt werden, die Informationen über Namen, Telefonnummern, Wohnort und Alter enthält, sowie einen Platz für Kommentare.
Definieren Sie die Struktur der Datei für den wahlfreien Zugriff. Plazieren Sie den folgenden Code in einem Standardmodul (Modul1.bas):
Option Explicit
Type PersonenDaten
VorName As String * 20
NachName As String * 25
TelefonNr As String * 14
Wohnort As String * 20
Alter As Integer
Kommentare As String * 100
End Type
Anmerkung: An den Variablen vom Typ String ist ein '*'-Zeichen und eine Zahl angehängt worden. Diese Zahl legt die Länge der Variable (in Anzahl Zeichen) fest.
Der oben angeführte Code definiert einen neuen Datentyp namens 'PersonenDaten', der dann benutzt werden kann, um einzelne Instanzen dieses Typs zu deklarieren. Dafür setzt man den folgenden Code in den Allgemeinen Deklarationsabschnitt der Hauptform:
Option Explicit Dim Person As PersonenDaten
Damit wird eine neue Variable namens 'Person' deklariert. Allerdings ist diese nicht von einem der gewöhnlichen Variablentypen wie String, Integer, Long, usw., sondern von einem neuen Typ namens PersonenDaten.
Erstellen sie Bezeichnungsfelder und Textfelder auf der Hauptform, so daß der Benutzer die Informationen für die Dartenbank eingeben kann.
Um die Daten, die in den gerade erstellten Steuerelementen der Variable Person zuweisen zu können, können folgende Zeilen verwendet werden:
Person.VorName = txtVorName.Text Person.NachName = txtNachName.Text Person.TelefonNr = txtTelefonNr.Text
Anmerkung: Dem Variablenname Person folgt ein Punkt, und daran anschließend ein Feldname, der mit den gleichen Namen wie jenen im Type-Befehl im Modul1.bas übereinstimmt. Beachten Sie, daß Person keine einfacher Variablentyp wie z.B. String ist, es ist eine zusammengesetzte Variable, die aus sechs verschiedenen Grunddatentypen besteht.
Um Daten in eine Datei zu speichern, muß diese erst einmal geöffnet werden. Im Unterschied zum sequentiellen Zugriff muß jetzt VB mitgeteilt bekommen, wie lang jeder Datensatz (in Zeichen) ist. Fehler, die hier gemacht werden, können (bzw. werden) schwerwiegende Konsequenzen haben! Für die Datenbank der Personendetails ist jeder Datensatz (20 + 25 + 14 + 20 + 2 + 100) Zeichen lang. Dies ist die Länge jeder Zeichenkette sowie zwei Zeichen für den Zahlenwert (der Datentyp Integer umfaßt zwei Zeichen).
Dim FileNum As Integer
Dim Position As Integer
FileNum = FreeFile
Position = 1 ' Legt fest, auf welchen Datensatz zugegriffen wird
Open "A:\Personal.dat" For Random As FileNum Len = 181
Put #FileNum, Position, Person
Close #FileNum
Um Daten an andere Positionen der Datei zu schreiben, ändern Sie den Wert der Variable ‘Position’. Wenn eine Datei fünf Datensätze beinhaltet und ein neuer wird an Position sieben geschrieben, dann wird der Datensatz an Position sechs mit unbrauchbarem Inhalt aufgefüllt!
Benutzen Sie die folgenden Codezeilen (nach dem Öffnen der Datei), um Daten aus einer Datei mit wahlfreiem Zugriff einzulesen und danach Steuerelementen zuzuweisen:
Get #FileNum, Position, Person txtVorName.Text = Person.VorName txtNachName.Text = Person.NachName txtWohnort.Text = Person.Wohnort ...
Anmerkung: Wenn Sie während dem Arbeiten mit den Datentypen von VB überprüfen wollen, ob die Inhalte der Dateien korrekt sind, minimieren Sie Visual Basic und öffnen Sie den Texteditor aus der 'Zubehör'-Programmgruppe. Wählen Sie Datei / Öffnen und wählen Sie den gewünschten Dateinamen aus (z.B. Personal.dat). Der Texteditor (oder auch andere Programme) können auch verwendet werden, um Dateien zu erstellen, die dann mit Visual Basic eingelesen werden können, solange diese Dateien im ASCII-Modus gespeichert wurden.
Übung 9 (Verwenden des Tabellen-Steuerelements)
Hauptseite
Übung 11 (Arbeiten mit Datenbanken)