Beruflich Dokumente
Kultur Dokumente
0 UND DBASE/ACCESS-
DATENBANKBEARBEITUNG IN BEISPIELEN
Diplomarbeit
im
Fachbereich Betriebswirtschaftslehre
der Fachhochschule Regensburg
Vorgelegt von
Georg Messerer
_________________________
Seite 2 von 94
3. Datenbankprogrammierung ohne Data Control________________________________ 38
3.1. Arbeiten mit Datenbanken _______________________________________________________38
3.1.1. Allgemein ________________________________________________________________________ 38
3.1.2. Öffnen und Schließen einer Datenbank __________________________________________________ 38
3.1.3. Wichtige Methoden des "Database"-Objektes ____________________________________________ 40
3.2. Arbeiten mit Tabellen ___________________________________________________________40
3.2.1. Öffnen und Schließen von Tabellen ____________________________________________________ 40
3.2.2. Durchgehen einer Tabelle und Auflisten der Datensätze ____________________________________ 41
3.2.3. Verwendung von Indizes _____________________________________________________________ 43
3.2.4. Einfügen, Ändern und Löschen von Datensätzen __________________________________________ 45
3.2.5. Beispiel __________________________________________________________________________ 46
3.3. Arbeiten mit Abfragen __________________________________________________________52
3.3.1. Abfragen definieren ________________________________________________________________ 53
3.3.2. Abfragen anwenden ________________________________________________________________ 54
3.3.3. Beispiel __________________________________________________________________________ 54
3.4. Beispiele zu Standardproblemen der Datenbankbearbeitung _____________________________59
3.4.1. Berechnungen in Tabellen ____________________________________________________________ 60
3.4.2. Gruppenbearbeitung ________________________________________________________________ 61
3.4.3. Drucken mit Visual Basic ____________________________________________________________ 64
4. Beurteilung der Arbeit mit Access- und dBase-Dateien unter Visual Basic __________ 66
4.1. Visual Basic und Access-Datenbanken _____________________________________________66
4.2. Visual Basic und dBase-Datenbanken ______________________________________________67
4.3. Zusammenfassung _____________________________________________________________68
Anhang 1: Die Steuerelemente von Visual Basic __________________________________ 69
Anhang 2: Die wichtigsten Eigenschaften und Ereignisse von Visual Basic ____________ 78
Anhang 3: Glossar _________________________________________________________ 84
Anhang 4: Abbildungs- und Literaturverzeichnis __________________________________ 92
Seite 3 von 94
Einführung in die Arbeit mit Visual Basic
Mit der Version 3.0 von Visual Basic hat Microsoft ein Programmiersystem für
Windows vorgestellt, bei dem problemloses Arbeiten mit Datenbanken
verschiedener Formate ermöglicht werden soll. Meist sieht jedoch die Praxis
anders aus, als die vielversprechenden Ankündigungen der verschiedenen
Software-Häuser.
Ein Ziel dieser Arbeit wird es daher sein, diesen hohen Anspruch im Hinblick auf
den Zugriff auf Dateien im Access-, dBase III- und dBase IV-Format an
praktischen Problemen zu überprüfen. Hauptanliegen ist es aber, dem Visual
Basic-Anfänger die Möglichkeit zu geben, nach der eingehenden Beschäftigung
mit dieser Arbeit auch anspruchsvollere Datenbank-Anwendungen mit Visual
Basic entwickeln zu können. Vor allem durch Verdeutlichung aller theoretischen
Erklärungen mit kleinen, überschaubaren Beispielen soll dieses Ziel erreicht
werden.
Zu Anfang ist es unerläßlich, sich kurz mit der auf den ersten Blick vielleicht
etwas verwirrenden Oberfläche von Visual Basic zu beschäftigen. Danach soll
aber - vor allem um die einfache Programmerstellung mit Visual Basic zu
verdeutlichen - sofort in einer Schritt für Schritt-Anweisung ein erstes kleines
Programm erstellt werden.
Hierauf muß auf die wichtigsten Kontrollelemente für die
Datenbankprogrammierung eingegangen werden, da ohne Kenntnisse über diese
keine vernünftige Programmierarbeit mit Visual Basic möglich ist. Danach ist das
Thema aber nur noch Datenbankbearbeitung. Zuerst soll die Arbeit mit dem Data
Control vorgestellt werden, dann schwerpunktmäßig vor allem auch die Arbeit
ohne Data Control. Dabei muß immer der Blick sowohl der Arbeit mit Access-
als auch mit dBase-Datenbanken zugewandt sein.
Um die Beispiele zur Datenbankbearbeitung aber nachvollziehbar zu halten,
greifen diese ausnahmslos auf die mit Visual Basic mitgelieferte Access-
Datenbank "biblio.mdb" zu.
Nach dem Starten von Visual Basic präsentiert sich das Programm mit fünf
Fenstern, die alle von Bedeutung für die Programmentwicklung sind und auf die
im weiteren kurz eingegangen werden soll. Bei geschickter Anordnung der
verschiedenen Fenster erscheint die Programmieroberfläche ähnlich wie in
Abbildung 1 dargestellt.
Seite 4 von 94
Abb. 1. Die Programmoberfläche von Visual Basic
Oben am Bildschirm sehen Sie das wohl wichtigste Fenster, das Menüfenster, mit
dem Sie Zugriff auf sämtliche Programmfunktionen von Visual Basic haben. In
dieses Fenster gelangen Sie von jedem der anderen Visual Basic-Fenster aus
entweder durch Drücken der "F10"-Taste oder gleichzeitiges Drücken der "Alt"-
Taste und einem der unterstrichenen Buchstaben in der Menüzeile oder durch
einen Mausklick in das Fenster.
Seite 5 von 94
Das Menüfenster
Das wichtigste Fenster beim Programmieren mit Visual Basic ist das Entwurfsfor-
mular, mit dem die verschiedenen Formulare oder Forms, welche die Oberfläche
ihres Visual Basic-Programms bilden sollen, gestaltet werden können.
Das Entwurfsformular
Das Entwurfsformular dient der Erstellung von Fenstern für eigene Programme.
Unter Visual Basic ist der Oberflächen-Entwurf immer der Beginn eines neuen
Programmprojekts. Dazu können sämtliche Standard-Oberflächenelemente (auch
Steuerelemente oder Controls) von Windows verwendet werden und frei im
Entwurfsformular angeordnet und in ihrer Größe verändert werden.
Seite 6 von 94
Abb. 4. Beispiele für typische Windows-Steuerelemente
Die verschiedenen Controls werden beim Gestalten eines Formulars aus einer so
genannten Toolbox, schlechter ausgedrückt aus einem Werkzeugkasten,
entnommen.
Das Toolbox-Fenster
Dieses Fenster ermöglicht also den Zugriff auf die verschiedenen Steuerelemente,
die Visual Basic zur Verfügung stellt. Mit jeder der in Abbildung 5 zu sehenden
Tasten kann ein anderes Control im Entwurfsformular erstellt werden. (Einen
Überblick über sämtliche Steuerelemente, welche Visual Basic zur Verfügung
stellt, finden Sie in Anhang 1)
Nun kann ein gleiches Steuerelement im Fenster immer wieder verschieden ausse-
hen, wie es in Abbildung 6 anhand von verschiedenen Aktionsschaltern
dargestellt ist.
Seite 7 von 94
Abb. 6. Aktionsschalter mit unterschiedlichen Eigenschaften
Dazu sind nun jedem Steuerelement, aber auch jedem Formular, bestimmte
Eigenschaften zugeordnet, welche sein Aussehen und sein Verhalten bestimmen.
So gibt es Eigenschaften für die Länge, Breite und Position eines Controls, seine
Farbe, das Aussehen des Rahmens oder seine Beschriftung.
Alle Eigenschaften eines Steuerelements oder Formulars werden im Eigenschafts-
fenster angezeigt und können dort während des Formularentwurfs auch geändert
werden, ebenso kann man während der Laufzeit eines Visual Basic-Programms
die verschiedenen Eigenschaften modifizieren.
1. Drücken Sie dazu in der Toolbox auf den Knopf für Aktionsschalter.
2. Bewegen Sie dann den Mauscursor auf das Entwurfsformular, worauf der
Mauspfeil zu einem Fadenkreuz wird. Führen Sie dieses in die Nähe der linken
unteren Ecke des Fensters. Danach halten Sie bitte die linke Maustaste gedrückt
und ziehen Sie mit der Maus ein Viereck auf. Die hellgraue Linie zeigt dabei die
Umrisse an, welche der Aktionsschalter hernach haben wird. Lassen Sie als
letztes, wenn das hellgraue Viereck der gewünschten Form des Schalters ent-
spricht, die linke Maustaste wieder los. Sofort erscheint nun eine Schaltfläche in
der angegebenen Form, mit der Beschriftung 'Command1'.
Zur Bearbeitung (Größenveränderungen etc.) von schon im Entwurfsformular
plazierten Controls finden Sie näheres nach diesem Beispiel unter Punkt .
Bearbeiten von Steuerelementen im Entwurfsformular.
3. Wie Sie sehen ist der Schalter standardmäßig mit 'Command1' beschriftet. Zum
Ändern der Beschriftung klicken Sie bitte im Properties-Fenster auf die
Eigenschaft Caption. Nun können Sie im Textfeld des Fensters als neue Be-
schriftung 'Ende' eingeben.
Seite 9 von 94
Abb. 8. Verändern der "Caption"-Eigenschaft im Properties-Fenster
4. Doppelklicken Sie als nächstes auf den neuen Schalter. Es erscheint nun ein
Editorfenster zum Eingeben von Basic-Programmcode. Geben Sie zwischen 'Sub
Command1_Click ()' und 'End Sub' einfach 'End' ein.
5. Nun können Sie die Anwendung schon durch Drücken der "Start"-Taste im
Menüfenster von Visual Basic testen.
Es erscheint ein leeres Fenster mit dem Aktionsschalter ' Ende', den Sie bitte mit
der Maus anklicken, um das Programm wieder zu beenden.
Seite 10 von 94
Um das Ganze etwas interessanter zu machen wollen wir die kleine Applikation
noch etwas erweitern.
7. Ziehen Sie nun wie unter Punkt zwei beschrieben wieder irgendwo im Formular
ein Viereck auf. Nach Loslassen der linken Maustaste erscheint das Textfenster.
8. Erstellen Sie dann nach Drücken der Taste für Aktionstasten eine weitere
Aktionstaste und ändern Sie die Beschriftung 'Command2' in 'OK'.
9. Doppelklicken Sie dann auf den neuen Aktionsschalter ('OK') und schreiben Sie
zwischen 'Sub Command2_Click ()' und 'End Sub' die Zeile:
Diese Zeile wird immer dann ausgeführt, wenn während der Programmlaufzeit
der Schalter 'OK' gedrückt wird.
'MsgBox' ist ein Befehl zur Ausgabe einer Meldung am Bildschirm in einem Fen-
ster. Dabei steht die Meldung hinter dem Befehl in Klammern eingeschlossen.
Seite 11 von 94
'Text1.Text' ist immer der Text, der gerade in unserem Textfeld steht. 'Text1' ist der
Name des Textfeldes und '.Text' bezeichnet die Eigenschaft 'Text' des Textfeldes.
Testen Sie nun das Programm, um klarer zu sehen.
10. Schließen Sie dazu das Editorfenster durch einen Doppelklick in die linke
obere Ecke und drücken Sie dann im Menüfenster von Visual Basic wieder die
"Start"-Taste.
Wenn Sie nun einen beliebigen Text in das Textfeld eingeben und den Schalter
'OK' drücken, wird der eingegebene Text in einem Meldungsfenster am
Bildschirm angezeigt, und mit Drücken des Schalters 'Ende' läßt sich das
Programm wieder beenden.
Zusammenfassung
Bei jedem Mausklick auf einen Aktionsschalter tritt das Click-Ereignis dieses
Steuerelements auf und das entsprechende Unterprogramm wird automatisch auf-
gerufen.
Der ganze Ablauf von Visual Basic-Programmen wird durch solche Ereignisse
(events) gesteuert, die immer in Verbindung mit Oberflächenobjekten ausgelöst
werden, wie etwa in unserem Programmbeispiel ein Mausklick auf einen Schalter.
Weitere Ereignisse werden fallweise besprochen, eine Liste mit den wichtigsten
Ereignissen von Visual Basic finden Sie in Anhang 2.
Zugriff auf die Eigenschaften der Steuerelemente eines Formulars hat man aus
dem Quellcode über den jeweiligen Namen des Controls - in unserem Beispiel
'Text1' - dann einen '.' und nachfolgend der Name der gewünschten Eigenschaft,
die ermittelt oder geändert werden soll.
Der Name eines Kontrollelements kann übrigens in der Entwurfsphase mit der
Eigenschaft "Name" abgeändert werden.
Seite 12 von 94
Führt man nun den Mauscursor auf einen der schwarzen Punkte, ändert sich das
Aussehen des Cursors und durch Ziehen der Maus bei gedrückter linker
Maustaste, läßt sich die Größe des Steuerelements verändern.
Um die Position eines Control zu modifizieren, führen Sie den Cursor bitte auf
das entsprechende Steuerelement und ziehen dann die Maus bei gedrückter linker
Maustaste.
Entfernen können Sie ein Kontrollelement, indem Sie es markieren und dann die
Taste "Entf" bzw. "Del" drücken.
Im Eigenschaftsfenster werden übrigens immer die Eigenschaften des gerade
markierten Steuerelements angezeigt und können nach Belieben bearbeitet
werden.
Seite 13 von 94
Die wichtigsten Kontrollelemente im Hinblick auf die Datenbankpro-
grammierung
Da nicht alle Steuerelemente, die Visual Basic zur Verfügung stellt für die Daten-
bankprogrammierung von Bedeutung sind, soll hier nur auf einige ausgewählte
Controls näher eingegangen werden.
Aktionsschalter
Abb. 12. Ein Aktionsschalter und die zugehörige Taste aus dem Toolbox-Fenster
Funktion
Ein Aktionsschalter ist, wie schon aus obigem Beispiel bekannt, eine bildlich dar-
gestellte Funktionstaste, die in der Regel durch die Maus angesteuert wird. Durch
einen Aktionsschalter kann eine vom Programmierer definierte Aktion ausgeführt
werden.
Jede Taste kann mit einem beliebigen Text beschriftet werden, wobei die wichtig-
sten und häufigsten Texte "OK", "Abbrechen", "Hilfe", "Ja", "Nein" und "Weiter"
sind.
Mit dem Zeichen "&" kann eine Direktzugriffstaste für einen Aktionsschalter
definiert werden. Soll zum Beispiel der Schalter "Hilfe" mit den Tasten "Alt" und
"H" aufgerufen werden, so ist die Beschriftung auf "&Hilfe" zu setzen.1
1
Dr. Pia Maslo, Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für Windows, 1. Auflage 1993, DATA
BECKER GmbH, Düsseldorf, S. 170 f.
2
Die Namen und Erklärungen der Eigenschaften, Ereignisse und Methoden von Objekten sind jeweils der
Hilfedatei "VB.HLP" zu Microsoft Visual Basic 3.0 entnommen.
Seite 14 von 94
Ist diese Eigenschaft True gesetzt, wird der entsprechende Schalter auch durch
Drücken der "Return"-Taste aktiviert. Das bietet sich also meist für Tasten mit
der Beschriftung "OK" an.
Name
Diese Eigenschaft dient der Benennung des Aktionsschalters, und zwar wird
hiermit der Name festgelegt, mit dem der Aktionsschalter im Basic-Quellcode
angesprochen werden soll.
Beispiel:
Command1.SetFocus erteilt der Schaltfläche mit Namen "command1"
den Fokus
In gleicher Weise kann man bei den meisten anderen Kontrollelementen den Fo-
kus zuweisen, also z.B. 'Text1.SetFocus' oder 'List1.SetFocus'.
Beispiel
Ein Beispiel zu Aktionsschalter finden Sie unter 1.2.1. Das erste Programm.
Seite 15 von 94
Textfeld
Abb. 13. Ein Textfeld und die zugehörige Taste aus dem Toolbox-Fenster
Funktion
Textfelder dienen der Abfrage von Benutzereingaben. Eingesetzt werden
Textfelder vor allem, um Dialogfelder oder Eingabemasken zu definieren, oder
auch um einen Texteditor zu programmieren, da ein Textfeld auch mehrzeilig
sein kann.
Außerdem ist es auch möglich ein Textfeld als Verknüpfung zu einem
Datenbankfeld zu benützen. Näheres dazu unter dem Punkt 2.6. Data Control.
In Abbildung 12 sehen sie ein Textfeld, bei dem MultiLine "True", ScrollBars "3
- Both" und Text gleich "Vorgabe" gesetzt ist.
Seite 16 von 94
Abb. 14. Mehrzeiliges Textfeld mit horizontaler und vertikaler Bildlaufleiste
Beispiel
Für ein Beispiel zur Anwendung eines Textfeldes gehen Sie bitte zu Punkt 1.2.2.
Das erste Programm.
Bezeichnungsfeld
Abb. 15. Ein markiertes Bezeichnungsfeld und die zugehörige Taste aus dem Toolbox-Fenster
Seite 17 von 94
Funktion
Ein Bezeichnungsfeld dient der Anzeige von ein- oder mehrzeiligem Text. Es
kann z.B. vor Textfeldern verwendet werden zur Erklärung, was eingegeben
werden soll. Bezeichnungsfelder können während der Laufzeit des Programms
nicht den Fokus erhalten, daher also nicht bearbeitet werden.
Beispiel
Als Beispiel für die Anwendung von Bezeichnungsfeldern soll ein kleines
Programm erstellt werden, das vor allem auch den Zugriff auf
Objekteigenschaften während der Programmlaufzeit zeigt.
Legen Sie dazu ein neues Projekt an, indem Sie im Menüfenster unter dem Punkt
'File' den Unterpunkt 'New Project' mit der Maus anwählen (Abbildung 16).
Seite 18 von 94
Abb. 16. Mit diesem Menüpunkt wird ein neues Projekt angelegt
Dann legen Sie bitte wie unter 1.2.1. Das erste Programm demonstriert eine
Schaltfläche "Ende" zum Beenden des Programms an. (Vergessen Sie nicht die
End-Anweisung im Click-Ereignis des Ende-Schalters!)
Danach platzieren Sie bitte noch eine Schaltfläche mit der Beschriftung "Ändern"
und ein Bezeichnungsfeld in das Formular.
Das Entwurfsformular sollte dann ungefähr wie in Abbildung 17 aussehen:
Nun öffnen Sie bitte ein Editorfenster für die Click-Ereignisprozedur des
Schalters "Ändern", indem Sie auf diesen doppelklicken.
Geben Sie dann den in Abbildung 18 dargestellten Quelltext ein.
Seite 19 von 94
Abb. 18. Der Quelltext für die Taste Ändern
Die Einrückungen sind nicht zwingend vorgeschrieben, sie dienen aber der besse-
ren Übersichtlichkeit des Quelltextes, weshalb Sie sich diese von Anfang an zur
Gewohnheit machen sollten.
Mit der Eigenschaft FontItalic können Sie Kursivschrift (Einstellung True) oder
Normalschrift (Einstellung False) festlegen. Wird nun die Taste Ändern gedrückt,
und die Schrift in Label1 ist kursiv (Label1.FontItalic = True), wird die
Normalschrift eingestellt (der Then-Teil tritt ein) und umgekehrt (der Else-Teil
tritt ein).
Beginnen Sie das Programm wieder durch Drücken der Starttaste, und
beenden Sie es nach dem Test mit der "Ende"-Taste.
Seite 20 von 94
Abb. 19. Das Speichern-unter-Dialogfeld von Visual Basic
Sofort darauf öffnet sich das Fenster wieder, diesesmal aber mit der Überschrift
'Save Project as'. Geben Sie den Dateinamen "bsp1.mak" ein und speichern Sie
das Projekt mit Anklicken des "OK"-Schalters. In dieser "*.MAK"-Datei sind nun
die Namen aller Dateien gespeichert, welche zu dem "Bsp1"-Beispiel gehören, so
daß sie beim Projekt-Öffnen ins Projektfenster geladen werden können.
Zum Öffnen von Projekten wählen Sie bitte im Menüfenster bei dem Punkt ' File'
den Unterpunkt 'Open Project'. Es erscheint wieder ein ähnliches Fenster, wie beim
Speichern. In der Listbox mit den Dateinamen können Sie hier ein Projekt
anklicken, das anschließend geladen wird.
Listenfeld
Abb. 20. Ein Listenfeld und die zugehörige Taste aus dem Toolboxfenster
Funktion
In einem Listenfeld werden verschiedene Einträge zur Auswahl angeboten.
Während der Laufzeit des Programms können dann mehrere oder ein Eintrag aus
der Liste durch den Anwender ausgewählt und im Programm weiterverarbeitet
werden.
Seite 21 von 94
Abb. 21. Listenfeld mit columns = 2 und columns = 3
List
Diese Eigenschaft kann während der Entwurfsphase nicht bearbeitet werden
und stellt einen String-Array dar, in dem die Einträge der Liste stehen. Über
diesen Array kann auf die einzelnen Einträge zugegriffen werden.
Beispiel:
s$ = List1.List(0) Zuweisung des ersten Eintrages in der Li
ste auf die Variable s$
s$ = List1.List(ListCount-1) Zuweisung des letzten Eintrages in der
Liste auf die Variable s$
ListCount
Diese Eigenschaft kann während der Entwurfsphase nicht bearbeitet und wäh-
rend der Programmlaufzeit nur gelesen werden. Sie gibt die Anzahl der Ein-
träge einer Liste an.
ListIndex
Diese Eigenschaft gibt an, welcher Eintrag einer Liste gerade ausgewählt ist.
-1 in der Liste ist kein Eintrag ausgewählt
0 der erste Eintrag einer Liste ist der aktuell ausgewählte
1 der zweite Eintrag einer Liste ist der aktuell ausgewählte
...
MultiSelect
Damit können Sie einstellen, ob und welche Mehrfachauswahl bei einem Li-
stenfeld möglich ist.
Einstellungsmöglichkeiten:
0 - None Keine Mehrfachauswahl möglich
1 - Simple Einfache Mehrfachauswahl, d.h. mit jedem Mausklick
auf einen Eintrag ist dieser ausgewählt.
2 - Extended Erweiterte Mehrfachauswahl, d.h. "Shift" und Klick
oder "Shift" und eine Pfeiltaste erweitern die Auswahl
vom eben ausgewählten zum neu ausgewählten Eintrag
Seite 22 von 94
und mit "Strg" und Klick wählt man einzelne Einträge
aus.
Selected
Diese Eigenschaft kann während der Entwurfsphase nicht bearbeitet und wäh-
rend der Programmlaufzeit nur gelesen werden.
Hiermit ist es möglich bei einer Liste mit Mehrfachauswahl die gewählten Ein-
träge zu ermitteln. Es handelt sich um einen Boolean-Array mit sovielen
Elementen, wie Einträge in der Liste sind. Für ausgewählte Einträge ist das
entsprechende Element von "Selected" True, für nicht ausgewählte False. Um
also zu ermitteln, ob der erste Eintrag der Liste (an Stelle 0 im List-Array)
ausgewählt ist, muß abgefragt werden: if List1.Selected(0) = True then
...
Sorted
Hier läßt sich festlegen, daß die Liste automatisch alphabetisch sortiert wird
(sorted = True) oder daß die Einträge in der Reihenfolge erscheinen, in welcher
sie in die Liste aufgenommen wurden (sorted = False).
Bedeutung:
control der Name des Listenfeldes
item ein String-Ausdruck, der in das Listenfeld eingetragen werden
soll
index die Stelle, an welcher der String eingetragen werden soll, der
erste Eintrag hat die Nummer 0!
Beispiele:
List1.AddItem "Eintrag 1" Trägt "Eintrag 1" unten in der Liste ein
List1.AddItem "Eintrag", 2 Schreibt "Eintrag" in die dritte Zeile der
Liste
Clear
Diese Methode entfernt alle Einträge aus einer Liste.
Beispiel:
List1.Clear Alle Einträge aus der Liste mit Namen "List1" werden ent
fernt.
RemoveItem
3
Darstellung der und Erklärungen zur Syntax von Visual Basic-Befehlen und -Funktionen sind jeweils der
Hilfedatei "VB.HLP" zu Visual Basic entnommen.
Seite 23 von 94
Mit dieser Methode entfernen Sie einzelne Einträge wieder aus einem
Listenfeld.
Beispiel:
List1.RemoveItem 0 Der erste Eintrag aus der Liste wird entfernt.
Beispiel
Als Beispiel für das Listenfeld soll ein kleines Programm erstellt werden, bei dem
man in ein Textfeld Wörter eingibt, die dann in ein Listenfeld aufgenommen wer-
den. Außerdem soll in einem Bezeichnungsfeld immer der Eintrag aus der Liste
angezeigt werden, der gerade ausgewählt ist.
Legen Sie dazu wieder wie unter 2.3.4. Beispiel beschrieben ein neues Projekt an.
Danach plazieren Sie in das Entwurfsformular eine "Ende"- und eine "OK"-Taste,
dazu ein Listenfeld, ein Textfeld und ein Bezeichnungsfeld. Das Formular sollte
dann ungefähr wie in Abbildung 22 aussehen:
Danach ändern Sie bitte jeweils über die Eigenschaft "Name" die Namen der fol-
genden Kontrollelemente:
Text1 Eingabe
Label1 Wahl
List1 Liste
Command1 CommandOK
Command2 CommandEnd
❑ Listenfeld
Sub Liste_Click ()
Wahl = Liste.List(Liste.ListIndex)
End Sub
Hier wird dem Bezeichnungsfeld "Wahl" aus dem Array des Listenfeldes "Liste"
('Liste.List') der aktuell ausgewählte Listeneintrag zugewiesen, welcher an der
Stelle 'Liste.ListIndex' steht.
Diese Zuweisung wird jedesmal durchgeführt, wenn auf irgendeinen Eintrag der
Liste geklickt wird, da die Zuweisung ja im Klick-Ereignis der Liste
('Liste_Click()') steht.
Nun können Sie das Beispiel wieder durch Drücken der "Start"-Taste im Menü-
Fenster von Visual Basic testen.
Schaltfelder
Funktion
Schaltfelder oder Optionsfelder können gekennzeichnet durch einen schwarzen
Punkt die Zustände Ja und Nein annehmen. Meist sind sie mit einem Rahmen
gruppiert, und es kann immer nur eines der Schaltfelder in der Gruppe den Wert
"Ja" haben.
1 (Right Justify)
Caption
Hier wird der jeweilige Text zum Schaltfeld eingetragen.
Value
Mit dieser Eigenschaft schließlich ist es möglich einzustellen, bzw. auszulesen,
ob ein Schaltfeld ausgewählt, bzw. "Ja" gesetzt ist ('Option1 = True', Markierung
durch einen schwarzen Punkt!) oder nicht ('Option1 = False').
Seite 25 von 94
Beispiel
Im Beispiel sollen drei Schaltfelder vorhanden sein, wobei in einem
Bezeichnungsfeld immer der Text des gerade ausgewählten Feldes angezeigt
werden soll.
Bei der Verwendung von Schaltfeldern sind immer mehrere mit einem Rahmen
zu einer Gruppe zusammengefasst und innerhalb jeder Gruppe kann nur eines
ausgewählt sein.
In Visual Basic muß dazu im Entwurfsformular zuerst ein Rahmen gezeichnet
werden, in den dann die Schaltfelder plaziert werden.
Legen Sie also ein neues Projekt an, drücken Sie im Toolbox-Fenster dann auf
den Knopf für Rahmen und ziehen Sie im Formular einen Rahmen auf.
Ändern Sie als nächstes bei der "Caption"-Eigenschaft die Überschrift für den
Rahmen in "Farben".
Nun plazieren Sie nacheinander nach Klick auf die Taste für Schaltfelder drei
Schaltfelder in den Rahmen und ändern Sie die "Caption"-Eigenschaft der
Felder in "Rot", "Grün" und "Blau".
Erstellen Sie dann noch die weiteren Steuerelemente, so daß das Enwurfsformular
schließlich so aussieht wie in Abbildung 23.
❑ Aktionsschalter "Ende":
Sub Command1_Click ()
End
End Sub
Seite 26 von 94
❑ Schaltfelder 1 - 3:
Sub Option1_Click ()
Label1 = Option1.Caption
End Sub
Sub Option2_Click ()
Label1 = Option2.Caption
End Sub
Sub Option3_Click ()
Label1 = Option3.Caption
End Sub
Bei jedem Klick auf eines der Schaltfelder wird der Text bei diesem Schaltfeld
(aus der "Caption"-Eigenschaft) dem umrahmten Label oben im Formular
zugewiesen. Das Label ist umrahmt, weil seine Eigenschaft "BorderStyle" gleich
"1" gesetzt ist.
Nun können Sie das Beispiel wieder durch Drücken der "Start"-Taste im Menü-
Fenster von Visual Basic testen.
mit:
AlkMenge aufgenommene Menge an reinem Alkohol in Gramm
Menge aufgenommene Menge des alkoholischen Getränks in Liter
Seite 27 von 94
Prozent Volumenprozent Alkohol des Getränks
Promille die Blutalkoholkonzentration
Gewicht das Körpergewicht des Trinkers
Zeit Trinkdauer
Geschlecht der Geschlecht-Faktor:
für einen Mann: 0.64
für eine Frau: 0.55
Als erstes muß wieder ein Formular erstellt werden, in das alle nötigen Eingaben
gemacht werden können und in dem auch das Ergebnis der Berechnung ausge-
geben werden kann. Es müssen also ein Textfeld für das Körpergewicht, eines für
die Trinkmenge und eines für die Trinkdauer erstellt werden, dazu zwei
Schaltfelder für die Eingabe des Geschlechts, eine Liste mit verschiedenen
alkoholischen Getränken und ein Bezeichnungsfeld für die Ausgabe des
Ergebnisses der Berechnung. Außerdem sind noch drei Aktionstasten nötig mit
den Beschriftungen "Berechnen", "Neu" und "Ende".
Abb. 24. Das Entwurfsformular zum Alkomat mit Namen der Controls
Seite 28 von 94
Quelltext
Öffnen Sie als erstes ein Editorfenster und wechseln Sie wie in Abbildung 25
dargestellt in den "General"-Bereich des Quelltextes zum Formular. Hier können
globale Variablen vereinbart werden, die für den gesamten Code des Formulars
gültig sind.
Die Zeilennummern dienen nur den untenstehenden Erklärungen und sind nicht
miteinzugeben.
Der Quelltext dürfte durch die Kommentare größtenteils verständlich sein. Nur
einige Hinweise!
Seite 30 von 94
Beachten Sie, daß jeder aus dem Formular eingelesene Wert auf Gültigkeit
überprüft wird (Zeilen 10,17,27,35). Das muß bei Benutzereingaben immer
erfolgen, um unsinnige Rechenergebnisse oder gar Programmabstürze (etwa bei
einer Division durch eine eingegebene Null) zu vermeiden.
Mit dem Befehl 'Exit Sub' wird ein Unterprogramm sofort verlassen und nicht
weiterausgeführt, es erfolgt also im Beispiel keine Berechnung, wenn
Fehleingaben gemacht wurden (13, 20, 30, 38).
Der Befehl 'Format$' (44) ermöglicht eine formatierte Ausgabe von Zahlen. Hier
im Beispiel wird der Wert von "Promille" mit zwei Nachkommastellen
ausgegeben. Nähere Einzelheiten zu dem Befehl können Sie der Visual Basic-
Hilfe entnehmen.
Durch Druck der "Neu"-Taste sollen alle Textfelder und das Bezeichnungsfeld
mit dem Rechenergebnis wieder leer am Bildschirm erscheinen. Außerdem soll
in der Alkoholika-Liste wieder kein Getränk ausgewählt sein. Dazu ist folgender
Quelltext nötig:
Sub NeuTaste_Click ()
'Neu-Taste: Zurücksetzen aller Eingabefelder
GewichtText.Text = ""
TrinkmengeText.Text = ""
TrinkdauerText.Text = ""
ErgebnisLabel.Caption = ""
AlkListe.ListIndex = -1
End Sub
Beim Start des Programms sind einige Initialisierungen nötig, die also am besten
beim Laden des Formulars vorgenommen werden. Geben Sie also bei der
"Load"-Ereignisprozedur des Formulars folgende Zeilen ein:
Sub Form_Load ()
' Initialisierungen
' Vorbelegen der Alkoholika-Liste
AlkListe.AddItem "Bier"
AlkListe.AddItem "Wein"
AlkListe.AddItem "Schnaps"
AlkListe.AddItem "Likör"
'Vorbelegen des Prozente-Feldes mit den entsprechenden Volumenprozenten
Prozente(0) = 5
Prozente(1) = 7
Prozente(2) = 42
Prozente(3) = 30
End Sub
Seite 31 von 94
Erweiterungsmöglichkeiten
Als einfachste Erweiterung bietet es sich an mehr und detaillierter Getränke in die
Liste aufzunehmen. Dazu muß nur im Unterprogramm 'Sub Form_Load ()' das
neue Getränk ebenfalls mit 'AlkListe.AddItem' in die Liste eingefügt werden und
der Prozentwert des Getränks mit 'Prozente(x) = y' zugewiesen werden.
Beachten Sie aber, daß Sie im "General"-Bereich des Quelltextes auch die
Vereinbarung des Prozente-Feldes ändern müssen.
Für sechs Getränke z.B. 'Dim Prozente(5) As Single'.
Eine Schwäche des Programms ist, daß man nicht mehrere verschiedene Getränke
nacheinander für eine Trinkdauer eingeben kann. Dafür müßte das Formular
etwas anders gestaltet werden und etwa eine Liste aufgenommen werden, in der
alle vom Anwender angegebenen Getränke mit der jeweiligen Trinkmenge
angezeigt werden. Das Formular könnte dann - verziert mit dem Bild eines
ländlichen Wirtshauses - wie in Abbildung 26 dargestellt aussehen:
Seite 32 von 94
Data Control
Abb. 27. Bildschirmanzeige des Data Controls und die zugehörige Taste aus dem Toolbox-Fenster
4
a.o.O. Dr. Pia Maslo, Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für Windows, S. 729
Seite 33 von 94
DatabaseName
Mit dieser Eigenschaft legen Sie fest, auf welche Datenbank zugegriffen wer-
den soll.
Bei Access-Dateien muß der Pfad und der entsprechende Dateiname angegeben
werden, womit auf alle Tabellen und Indizes der Datenbank zugegriffen
werden kann.
In dBase sind die einzelnen Tabellen und Indizes ja in eigenen Dateien
("*.DBF" und "*.NDX" bzw. "*.MDX") abgelegt. Daher muß beim Zugriff auf
eine dBase-Datenbank das Verzeichnis angegeben werden, in dem sich alle zur
Datenbank gehörigen Dateien befinden, also z.B. "c:\dbase\bsp1\". Achten Sie
bitte auf den Rückwärtsschrägstrich am Ende des Ausdrucks, ohne diesen
erkennt Visual Basic das Verzeichnis nicht.
ReadOnly
Mit dieser Eigenschaft können Sie einstellen, daß eine Datenbank nur zum
Lesen (also Ansehen) geöffnet wird ('ReadOnly = True'), oder daß Sie auch ge-
ändert werden kann ('ReadOnly = False').
RecordSource
Da ja in einer Datenbank mehrere Tabellen vorhanden sein können, müssen Sie
hier den Namen der Tabelle angeben, auf die Sie zugreifen wollen.
Bei einer Access-Datenbank wird einfach der Tabellenname angegeben, wie er
in der Datenbank definiert ist.
Bei einer dBase-Tabelle dagegen muß der Dateiname ohne (!) Extension
angegeben werden, also z.B. bei einer Tabelle "ADRESS.DBF" muß
angegeben werden "ADRESS" !
Seite 34 von 94
UpdateRecords
Mit dieser Methode werden in mit einer Datenbanktabelle verknüpften
Textfeldern vorgenommene Änderungen in die Tabelle übernommen und in der
Datenbank abgespeichert.
Beispiel
Im Beispiel soll auf eine mit Visual Basic mitgelieferte Beispieldatenbank im Ac-
cess-Format zugegriffen werden, wobei auch Änderungen an Feldinhalten vorge-
nommen werden können.
Nun fehlen noch die Textfelder, in denen die Feldinhalte angezeigt und geändert
werden sollen.
Plazieren Sie dazu drei Textfelder untereinander in das Entwurfsformular. Zum
Verbinden der Textfelder mit der Datenbank-Tabelle klicken Sie bitte jeweils
Seite 35 von 94
doppelt auf die "DataSource"-Eigenschaft des Textfeldes, worauf in diese "Data1"
also der Name des Data Controls eingetragen wird.
Nun muß noch jeweils ein Tabellenfeld angegeben werden, wozu Sie einfach auf
die "DataField"-Eigenschaft Doppelklicken, wonach Sie aus dem
Kombinationslistenfeld zur Eigenschaft nacheinander die drei Felder der Tabelle
den drei Textfeldern im Formular zuweisen können.
Als letztes benötigen wir noch drei Aktionsschalter, die Sie bitte mit "Speichern",
"Rückgängig" und "Ende" beschriften. Das Entwurfsformular des Beispiels sollte
dann ungefähr folgendermaßen aussehen:
Abb. 29. Das Entwurfsformular für das Beispiel zum Data Control
❑ Aktionsschalter "Speichern":
Sub Command1_Click ()
Data1.UpdateRecord
MsgBox ("Änderungen in der Tabelle gespeichert!")
End Sub
❑ Aktionsschalter "Ende":
Sub Command3_Click ()
End
End Sub
Seite 36 von 94
❑ Aktionsschalter "Rückgängig":
Sub Command2_Click ()
If MsgBox("Änderungen verwerfen?", 36, "Frage") = 6 Then
Data1.UpdateControls
End If
End Sub
Hier ist die "MsgBox"-Funktion auf etwas andere Weise verwendet als zuvor,
wobei die Syntax allgemein lautet:
Dabei sind die in eckige Klammern gesetzten Parameter optional, das heißt sie
können, müssen aber nicht angegeben werden.
Nun können Sie das Programm wieder nach Drücken der "Start"-Taste im
Menüfenster testen.
Seite 37 von 94
Datenbankprogrammierung ohne Data Control
Arbeiten mit Datenbanken
Allgemein
Datenbanken zu programmieren ist zwar wie unter Punkt 2.7. Data Control be-
schrieben recht einfach zu bewerkstelligen, allerdings ist die dortige Vorge-
hensweise ziemlich starr. Daher ist mit Visual Basic auch ein besserer und
flexiblerer, aber auch aufwendigerer Datenbankumgang möglich.
Ähnlich wie beim Umgang mit dem Data Control, muß auch hier dem System
mitgeteilt werden, auf welches Datenbankformat zugegriffen werden soll. Dies
geschieht beim immer nötigen ersten Schritt, dem Öffnen der gewünschten Daten-
bank. Dazu kommt, daß auch alle Tabellen, mit denen gearbeitet werden soll,
geöffnet werden müssen. Es können dann verschiedene Indizes zugewiesen
werden, verschiedene Abfragen können angewandt und es kann in indizierten
Tabellen schnell nach bestimmten Einträgen gesucht werden. Auch das Einfügen,
Ändern und Löschen von Datensätzen ist natürlich möglich, aber all das muß
Schritt für Schritt programmiert werden. Diese Art der Datenbankpro-
grammierung ist also sicherlich komplexer und aufwendiger als die mit dem Data
Control.
Bedeutung:
dbname Hier muß der Dateiname einer vorhandenen Datenbank
eingetragen werden. Der Parameter entspricht der
"DatabaseName"-Eigenschaft des Data Controls, bei dBase-
Datenbanken muß also ebenfalls nur ein Verzeichnis
angegeben werden.
5
a.o.O. Dr. Pia Maslo, Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für Windows, S. 732
Seite 38 von 94
exclusiv Falls dieser Wert True ist, kann die Datenbank nur von einem
Benutzer geöffnet werden, falls False, von mehreren. Default:
False.
readonly Wird dieser Parameter True gesetzt, kann die Datenbank vom
Benutzer nur gelesen werden, es können also keine
Änderungen vorgenommen werden. Default: False.
connect Dieser Parameter entspricht der "Connect"-Eigenschaft des
Data Control, hier muß für Access-Datenbanken nichts und
für dBase "dBase IV;" eingetragen werden.
Beim Öffnen muß nun die gewünschte Datenbank über den "OpenDatabase"-
Befehl einer "Database"-Variablen zugewiesen werden, die zuvor vereinbart
wurde.
Beispiel:
Öffnen einer Access-Datenbank:
Beispiel:
Öffnen einer dBase-Datenbank:
Wieder wird zuerst die Variable vereinbart und dann die Datenbank geöffnet,
wobei hier für "dbname" das Verzeichnis mit den entsprechenden dBase-Dateien
angegeben wird. Der "Connect"-Parameter ist hier zwingend erforderlich, damit
das System den richtigen ODBC-Treiber verwenden kann.
Nach dem Arbeiten mit einer Datenbank muß diese wieder geschlossen werden,
um etwaige Datenverluste zu vermeiden. Dies geschieht mit der "Close"-Methode
des "Database"-Objekts.
datenbank.Close
Close
Wie oben schon kurz beschrieben, ist die "Close"-Methode zum Schließen
einer Datenbank nötig.
CreateDynaset
Diese Methode dient der Erstellung eines Dynaset aus einer oder mehreren
Tabellen einer Datenbank. Da dies meistens mit der Verwendung einer Abfrage
verbunden ist, genaueres dazu unter dem Punkt 3.3. Arbeiten mit Abfragen.
CreateQueryDef
Mit dieser Methode lassen sich neue "QueryDef"-Objekte definieren, die dann
in einer Datenbank abgespeichert werden können. Näheres dazu auch unter
dem Punkt 3.3. Arbeiten mit Abfragen.
ListTables
Damit läßt sich ein Snapshot erstellen, in dem als Datensätze alle Tabellen und
Abfragen einer Datenbank aufgeführt sind. Näheres dazu unter dem Punkt 3.2.
Arbeiten mit Tabellen.
OpenTable
Diese Methode dient dem Öffnen von Tabellen in Datenbanken. Genaueres
unter dem Punkt 3.2. Arbeiten mit Tabellen.
Bedeutung:
TableObject eine Objektvariable vom Typ Table
DbObject eine Instanz des "Database"-Objekts, die eine offene
Datenbank repräsentiert
TableName der Name einer vorhandenen Tabelle in der Datenbank
Beispiel:
Dim db As Database
Dim tb As Table
Set db = OpenDatabase("c:\access\vers.mdb")
Set tb = db.OpenTable ("Anschriften")
Seite 40 von 94
Es müssen also zuerst Variablen sowohl für das "Table"- als auch für das
"DataBase"-Objekt vereinbart werden, und die Datenbank muß geöffnet sein.
Nach dem "OpenTable"-Aufruf kann nun mit der Tabelle gearbeitet werden, falls
in der Datenbank "vers.mdb" eine Tabelle mit dem Namen "Anschriften" vor-
handen ist.
Ebenso wie das "Database"-Objekt verfügt das "Table"-Objekt über eine "Close"-
Methode. Das Schließen einer Tabelle sieht also folgendermaßen aus:
tb.Close
Dabei muß "tb" wieder eine vorher deklarierte Objektvariable vom "Table"-Typ
sein, und die angesprochene Tabelle muß geöffnet sein.
Es empfiehlt sich vor dem Schließen einer Datenbank alle offenen Recordsets
(also auch Tabellen) zu schließen, um mögliche Datenverluste zu vermeiden.
Um zu demonstrieren, wie man die Datensätze einer offene Tabelle der Reihe
nach durchgeht, sollen die Datensätze aus der Tabelle "Publisher Comments" der
Visual Basic Beispieldatenbank "biblio.mdb" in einer Liste ausgegeben werden.
Legen Sie ein Formular mit einer Liste und einem "Ende"-Schalter an. Danach
schreiben Sie in die "Load"-Ereignisprozedur des Formulars bitte folgenden
Quelltext:
Seite 41 von 94
1 Sub Form_Load ()
2 Dim db As Database
3 Dim tb As Table
4 Dim zeile As String
5
6 Set db = OpenDatabase("c:\vb\biblio.mdb")
7 Set tb = db.OpenTable("Publisher Comments")
8
9 tb.MoveFirst
10 Do While Not tb.EOF
11 zeile = tb("PubID") + ", " + tb("Publisher")
12 List1.AddItem zeile
13 tb.MoveNext
14 Loop
15
16 tb.Close
17 db.Close
18 End Sub
Oben werden die "Database"- (2) und die "Table"-Variable (3) zuerst vereinbart,
dazu die String-Variable "zeile" (4), die jeweils eine Zeile in der Liste darstellen
soll.
Nach dem Öffnen der Datenbank (6) und der Tabelle (7) wird der Datensatzzeiger
auf den ersten Datensatz bewegt (9), nur zur Demonstration, da das ja in diesem
Fall unnötig ist, weil nach dem Öffnen der Tabelle ohnehin der erste Datensatz
der aktuelle ist. Hernach wird eine Schleife (10-14) solange durchlaufen, bis der
Datensatzzeiger auf den letzten Datensatz gerichtet ist (also 'tb.EOF = True').
In der Schleife wird jeweils "zeile" mit den beiden Feldern "PubId" und
"Publisher" der Tabelle belegt (11) und in die Liste eingefügt (12).
Als nächstes folgt die wichtige Anweisung 'tb.MoveNext' (13), welche den Daten-
satzzeiger auf den nächsten Datensatz bewegt. Vergißt man diesen Befehl, verläßt
das Programm die Schleife nicht mehr, da 'tb.EOF' niemals True wird!
Zum Schluß muß dann nur noch die Tabelle (16) und die Datenbank (17) ge-
schlossen werden.
Das Formular des kleinen Programms sieht zur Laufzeit dann ungefähr wie in
Abbildung 30 dargestellt aus:
Seite 42 von 94
Abb. 30. Das Formular zum Beispiel "Durchgehen einer Tabelle"
Um etwa einen neuen Index über das Feld "Publisher" für die Tabelle "Publisher
Comments" der Datenbank "biblio.mdb" anzulegen, sind folgende drei Schritte
nötig:
❑ Als erstes muß eine neue Instanz des "Index"-Objekts angelegt werden. Dies
geschieht beim Deklarieren der Variablen:
ind.Name = "PublisherIndex"
ind.Fields = "Publisher"
Dazu gibt es noch die "Unique"- und die "Primary"-Eigenschaft. Beide können
nur beim Neuanlegen von Indexen gesetzt werden.
Ist "unique" True dürfen sich Schlüsselbegriffe in einem Index nicht
wiederholen, andernfalls schon.
Ist "primary" True, handelt es sich um den Primärschlüssel der Tabelle. Es kann
jeweils nur ein Index einer Tabelle der Primärindex sein.
Seite 43 von 94
❑ Zuletzt muß der neue Index noch in die "Indexes"-Collection des "TableDefs"-
Objekts der Tabelle aufgenommen werden. Dazu dient die "Append"-Methode
der "Indexes"-Collection:
Mit dieser Anweisung können auch bei der Arbeit mit dBase-Dateien Indizes
angelegt werden. Bei 'Connect = "dBase IV;"' wird eine "*.MDX"-Datei ange-
legt, bei 'Connect = "dBase III;"' eine "*.NDX"-Datei und dazu eine "*.INF"-
Datei, welche eine Art "INI"-Datei ist, in die alle Index-Dateinamen eingetra-
gen werden.
Wenn einmal eine "*.MDX"-Datei oder "*.NDX"-Dateien vorhanden sind,
unterscheidet Visual Basic übrigens nicht mehr zwischen "dBase III;" und
"dBase IV;", die verschiedenen Indizes werden immer erkannt.
Wegen der Verwendung von "*.INF"-Dateien durch Visual Basic ergibt sich
allerdings ein Problem mit vorhandenen "dBase III"-Datenbanken. Visual
Basic ermittelt nämlich die zu einer Datenbank gehörigen "*.NDX"-Dateien
nur aus der zugehörigen "*.INF"-Datei, welche aber bei mit dBase erstellten
Datenbanken nicht existent ist. Um also bei einer bestehenden "dBase III"-
Datenbank mit schon vorhandenen "*.NDX"-Dateien unter Visual Basic
arbeiten zu können, muß eine "*.INF"-Datei angelegt werden. Diese trägt
immer den Namen der "*.DBF"-Datei.
Soll zum Beispiel eine "dBase III"-Datei "person.dbf" mit den Index-Dateien
"name.ndx" und "vorname.ndx" bearbeitet werden, muß im selben Verzeichnis
eine Text-Datei (am besten mit dem Windows-Editor aus der "Zubehör"-
Programmgruppe) namens "person.inf" folgenden Inhalts angelegt werden:
[dbase]
NDX1=Name.NDX
NDX2=Vorname.NDX
Nach Erstellung dieser Datei kann mit den Indizes "Name" und "Vorname"
gearbeitet werden, unabhängig davon, ob für "Connect" "dBase III;" oder
"dBase IV;" gesetzt wurde. Mit INF-Dateien können allerdings nur Indizes
berücksichtigt werden, nicht dBase-Abfragen. Näheres dazu aber unter Punkt
3.3. Arbeiten mit Abfragen.
tb.Index = "PublisherIndex"
Dabei muß "tb" eine zuvor deklarierte "Table"-Variable sein und eine offene
Tabelle repräsentieren. Der Ausdruck zwischen den Anführungszeichen muß
Seite 44 von 94
der Name eines existierenden Indexes dieser Tabelle sein. Sofort nach Aufruf
dieser Anweisung wird der Index aktiv, die zugehörige Tabelle liegt ab diesem
Zeitpunkt in der mit dem Index definierten Sortierung vor.
Über das (die) im Index befindliche(n) Feld(er) kann nun schnell nach Daten-
sätzen gesucht werden.
Soll in der "Publisher Comments"-Tabelle der Datenbank "biblio.mdb" nach
dem Publisher "SYBEX" gesucht werden, muß folgende Anweisung aufgeru-
fen werden:
Alle diese Methoden sind auch für das "Dynaset"-Objekt definiert und können
auch bei Instanzen dieses Objekts angewandt werden.
Seite 45 von 94
Beispiel
Zur Demonstration der vielen besprochenen Funktionen soll nun das Beispiel zum
Durchgehen einer Tabelle erweiter werden. Es sollen neue Datensätze in die Liste
aufgenommen, und der ausgewählte Datensatz soll geändert oder gelöscht werden
können. Dazu soll auch zwischen den beiden Indexen der Tabelle hin- und
hergeschaltet und nach einzelnen Datensätzen gesucht werden können.
Sie müssen also wie unter 3.2.3. Verwendung von Indizes beschrieben einen neuen
Index "PublisherIndex" für die Tabelle "Publisher Comments" angelegt haben,
sonst wird das folgende Beispielprogramm nicht fehlerfrei arbeiten.
Im "General"-Bereich des Quelltextes werden für die Datenbank und die Tabelle
die beiden Variablen "db" und "tb" deklariert, damit sie im gesamten Quelltext
zum Formular bekannt sind.
In Zeile 4 wird der Index "PrimaryKey" eingestellt, so daß die Tabelle nach dem
Feld "PubId" sortiert ist. Nun wird auf den letzten Datensatz gesprungen (5) und
die höchste "PubId" in der Variable "n" gespeichert. Damit kann die neue "PubId"
um eins größer vergeben werden (10), da diese dann sicher eindeutig ist. Würde
man eine schon vorhandene Nummer vergeben, würde das Programm mit einer
Fehlermeldung beendet, da "unique" bei Primärindexen True ist.
In Zeile 12 wird mit 'InputBox$' "Publisher" eingelesen. Wird in dem Eingabefen-
ster die "Cancel"-Taste angeklickt, wird ein leerer String zurückgegeben, deshalb
muß in Zeile 13 mit der Funktion "IsNull" abgefragt werden, ob eine Eingabe
erfolgte und OK angeklickt wurde.
Mit 'tb.Update' (14) wird der neue Datensatz übernommen und 'Liste_Neu' (15) ist
ein Unterprogramm, das weiter unten im Quelltext folgt und das die Liste
"ListTable" neu mit dem Inhalt der Tabelle füllt.
Im Folgenden nun der Quelltext des "Löschen"-Schalters. Hier wird der gerade in
der Liste ausgewählte Datensatz gelöscht.
1 Sub CommandDelete_Click ()
2 'Überprüfung, ob überhaupt ein Datensatz in der Liste ausgewählt ist
3 If ListTable.ListIndex = -1 Then
4 MsgBox "Sie müssen einen Datensatz in der Liste auswählen!", 48,
"Achtung"
5 Exit Sub
6 End If
Seite 47 von 94
7
8 'setzt Datensatzzeiger auf in der Liste ausgewählten Datensatz
9 Suche_Datensatz
10 'Sicherheits-Abfrage
11 If MsgBox("Wollen Sie den Datensatz '" + tb("PubId") + ", " + tb("Publisher")
+ " wirklich löschen?", 36, "Frage") = 6 Then
12 tb.Delete
13 End If
14 'Listenfeld aktualisieren
15 Liste_Neu
16 End Sub
Als erstes wird überprüft, ob ein Datensatz ausgewählt ist (3), falls nicht, wird das
Unterprogramm verlassen (5), da ja dann kein Datensatz gelöscht werden kann.
Hernach wird der Datensatzzeiger in Zeile 9 mit einem weiter unten aufgeführten
Unterprogramm auf den in der Liste ausgewählten Datensatz gesetzt. Dieser wird
dann nach einer Sicherheitsabfrage (11) gelöscht (12), und die Liste wird wieder
aktualisiert (15).
Nun folgt der Quelltext zur "Ändern"-Taste, womit der in der Liste angewählte
Datensatz geändert werden kann.
1 Sub CommandEdit_Click ()
2 'Überprüfen, ob ein Datensatz ausgewählt ist
3 If ListTable.ListIndex = -1 Then 'es ist also keiner ausgewählt
4 MsgBox "Sie müssen einen Datensatz in der Liste auswählen!", 48,
"Achtung"
5 Exit Sub
6 End If
7 'Datensatzzeiger auf in der Liste ausgewählten Satz setzen
8 Suche_Datensatz
9 'Datensatz ändern
10 tb.Edit
11 tb("Publisher") = InputBox$("Nehmen Sie für 'Publisher' die gewünschte
Änderung vor!" + Chr(13) + Chr(13) + "PubId: " + Str(tb("PubId")),
"Ändern", tb("Publisher"))
13 If Not IsNull(tb("Publisher")) Then 'es wurde also OK gedrückt
14 tb.Update
15 Liste_Neu
16 End If
17 End Sub
Zuerst wird wieder überprüft, ob ein Datensatz ausgewählt ist (3), dann der
Datensatzzeiger wieder auf den ausgewählten Datensatz gesetzt (8) und schließ-
lich kann in Zeile 11 "Publisher" geändert werden. Das 'Chr(13)' das an den Mel-
dungstext der Inputbox angehängt wird, bewirkt einfach einen Zeilenumbruch.
Seite 48 von 94
Der Ausdruck ' "Ändern" ' ist die Überschrift für das Fenster und 'tb("Publisher")'
wird als Default-Wert in das Textfeld der Inputbox geschrieben.
Nach Überprüfung, ob nicht die "Cancel"-Taste gedrückt wurde (13), wird die
Änderung übernommen (14) und die Liste aktualisiert (15).
Sub CommandIndex_Click ()
'jeweils anderen Index setzen
If tb.Index = "PrimaryKey" Then
tb.Index = "PublisherIndex"
Else
tb.Index = "PrimaryKey"
End If
'Listenfeld aktualisieren
Liste_Neu
End Sub
Falls der Index "PrimaryKey" gesetzt ist, wird der Index "PublisherIndex" gesetzt
und umgekehrt. Am Schluß wird noch die Liste aktualisiert, um die Änderung der
Sortierung auch anzuzeigen.
Nun der Quelltext für die "Suchen"-Taste, wo nach der Eingabe einer "PubId"
(falls Index "PrimaryKey") bzw. eines Publisher (falls Index "PublisherIndex")
der zugehörige Datensatz gesucht und ausgegeben wird.
1 Sub CommandSeek_Click ()
2 'zu suchenden Datensatz abfragen
3 SuchWort = InputBox("Geben Sie den Ausdruck zum Suchen ein!",
"Suche")
4 'falls nötig Eingabe in Zahl umwandeln
5 If tb.Index = "PrimaryKey" Then SuchWort = Val(SuchWort)
6 'Datensatz suchen
7 tb.Seek "=", SuchWort
8 If tb.NoMatch Then
9 'kein Datensatz gefunden
10 MsgBox "Leider keinen Datensatz '" + SuchWort + "' gefunden!", 48,
"Hinweis"
11 Else
12 'Datensatz gefunden
13 MsgBox "Gesuchter Datensatz: " + Str(tb("PubId")) + ", " + tb("Publisher")
+ "!",48, "Ergebnis"
14 End If
15 End Sub
Seite 49 von 94
Zuerst wird ein Suchausdruck abgefragt (3), der, falls eine "PubId" eingegeben
wurde, in eine Zahl umgewandelt werden muß (5), da "PubId" ein "Longinteger"-
Feld ist und "InputBox" einen String zurückgibt. Danach wird nach dem
Suchausdruck gesucht (7) und überprüft, ob ein Datensatz gefunden wurde (8).
Falls nein, erfolgt eine entsprechende Meldung (10), falls ja, wird der Datensatz
in einem Meldungsfenster angezeigt (13).
Für die "Ende"-Taste wird der übliche Quelltext 'End' eingegeben.
Sub CommandEnd_Click ()
'Programm beenden
End
End Sub
Es werden die Datenbank und die Tabelle geöffnet, ein Index gesetzt und das
Listenfeld mit den Datensätzen aus der Tabelle gefüllt.
In der "Unload"-Prozedur des Formulars werden die Tabelle und die Datenbank
wieder geschlossen, da dieses Ereignis beim Programmende eintritt.
Sub Form_Unload (Cancel As Integer)
'Tabelle und Datenbank schließen
tb.Close
db.Close
End Sub
Seite 50 von 94
Abb. 32. Das Fenster zum Anlegen neuer Prozeduren
Geben Sie bei 'Name:' wie in der Abbildung zu sehen "List_Neu" ein. Nach dem
Drücken von "OK" können Sie untenstehenden Quelltext eingeben.
1 Sub Liste_Neu ()
2 'Listenfeld mit den Datensätzen aktualisieren
3 Dim satz As String
4
5 'Listenfeld leeren
6 ListTable.Clear
7 'Datensätze in Listenfeld eintragen
8 tb.MoveFirst
9 Do While Not tb.EOF
10 satz = tb("PubID") + ", " + tb("Publisher")
11 Form1.ListTable.AddItem satz
12 tb.MoveNext
13 Loop
14 'aktuellen Index ausgeben
15 LabelIndex.Caption = tb.Index
16 End Sub
Zuerst wird das Listenfeld geleert (6), dann der Datensatzzeiger auf den ersten
Datensatz der Tabelle gesetzt (8). Dann wird eine Schleife durchlaufen (9-13), bis
das Ende der Tabelle erreicht ist. In der Schleife werden die Felder "PubId" und
"Publisher" vom aktuellen Datensatz in die Variable "satz" geschrieben (10) und
"satz" in die Liste eingefügt (11). Schließlich wird in der Schleife noch der Daten-
satzzeiger auf den nächsten Datensatz bewegt (12).
Als letztes wird in Zeile 15 der Name des aktuelle Indexes im "LabelIndex" aus-
gegeben.
1 Sub Suche_Datensatz ()
2 'Datensatzzeiger auf den Datensatz setzen,
3 'der gerade im Listenfeld ausgewählt ist
4
5 'PubId des ausgewählten Datensatzes ermitteln
6 s$ = ""
7 i=0
8 Do While zeichen <> ","
Seite 51 von 94
9 i=i+1
10 zeichen = Mid$(ListTable.List(ListTable.ListIndex), i, 1)
11 If zeichen <> "," Then s$ = s$ + zeichen
12 Loop
13
14 'richtigen Index setzen und Datensatz suchen
15 tb.Index = "PrimaryKey"
16 tb.Seek "=", Val(s$)
17 End Sub
Zuerst muß aus der, in der Liste ausgewählten Zeile, die "PubId" des gewünschten
Datensatzes ermittelt werden, um diesen über die Nummer suchen zu können.
Dazu wird in der Schleife von Zeile 8 bis 12 der ausgewählte Eintrag aus dem
Listenfeld Buchstabe für Buchstabe (10) in die Variable "s$" übertragen (11),
solange bis ein Komma gelesen wird, was heißt, daß der Inhalt des Feldes "PubId"
zu Ende ist und nun der Inhalt von "Publisher" folgt.
Die Funktion "Mid$" liefert einen Teilstring eines anderen Strings zurück und hat
die Syntax:
stringexpr der String aus dem ein Teilstring gebildet werden soll
start Zeichenposition in stringexpr, ab der ein Teilstring genommen
werden soll
length Anzahl der Zeichen die zurückgeliefert werden sollen. Wird
length weggelassen, wird der ganze Rest des Strings ab der
Position start geliefert.
In Zeile 10 wird also mit Hilfe der Funktion "Mid$" jeweils vom angewählten
Listeneintrag (also Array der Einträge 'ListTable.List', Eintrag an Stelle
'ListTable.ListIndex') das Zeichen an Stelle "i" der Variable "Zeichen" zugewiesen.
"i" hat beim Betreten der Schleife den Wert Null und wird bei jedem Schleifen-
durchlauf um eins erhöht.
Zum Schluß wird noch der richtige Index zum Suchen nach einer "PubId" gesetzt
(15) und der Datensatz mit "seek" gesucht (16), wonach der Datensatzzeiger ja
automatisch auf den gefundenen Datensatz gesetzt ist.
Seite 52 von 94
Abfragen definieren
Eine Abfrage in Visual Basic wird wie schon erwähnt als SQL-Statement for-
muliert und als QueryDef in einer Datenbank gespeichert, so daß sie immer wie-
der angewandt werden kann.
Dem Anlegen einer neuen Abfrage dient die "CreateQueryDef"-Methode des Da-
tenbankobjektes. Diese Methode hat folgende Syntax:
Um etwa aus der Tabelle "Authors" der Datenbank "biblio.mdb" alle Autoren mit
"Au_Id" kleiner fünfzehn zu erhalten, ist folgendes SQL-Statement nötig:
Eine entsprechende Abfrage speichert man in der Datenbank mit folgenden Zei-
len:
Dim qd As QueryDef
Dim db As Database
Set db = OpenDatabase ("c:\vb\biblio.mdb")
sql$ = "Select * from authors where Au_Id between 0 and 15 order by Author"
Set qd = db.CreateQueryDef("Au_Id_15", sql$)
db.Close
Das SQL-Statement ist also ein einfacher String, der bei Aufruf der
"CreateQueryDef"-Methode übergeben wird.
Obige Programmzeilen dürfen natürlich nur einmal ausgeführt werden. Bei einem
zweiten Aufruf wäre die Abfrage "Au_Id_15" schon vorhanden und das Pro-
gramm bräche beim Aufruf von "CreateQueryDef" mit einer Fehlermeldung ab.
Seite 53 von 94
Bei der Arbeit mit einer dBase-Datenbank, kann keine solche Abfrage angelegt
werden. Visual Basic bricht hier beim Aufruf von "CreateQueryDef" mit der
Fehlermeldung "Feature not available" ab.
Abfragen anwenden
Wie wendet man nun eine in einer Datenbank bestehende Abfrage an?
Dazu muß die gewünschte Abfrage zuerst mit der "OpenQueryDef"-Methode des
Datenbankobjektes geöffnet werden. Diese Methode hat folgende Syntax:
Set querydef = database.OpenQueryDef(name)
Set qd = db.OpenQueryDef("Au_Id_15")
Set MySet = qd.CreateSnapshot()
Dabei müssen die Variablen "qd" und "MySet" zuvor natürlich wie folgt verein-
bart worden sein:
Dim qd As QueryDef
Dim MySet As Snapshot
Beispiel
Als Beispiel sollen die standardmäßig in der Datenbank "biblio.mdb" gespeicher-
ten Abfragen in einer Liste angezeigt werden und nach Auswahl einer der Abfra-
Seite 54 von 94
gen soll diese angewandt und das Ergebnis in einer weiteren Liste am Bildschirm
ausgegeben werden.
Zum Ermitteln der Tabellen und Abfragen einer Datenbank dient die
"ListTables"-Methode des "DataBase"-Objektes. Diese Methode liefert einen
Snapshot mit einem Datensatz je Tabelle oder Abfrage und folgenden Feldern:
Das Ergebnis einer Abfrage liegt wie oben beschrieben in einem Snapshot (oder
wahlweise auch in einem Dynaset) vor. Dieser Snapshot hat natürlich abhängig
vom SQL-Statement der Abfrage und den zugrundeliegenden Tabellen verschie-
dene Felder, welche sich mit der "ListFields"-Methode des "Snapshot"-Objektes
ermitteln lassen. Diese Methode liefert wiederum einen Snapshot, mit einem Da-
tensatz je Feld, welcher folgende Felder hat:
Für das Beispiel sind aber, wie Sie im untenstehenden Quelltext sehen werden,
nur das "Name"- und das "Type"-Feld von Belang.
Legen Sie zuerst wie üblich ein neues Projekt an. Im Entwurfsformular sind zwei
Listenfelder, zwei Bezeichnungfelder und eine "Ende"-Taste nötig. In Abbildung
33 ist das Bild des Formulars während der Programmlaufzeit zu sehen.
Seite 55 von 94
Abb. 33. Das Formular für das Beispiel zu Abfragen
Die Abfrage-Ergebnisliste hat den Namen "ErgebnisListe", die Liste mit den
vorhandenen Abfragen heißt "AbfragenListe", das Bezeichnungsfeld, in dem das
SQL-Statement ausgegeben wird "SQLLabel" und die "Ende"-Taste
"EndCommand".
'Variablendeklarationen:
Als erstes muß dann beim "Load"-Ereignis des Formulars untenstehender Quell-
text abgearbeitet werden, um die Datenbank zu öffnen, und die vorhandenen
Abfragen in die Abfragen-Liste einzutragen.
1 Sub Form_Load ()
2 'Datenbank öffnen und Namen der Abfragen in AbfragenListe eintragen
3
4 Dim QSet As Snapshot 'Snapshot der Tabellen und Abfragen
5
6 Set db = OpenDatabase("biblio.mdb")
7
8 'Tabellen und Abfragen der Datenbank ermitteln
9 Set QSet = db.ListTables()
Seite 56 von 94
10 'Snapshot durchgehen und Abfragen in AbfragenListe eintragen
11 QSet.MoveFirst
12 Do While Not QSet.EOF
13 If QSet("TableType") = 5 Then
14 'es handelt sich um eine Abfrage
15 AbfragenListe.AddItem QSet("Name")
16 End If
17 QSet.MoveNext
18 Loop
19
20 End Sub
Zuerst wird also in Zeile 4 eine Objektvariable vom Typ "Snapshot" für die Tabel-
len und Abfragen der Datenbank vereinbart. In Zeile 6 wird dann die Datenbank
geöffnet und danach der Snapshot mit den Tabellen und Abfragen erstellt (9).
Dieser Snapshot wird dann in einer Schleife (12-18) - wie wir es von der Tabel-
lenbearbeitung her kennen - in die Liste "AbfragenListe" eingetragen (15). In
Zeile 13 wird der Typ des jeweiligen Snapshot-Eintrages abgefragt, um die
Abfragen ('Typ = 5') herauszufiltern.
1 Sub AbfragenListe_Click ()
2 'Eine neue Abfrage wurde ausgewählt:
3 ' - diese öffnen
4 ' - das SQL-Statement ausgeben
5 ' - Abfrage anwenden
6
7 Dim WhatState As String 'Variable für gewünschten Staat
8
9 'Abfrage öffnen
10 Set qd = db.OpenQueryDef(AbfragenListe.List(AbfragenListe.ListIndex))
11 'SQL-Statement ausgeben
12 SQLLabel.Caption = qd.SQL
13
14 'Abfrage anwenden
15 If qd.Name = "By State" Then
16 'bei Abfrage 'By State' Staat ermitteln
17 'und entspr. SQL-Parameter setzen
18 WhatState = InputBox("Welchen Staat: ", "Frage", "WA")
19 qd![Enter State] = WhatState
20 End If
Seite 57 von 94
21 'Abfrage-Ergebnis ermitteln
22 Set ErgSet = qd.CreateSnapshot()
23 'Abfrage-Ergebnis(ErgSet) ausgeben
24 If ErgSet.RecordCount > 0 Then ErgebnisAusgeben
25 End Sub
Zuerst wird die in der Liste ausgewählte Abfrage geöffnet (10) und dann das SQL-
Statement im zugehörigen Bezeichnungsfeld ausgegeben (12).
In Zeile 15 folgt dann eine Sonderbehandlung für die Abfrage "By State". Die
Besonderheit bei dieser Abfrage ist, daß im SQL-Statement ein Parameter enthal-
ten ist, der vor Aufruf der Abfrage angegeben werden muß. Daher wird in Zeile
18 dieser Parameter vom Benutzer abgefragt und in die Variable "WhatState"
eingelesen. Danach wird schließlich der Parameter des SQL-Statements (nämlich
"Enter State") mit dem Wert der Variablen "WhatState" belegt (19).
In Zeile 22 wird für alle Abfragen auf gleiche Weise der Snapshot mit dem Ab-
frageergebnis erstellt. Dieses wird dann mit Hilfe des Unterprogramms
"ErgebnisAusgeben" in die "ErgebnisListe" eingetragen (24), falls der Ergebnis-
Snapshot wenigstens einen Datensatz enthält, also 'ErgSet.RecordCount > 0' gilt.
1 Sub ErgebnisAusgeben ()
2 'Ausgabe des Abfrageergebnis-Snapshot in ErgebnisListe
3 Dim FieldsSet As Snapshot
4
5 ErgebnisListe.Clear
6
7 'Felder von ErgSet ermitteln
8 Set FieldsSet = ErgSet.ListFields()
9
10 'ErgSet durchgehen
11 ErgSet.MoveFirst
12 Do While Not ErgSet.EOF
13 Zeile$ = ""
14 'die Felder von ErgSet, also FieldsSet durchgehen
15 FieldsSet.MoveFirst
16 Do While Not FieldsSet.EOF
17 'Feldinhalt an Zeile$ anfügen
18 If FieldsSet("Type") >= 10 And FieldsSet("Type") <= 12 Then
19 'als String vorliegende Typen (Text, Long Binary, Memo)
20 Zeile$ = Zeile$ + ErgSet(FieldsSet("Name")) + ", "
21 Else
22 'als Zahlen vorliegende Typen
23 Zeile$ = Zeile$ + Str(ErgSet(FieldsSet("Name"))) + ", "
24 End If
Seite 58 von 94
25 FieldsSet.MoveNext
26 Loop
27 'Zeile (=Datensatz aus ErgSet) in ErgebnisListe anfügen
28 ErgebnisListe.AddItem Zeile$
29
30 ErgSet.MoveNext
31 Loop
32 End Sub
Da nicht von Anfang an bekannt ist, welche Felder im Snapshot "ErgSet" enthal-
ten sind, müssen diese erst ermittelt werden (8). Die Namen der Felder sind dar-
aufhin ebenfalls in einem Snapshot gespeichert, nämlich in "FieldsSet".
Um nun die Datensätze in "ErgSet" in die Ergebnisliste einzutragen, wird wie
gewöhnlich eine Schleife durchlaufen (12-31), der jeweilige Datensatz in die Liste
eingetragen (28) und zum nächsten Datensatz weitergeschaltet (30). Da nun die
Feldnamen der Datensatzfelder ebenfalls in einem Snapshot vorliegen, ist eine
weitere Schleife (16-26) innerhalb der vorherigen nötig, in der "FieldsSet" durch-
gegangen wird. Für jeden Datensatz aus "ErgSet" werden alle Feldnamen aus
"FieldsSet" abgearbeitet und die Feldinhalte an den String "satz$" angehängt.
Mit 'ErgSet(FieldsSet("Name"))' wird auf den Feldinhalt zugegriffen.
'FieldsSet("Name")' beinhaltet ja den jeweiligen Feldnamen von "ErgSet", muß al-
so in die Klammer hinter "ErgSet" eingetragen werden, um den Feldinhalt zu er-
halten.
Die "If"-Unterscheidung (18) ist nötig, da der jeweilige Feldinhalt entweder aus
Zeichen besteht oder aus Zahlen. Falls es Zahlen sind muß dieser beim Anhängen
an den String "satz$" mit Hilfe der Funktion "str()" in Zeichen umgewandelt
werden (23), ansonsten nicht (20).
Nach Verlassen der äußeren Schleife befindet sich das Abfrageergebnis dann in
der Ergebnisliste.
Als letztes ist noch der übliche Quellcode für die "Ende"-Taste nötig:
Sub EndCommand_Click ()
'Programm beenden
End
End Sub
1 Sub Berechnen()
2 Dim db As Database 'Datenbank-Variable
3 Dim tb As Table 'Tabellen-Variable
4 Dim SummeJahr As Long 'Variable für die aufsummierten Jahre
5 Dim Durchschnitt As Integer 'Variable für das Ergebnis
6
7 'Datenbank und Tabelle öffnen
8 Set db = OpenDatabase("biblio.mdb")
9 Set tb = db.OpenTable("Titles")
10
11 'Tabelle Datensatz für Datensatz durchgehen
12 tb.MoveFirst
13 Do While Not tb.EOF
14 'Jahre aufsummieren
15 SummeJahr = SummeJahr + tb("Year Published")
16 tb.MoveNext
17 Loop
18
19 'Durchschnitt errechnen; tb.RecordCount ist die Anzahl der Datensätze in tb
20 Durchschnitt = Int(SummeJahr / tb.RecordCount)
21
22 'Tabelle und Datenbank schließen
23 tb.Close
24 db.Close
25 End Sub
Es werden also in der Schleife (13-17) die Jahre aufsummiert und hernach durch
die Anzahl der Datensätze geteilt (20). Die Funktion "Int" sorgt bei der
Ergebnisberechnung dafür, daß sich eine ganze Zahl ergibt.
Wenn auch nicht konkret für Berechnungen in Tabellen von Datenbanken, so
stellt Visual Basic doch für Standardberechnungen verschiedene mathematische
Seite 60 von 94
Funktionen zur Verfügung, welche untenstehend mit kurzen Erklärungen
versehen aufgeführt sind:
Wie Sie sehen sind diese Funktionen bei der Datenbankbearbeitung wohl meist
nicht nötig, notwendige Berechnungsfunktionen für Datenbanken bietet aber
SQL. Diese Funktionen können daher bei der Erstellung von Abfragen verwendet
werden. Weiteres dazu entnehmen Sie bitte der Visual Basic-Hilfe zu SQL oder
weiterführender Literatur.
Gruppenbearbeitung
Als Beispiel zur Gruppenbearbeitung sollen zu den Publisher-Namen aus der
Tabelle "Publishers" die zugehörigen Titel aus der Tabelle "Titles" gesucht wer-
den. Das Ergebnis der Bearbeitung der beiden Tabellen soll in einer Liste am
Bildschirm ausgegeben werden, so daß das Programm zur Laufzeit wie in
Abbildung 34 dargestellt aussehen soll:
Seite 61 von 94
Abb. 34. Formular zum Beispiel über Gruppenbearbeitung
Das Vorgehen im Quelltext ist folgendes, daß die Tabelle "Publishers" durchge-
gangen wird und zu dem jeweiligen Publisher dann die zugehörigen Titel über die
"PubId" aufgelistet werden.
1 Sub Form_Load ()
2 Dim db As Database 'Datenbankvariable
3 Dim tbPub As Table 'Variable für Tabelle 'Publishers'
4 Dim tbTit As Table 'Variable für Tabelle 'Titles'
7
6 'Datenbank und Tabellen öffnen
8 Set db = OpenDatabase("c:\vb\biblio.mdb")
9 Set tbPub = db.OpenTable("Publishers")
10 Set tbTit = db.OpenTable("Titles")
11
12 'Indizes für die Tabellen setzen
13 tbPub.Index = "PrimaryKey"
14 tbTit.Index = "PubId"
15
16 'Äußere Schleife: Durchgehen Tabelle 'Publishers'
17 tbPub.MoveFirst
18 Do While Not tbPub.EOF
19 PubId = tbPub("PubId") 'aktuelle PubId "merken"
20 tbTit.Seek "=", PubId 'den ersten der zugehörigen Titel suchen
21 If Not tbTit.NoMatch Then 'es wurde ein zugehöriger Titel gefunden
Seite 62 von 94
22 List1.AddItem tbPub("Name") 'Publishernamen in Liste eintragen
23
24 'Innere Schleife: Durchgehen der Titel mit der aktuellen PubId
25 SchleifenEnde = False
26 Do While Not SchleifenEnde
27 List1.AddItem " " + tbTit("Title") 'Titel in Liste eintragen
28 tbTit.MoveNext
29 If tbTit.EOF Then 'Ende der Tabelle 'Titles' erreicht
30 SchleifenEnde = True 'Schleife abbrechen!
31 ElseIf PubId <> tbTit("PubId") Then ' Gruppenwechsel!
32 SchleifenEnde = True 'Schleife abbrechen!
33 End If
34 Loop
35
36 End If
37 tbPub.MoveNext
38 Loop
39 tbPub.Close
40 tbTit.Close
41 db.Close
42
43 End Sub
In einer äußeren Schleife (18-38) werden also die Datensätze der "Publishers"-
Tabelle durchgegangen. In Zeile 19 wird dabei jeweils die aktuelle Publisher-
Nummer aus "Publishers" in der Variablen "PubId" gespeichert. Daraufhin wird
nach dieser Nummer in der Tabelle "Titles" gesucht (20), wonach sich der
Datensatzzeiger auf dem ersten Titel mit der aktuellen PubId befindet, falls es
Titel mit dieser Nummer gibt. Falls nicht wird einfach auf den nächsten Publisher
weitergeschaltet (37). Ansonsten können nun in der inneren Schleife (26-34) diese
Titel der Reihe nach in "List1" eingetragen werden (27). Die innere Schleife wird
abgebrochen, wenn ein Titel mit anderer PubId auftritt (31) oder wenn das
Tabellenende von "Titles" erreicht ist (29). Nach Abbruch dieser Schleife wird
dann jeweils auf den nächsten Publisher geschaltet (37) bis das Ende der Tabelle
"Publishers" erreicht ist.
Warum findet nun in der inneren Schleife die Konstruktion mit der Variablen
"SchleifenEnde" Verwendung. Eleganter wäre es natürlich zu formulieren:
Das Problem dabei ist, daß Visual Basic (ab Version 2.0) beim Erreichen des
Tabellenendes von "tbTit" (also 'tbTit.EOF = True') nicht nach Überprüfung des
ersten Teiles des logischen Statements abbricht (wenn 'Not tbTit.EOF' schon falsch
ist, muß natürlich der ganze Ausdruck falsch sein, weil es sich ja um eine "And"-
Seite 63 von 94
Verknüpfung handelt), sondern auch noch den zweiten Teil abprüft. Da aber
schon das Ende der Tabelle "tbTit" erreicht ist, gibt es keinen aktuellen Datensatz
mehr, Visual Basic bricht also beim Zugriff 'tbTit("PubId")=PubId' mit einer
Fehlermeldung ab.
Eigenschaften:
FontBold True: Schrift fett, False: Schrift normal
FontItalic True: Schrift kursiv, False: Schrift normal
FontName Schriftart, in der gedruckt werden soll
FontSize Schriftgröße, in der gedruckt werden soll
Page gibt die Nummer der aktuellen Druckseite an
Methoden:
EndDoc beenden des Druckvorganges
NewPage Seitenvorschub am Drucker
Print Drucken von Strings
1 Sub Command2_Click ()
2 'Schrift einstellen
3 printer.FontName = "Arial"
4 printer.FontSize = 10
Seite 64 von 94
5 'Listeninhalt ausgeben
6 For i = 0 To List1.ListCount - 1
7 printer.Print List1.List(i)
8 Next i
9 'Drucken anstoßen
10 printer.EndDoc
11 End Sub
Das eigentliche Drucken erfolgt also in Zeile 7 mit der Methode "Print" des
"Printer"-Objektes. Die Methode hat folgende Syntax:
Dabei kann statt 'Spc(n)' auch 'Tab(n)' stehen und statt ';' am Ende auch ','.
Bedeutung:
Spc(n) Einfügen von n Leerzeichen
Tab(n) Einfügen von n Tabulatoren
expressionlist Liste von durch Leerzeichen oder Kommata getrennten
Stringausdrücken
; Zeilenumbruch (auch bei Weglassen von "," und ";")
, kein Zeilenumbruch
Nachdem alle Druckzeilen mit "Print" an den Druckmanager von Windows ge-
schickt wurden, muß noch die Methode "EndDoc" des Printerobjektes aufgerufen
werden, da dann erst der Ausdruck wirklich beginnt.
Zum Schluß sei noch auf "Crystal Reports for Visual Basic" verwiesen. Dies ist
ein Zusatzprogramm zur professionellen Version von Visual Basic, das dem Er-
stellen von Datenbankreports dient. Damit können auf komfortable Weise Listen
und Ausdrucke zu Datenbank-Tabellen mit professionellem Layout erstellt
werden. Näheres entnehmen Sie bitte der Hilfe-Datei zu "Crystal Report" oder
weiterführender Literatur.
Seite 65 von 94
Beurteilung der Arbeit mit Access- und dBase-Dateien unter Visual
Basic
Das Zusammenspiel von Visual Basic mit Access-Datenbanken ist also fast per-
fekt, einziger Wermutstropfen mag die recht eingeschränkte Geschwindigkeit bei
der Anwendung von Abfragen auf größere Datenbestände sein, was bei langsa-
meren Rechnern zu einem Geduldsspiel werden kann. Ansonsten gibt es bei der
Bearbeitung von Access-Datenbanken mit Visual Basic keinerlei Probleme, wie
es ja zu erwarten war.
Seite 66 von 94
Visual Basic und dBase-Datenbanken
Anders sieht es beim Zugriff auf dBase-Dateien aus. Hier haben sich doch gewisse
Schwächen von Visual Basic aufgetan und einige Probleme traten zu Tage.
Unproblematisch ist es, mit dem Data Control auf dBase-Dateien zuzugreifen.
Nach richtiger Belegung der "Connect"- und der "DatabaseName"-Eigenschaft ist
für den Benutzer eines entsprechenden Visual Basic-Programms nicht mehr
festzustellen, von welchem Typ die zugrundeliegende Tabelle ist. Hierbei hält
Visual Basic 3.0 also, was es verspricht, ebenso beim Bearbeiten von dBase-Ta-
bellen ohne Data Control. Beim Öffnen und Schließen von Tabellen, und beim
Ändern, Einfügen und Löschen von Datensätzen arbeitete Visual Basic einwand-
frei. Außerdem wurden die mit Visual Basic in den Dateien vorgenommenen
Änderungen hernach ohne Problem von dBase wieder übernommen.
Probleme ergaben sich erst bei der Arbeit mit Indizes. Ohne Einschränkungen ist
diese möglich, wenn eine "*.MDX"-Datei aus dBase IV vorliegt, dabei ist es al-
lerdings seltsamerweise belanglos, ob für die "Connect"-Eigenschaft "dBase III;"
oder "dBase IV;" gesetzt wird. Eigentlich müßte diese Index-Art ja mit "dBase
III;" nicht erkannt werden, da für dBase III ja nur "*.NDX"-Dateien möglich
waren.
Diese fehlende Unterscheidung kann man Visual Basic allerdings nicht einmal als
Schwäche ankreiden, eher im Gegenteil. Eine gewisse Einschränkung ist aber
beim Umgang mit "*.NDX" aus dBase III gegeben, denn Visual Basic erkennt -
wieder unabhängig von der Einstellung "dBase III" oder "dBase IV" - keinen
dieser Indizes, wenn man sie mit einer bestehenden Datenbank übernehmen will.
Ohne die Erstellung einer zusätzlichen Datei, einer INF-Datei, kann mit
"*.NDX"-Dateien leider nicht gearbeitet werden.
Das Erstellen von dBase-Indizes ist dagegen wiederum problemlos, wobei hier
durchaus zwischen dBase III und dBase IV unterschieden wird. Bei der Einstel-
lung "dBase III;" werden "*.NDX"-Dateien angelegt und - für den Benutzer un-
bemerkt - die leidige INF-Datei.
Bemerkenswert dazu ist vielleicht auch noch, daß bei dem Versuch eine schon
bestehende "*.NDX"-Datei anzulegen, die wegen Fehlens einer INF-Datei nicht
erkannt wird, Visual Basic sich dennoch mit der Fehlermeldung "Index already
exists." weigert einen neuen Index anzulegen.
Diese von dBase abweichende Behandlung der "*.NDX"-Dateien aus dBase III
durch Visual Basic ist wohl eine Schwäche, mit der man leben kann. Viel schwe-
rer wiegt dagegen, daß Visual Basic sich standhaft weigert mit irgendwelchen
Abfragen zu arbeiten, die mit dBase erstellt wurden. Sowohl die "*.QBE"- und
"*.QBO"-Dateien der dBase-Standardabfragen als auch Abfragen von dBase-
SQL-Datenbanken werden ignoriert. Dies kann eine schwere Einschränkung
darstellen, wenn Datenbanken mit vielen, komplexen Abfragen in Visual Basic
übernommen werden sollen.
Lösbar ist das Problem relativ leicht bei dBase-SQL-Datenbanken, da hier ja die
SQL-Statements der Abfragen aus dem Feld "SQLTEXT" der Datei
Seite 67 von 94
"sysviews.dbf" entnommen werden kann. Dieser Vorgang ließe sich ja relativ
leicht durch ein Visual Basic-Programm automatisieren. Da aber die meisten Be-
nutzer mit den Standard-Abfragen arbeiteten, ist die fehlende Berücksichtigung
von diesen Abfragen eine massive Einschränkung der Bearbeitungsmöglichkeiten
bestehender dBase-Dateien durch Visual Basic.
Zusammenfassung
Daß die Arbeit mit Datenbanken beider Programme möglich sein soll, hat ja
Microsoft bei der Ankündigung der Version 3.0 von Visual Basic vollmundig
angepriesen. Es war im Voraus also vor allem zu erwarten, daß das Programm in
der neuen Version mit Datenbanken von Access problemlos zusammenarbeiten
würde, da ja Access aus gleichem Hause stammt. Ebenso war zu erwarten, daß
dBase-Datenbanken mit mehr oder weniger großen Einschränkungen zu bearbei-
ten sein würden.
Zusammenfassend läßt sich zum Schluß nun sagen, daß die Arbeit mit Access-
Datenbanken unter Visual Basic erwartungsgemäß problemlos vonstatten geht,
während beim Zugriff auf dBase-Dateien nur das Bearbeiten von Tabellen ebenso
problemlos ist. Beim Hantieren mit Indizes gibt es einige Schwächen, die man
kennen muß, um nicht in Schwierigkeiten zu geraten, das eigentliche und durch-
aus gravierende Manko ist allerdings das Ignorieren vorhandener mit dBase er-
stellter Abfragen.
Seite 68 von 94
Anhang 1: Die Steuerelemente von Visual Basic
Zeiger (Pointer)
Das erste Tool ist der Zeiger, mit dem keine Windowsobjekte erstellt werden
können, sondern der zum Ändern der Größe und zum Bewegen bereits in der
Form befindlicher Objekte dient.
Bezeichnungsfeld (Label)
Mit diesem Tool ist es möglich ein Textfeld zu erstellen, in das vom Benutzer
Text oder auch Zahlen eingegeben oder geändert werden können.
Beispiel:
Rahmen (Frame)
Seite 69 von 94
Beispiel:
Beispiel:
Beispiel:
Seite 70 von 94
Beispiel:
Dieses Tool ermöglicht die Verwendung einer Combo-Box , eines einzeiligen Li-
stenfeldes oder Kombinationslistenfeldes, welches eine Verbindung eines
Textfeldes mit einer Liste darstellt. Es kann aus der Liste jeweils ein Eintrag
ausgewählt werden, der dann oben im Editierfeld angezeigt wird.
Beispiel:
Eine eigentliche List-Box, also eine Liste, kann man hiermit in ein Fenster ein-
binden. Sie ermöglicht ebenso wie die Combo-Box, die Darstellung einer Liste
von Ausdrücken am Bildschirm und die Auswahl eines oder mehrerer dieser Aus-
drücke durch den Benutzer.
Beispiel:
Seite 71 von 94
Bildlaufleisten (Scroll Bars)
Beispiel:
Zeitgeber (Timer)
Dieses Schaltfeld dient der Programmierung von Timer-Ereignissen und ist zur
Laufzeit des Programms nicht sichtbar. Der Timer teilt einer Applikation peri-
odisch mit, wann ein zuvor eingestelltes Zeitintervall abgelaufen ist, wonach
jeweils eine vorher programmierte Aktion ausgeführt wird.
Damit kann eine Liste in einem Fenster angezeigt werden, die während der
Laufzeit alle verfügbaren Laufwerken zur Auswahl darstellt.
Dagegen kann man hiermit eine Liste anzeigen mit der hierarchischen Darstellung
der Verzeichnisse im Benutzersystem.
Dieses Tool schließlich ermöglicht die Darstellung einer Liste mit allen Dateien
eines bestimmten Verzeichnisses.
Seite 72 von 94
Grafische Figuren (Shape)
Linie (Line)
Als weiteres grafisches Tool kann man hier Linien in unterschiedlicher Stärke,
Farbe und Strichelung zeichnen.
Anzeigefeld (Image)
Hiermit können wie mit der Picture-Box Bilder und Grafiken in einem Fenster
angezeigt werden, eine Picture-Box bietet aber mehr Möglichkeiten.
Tabelle (Grid)
Hiermit lassen sich auf einfache Weise Excel-ähnliche Tabellen in Fenstern dar-
stellen und zur Laufzeit bearbeiten.
Die Steuerelementdatei GRID.VBX muß eingebunden werden!
Damit ist der Zugriff und die Bearbeitung von Datenbanken in verschiedenen
Formaten ermöglicht, ohne Programmcode dafür schreiben zu müssen.
Mit diesem Tool ist es möglich auf Reports, die mit "Crystal Reports for Visual
Basic" erstellt wurden, zuzugreifen. Crystal Reports ist ein eigenständiges Pro-
gramm, mit dem man Datenbankreports für die Verwendung in Visual Basic-
Programmen gestalten kann.
Die Steuerelementdatei CRYSTAL.VBX muß eingebunden werden!
Mit diesem Tool lassen sich Diagramme in verschiedenster Form in einem For-
mular anzeigen, die auch während der Laufzeit manipuliert werden können.
Die Steuerelementdatei GRAPH.VBX muß eingebunden werden!
Das Tool dient der Anzeige oder Änderung des Status' der Tasten CAPS LOCK,
NUM LOCK, INS und SCROLL LOCK.
Die Steuerelementdatei KEYSTAT.VBX muß eingebunden werden!
Seite 74 von 94
Serielle Schnittstellen-Steuerung (Communications Control)
Hiermit ist es möglich, aus Visual Basic Programmen heraus über die serielle
Schnittstelle Daten abzugeben oder zu empfangen.
Die Steuerelementdatei MSCOMM.VBX muß eingebunden werden!
Ausgabe einer Liste, in der die einzelnen Ausdrücke hierarchisch angeordnet sind,
ähnlich wie im Dateimanager von Windows die einzelnen Verzeichnisse.
Die Steuerelementdatei MSOUTLIN.VBX muß eingebunden werden!
Mit diesem Tool, dem Picture Clip Control ist eine vereinfachte Möglichkeit ge-
geben mit vielen eigenen Iconen zu arbeiten, etwa um eine selbst erstellte Toolbox
zu verwenden. Die einzelnen Schalter einer Toolbox sind etwa jeweils im
gedrückten und nicht gedrückten Zustand matrixartig in einem großen Bitmap
angeordnet, und können einfach durch Angabe der Tabellen-Zelle oder der Ko-
ordinaten des Bereichs ausgewählt und am Bildschirm angezeigt werden.
Die Steuerelementdatei PICCLIP.VBX muß eingebunden werden!
Hiermit läßt sich ein Aktionsschalter zur Bearbeitung von Zahlen bei Benutzer-
eingaben erstellen. Das Spin Button wird direkt an ein Editierfeld gesetzt und
durch Klicken mit der Maus wird dann während der Laufzeit des Programms die
in dem Editierfeld dargestellte Zahl erhöht oder erniedrigt.
Die Steuerelementdatei SPIN.VBX muß eingebunden werden!
Dies ist ein Tool, mit dem man 3D-Check-Boxes erstellen kann.
Die Steuerelementdatei THREED.VBX muß eingebunden werden!
Seite 75 von 94
3D-Rahmen (3D Frame)
Man kann damit räumlich erhöhte Flächen zur Textausgabe am Bildschirm dar-
stellen, wobei die optische Höhe der Umrahmung und der ganzen Fläche indivi-
duell eingestellt werden kann.
Die Steuerelementdatei THREED.VBX muß eingebunden werden!
Hiermit kann man 3D-Schaltfelder darstellen, die entweder gedrückt oder heraus-
ragend im Fenster angezeigt werden. Innerhalb einer Gruppe solcher Felder kann
dazu vereinbart werden, daß nur ein Feld gedrückt sein kann. Damit lassen sich
Toolbars wie etwa in Winword oder Excel verwirklichen.
Die Steuerelementdatei THREED.VBX muß eingebunden werden!
Mit diesem Tool wird es ermöglicht, ein Mailsystem mit Visual Basic für ver-
schiedene Benutzer zu programmieren, basierend auf Microsoft Mail for Win-
dows, welches also auf dem System installiert sein muß.
Die Steuerelementdatei MSMAPI.VBX muß eingebunden werden!
Seite 76 von 94
Multi Media Steuerung (Multi Media MCI Control)
Diese Tools sind zur Erstellung von Applikationen für Windows mit Pen-Com-
puting gedacht.
Die Steuerelementdatei PENCNTRL.VBX muß eingebunden werden!
Ebenfalls ein Tool für das Pen-Computing, um dem Benutzer das übermalen von
Bitmaps zu ermöglichen.
Die Steuerelementdatei PENCNTRL.VBX muß eingebunden werden!
Ein weiteres Tool für Pen-Computing, das den Zugriff auf die Bildschirm-Tasta-
tur beim Pen-Computing erlaubt.
Die Steuerelementdatei PENCNTRL.VBX muß eingebunden werden!
Seite 77 von 94
Anhang 2: Die wichtigsten Eigenschaften und Ereignisse von Visual
Basic
BackColor
Hiermit läßt sich die Hintergrundfarbe der meisten Steuerelemente bestimmen. Es
wird dabei für die Farben das RGB-Modell von Windows verwendet. Außerdem
können die System-Farben verwendet werden, wie sie in der Systemsteuerung
eingestellt sind. Die ensprechenden Konstanten von Visual Basic zur Ansteuerung
dieser Farben sind der Textdatei CONSTANT.TXT zu entnehmen.
Die RGB-Farben kann man mit Hilfe der Funktion RGB verwenden, die einen
"Longinteger"- Wert zurückliefert, der eine bestimmte Farbe aus der Farbpalette
repräsentiert. Die jeweilige Farbe setzt sich aus verschiedenen Anteilen der drei
Grundfarben Rot, Grün und Blau zusammen. Die Anteile werden jeweils durch
ein Byte bestimmt, können also Werte zwischen 0 und 255 annehmen. So liefert
etwa 'RGB (0,0,0)' die Farbe Schwarz, 'RGB(255,0,0)' Rot und 'RGB (255,255,255)'
Weiß.
BorderStyle
Hiermit läßt sich die Rahmenart verschiedener Controls einstellen, wobei die
Einstellungsmöglichkeiten von Control zu Control verschieden sind.
Caption
Diese Eigenschaft beinhaltet einen Text, der bei Formularen in der Titelzeile
ausgegeben wird und bei anderen Controls in oder am Control.
ClipControls
Regelt die Art des Nachzeichnens, falls grafische Objekte etwa durch Überdecken
mit einem anderen Fenster, zerstört wurden, und also von Windows die
Seite 78 von 94
WM_PAINT Meldung kommt. Falls ClipControl True gesetzt ist, wird das ganze
Fenster jedesmal neu gezeichnet, andernfalls nur jeweils der Bereich des Fensters,
der wieder sichtbar wurde.
ControlBox
Bestimmt, ob ein Systemmenüfeld in der oberen linken Ecke eines Fensters an-
gezeigt werden soll (ControlBox = True) oder nicht (ControlBox = False).
Count
Mit dieser Eigenschaft können zur Laufzeit alle Formulare oder Steuerelemente
eines Formulars (einschließlich Menüs) aufgelistet werden.
DataBase
Diese Eigenschaft legt die Datenbank fest, die in Verbindung mit dem Daten-
steuerelement verarbeitet werden soll.
DataBaseName
Diese Eigenschaft legt Name und Suchpfad der Datenbank für das Datensteuere-
lement fest. Bei dBase-Dateien muß hier ein Unterverzeichnis angegeben werden,
in dem sich alle Daten- und Indexdateien befinden.
DataChanged
Diese Eigenschaft zeigt an, daß die Daten, die in Verbindung mit dem Daten-
steuerelement bearbeitet werden, geändert wurden (True) oder mit dem ur-
sprünglichen Datensatz übereinstimmen (False).
DataField
Diese Eigenschaft verbindet ein Visual Basic-Steuerelement mit einem Datenfeld
einer bestimmten Tabelle einer Datenbank.
DataSource
Diese Eigenschaft verbindet ein Bezeichnungs- oder Textfeld, das zur Ausgabe
und Bearbeitung von Datenbankdaten eingesetzt wird, mit einem "DataControl"-
Kontrollelement.
DrawStyle
Bestimmt das Aussehen von Linien bei grafischen Objekten, also etwa ob Linien
gestrichelt oder gepunktet oder transparent (nicht sichtbar) gezeichnet werden.
Seite 79 von 94
DrawWidth
Mit dieser Eigenschaft läßt sich die Liniendicke bei grafischen Objekten und
Formular-Rahmen einstellen.
Enabled
Setzt man diese Eigenschaft bei einem Steuerelement False, dann kann der Be-
nutzer während der Laufzeit nicht auf das Steuerelement zugreifen, dieses dient
dann also nur der Anzeige.
FillColor
Hiermit kann man die Farbe festsetzen, mit welcher grafische Objekte (Kreis,
Viereck) gefüllt werden.
FillStyle
Mit dieser Eigenschaft können verschiedene Füllmuster für grafische Objekte
bestimmt werden.
FontBold
Bestimmt, ob die Textattribute für den Text eines Controls entsprechend den Ei-
genschaften FontItalic, FontStrikeThru, FontUnderline gesetzt werden FontBold
= True) oder nicht (FontBold = False).
FontItalic
Falls diese Eigenschaft True gesetzt wird, wird dem Steuerelement zugehöriger
Text kursiv ausgegeben.
FontName
Hier läßt sich die gewünschte Schriftart für den Text des Steuerelements einstel-
len.
FontSize
Diese Eigenschaft bestimmt die Schriftgröße der mit "FontName" ausgewählten
Schrift.
FontStrikeThru
Falls diese Eigenschaft True gesetzt ist, wird dem Steuerelement zugehöriger Text
durchgestrichen ausgegeben.
FontTransparent
Ist diese Eigenschaft True sieht man den Hintergrund der Schrift (etwa grafische
Objekte) zwischen den Buchstaben hindurch, ist sie False, überdecken die ein-
zelnen Buchstaben den Hintergrund.
Seite 80 von 94
FontUnderline
Falls diese Eigenschaft True gesetzt wird, wird dem Steuerelement zugehöriger
Text unterstrichen ausgegeben.
ForeColor
Bestimmt die Farbe, mit der Linien und Text in einem Steuerelement ausgegeben
werden.
Heigt/Height
Diese Eigenschaft bestimmt die Höhe eines Controls in Pixel.
Icon
Hier wird der Name eines Icons eingetragen, das ausgegeben wird, wenn ein
Formular während der Laufzeit minimiert wird.
KeyPreview
Bestimmt wie mit den Tastaturereignissen (KeyPressed, KeyDown, KeyUp) ver-
fahren werden soll. Ist KeyPreview gleich True, dann werden alle Tastaturer-
eignisse zuerst an das Formular gegeben, bevor sie an das aktuelle Kontrollele-
ment weitergeleitet werden. Ist KeyPreview False, gelangen die Tastaturereignis-
se sofort zum aktuellen Steuerelement.
Left
Gibt den Abstand der linken Ecke eines Controls zum linken Rand seines Eltern-
Controls oder -Formulars, also seines übergeordneten Controls, an.
MaxButton
Diese Eigenschaft bestimmt, ob eine Maximize-Box (Vollbildschaltfläche) in der
rechten oberen Ecke eines Fensters angezeigt werden soll (MaxButton = True)
oder nicht (MaxButton = False).
MinButton
Diese Eigenschaft bestimmt, ob eine Minimize-Box (Symbolschaltfläche) in der
rechten oberen Ecke eines Fensters angezeigt werden soll (MinButton = True)
oder nicht (MinButton = False).
Seite 81 von 94
Name
Legt den Namen für eine Form oder ein Steuerelement fest, unter dem das Steu-
erelement im Quelltext angesprochen wird.
Value
Setzt oder ermittelt den aktuellen Status eines Controls.
Visible
Legt fest, ob ein Formular oder ein Steuerelement auf dem Bildschirm sichtbar ist
(True) oder nicht (False).
Width
Diese Eigenschaft bestimmt die Breite eines Steuerelements in Pixel.
Activate
Tritt ein, wenn ein Formular zum aktiven Fenster wird.
Change
Tritt ein, wenn sich der Inhalt eines Steuerelements änderte.
Click
Tritt ein, wenn der Benutzer über einem Objekt eine Maustaste drückt.
DblClick
Tritt ein, wenn der Benutzer über einem Objekt eine Maustaste doppelt drückt.
Deactivate
Tritt ein, bevor ein Formular "nicht aktuell" wird.
DragDrop
Tritt ein, wenn eine Drag-&-Drop-Aktion ausgeführt wurde.
DragOver
Tritt ein, wenn ein Objekt im Rahmen einer Drag-&-Drop-Aktion über ein ande-
res Objekt bewegt wird.
DropDown
Tritt ein, wenn das Listenfeld einer Combo Box herunterklappt.
Error
Tritt bei fehlerhaften Datenbank-Zugriffen ein, bei denen kein Visual Basic-Code
ausgeführt wurde.
GotFocus
Tritt ein, wenn ein Objekt etwa durch anklicken den Focus erhält.
KeyDown
Tritt ein, wenn ein Objekt den Focus hat und eine Taste gedrückt wird.
KeyPress
Tritt ein, wenn der Benutzer eine ANSI-Zeichen-Taste drückt.
KeyUp
Seite 82 von 94
Tritt ein wenn ein Objekt den Focus hat und eine Taste losgelassen wird.
LinkClose, LinkError, LinkExecute, LinkNotify, LinkOpen
Treten in Zusammenhang mit DDE-Anwendungen auf.
Load
Tritt ein, wenn ein Formular geladen wird.
LostFocus
Tritt ein, wenn ein Objekt den Focus verliert.
MouseDown
Tritt ein, wenn der Benutzer eine Maustaste drückt.
MouseMove
Tritt ein, wenn der Benutzer über einem Objekt die Maus bewegt.
MouseUp
Tritt ein, wenn der Benutzer eine Maustaste losläßt.
Paint
Tritt ein, wenn ein Fenster neugezeichnet werden muß.
QueryUnload
Tritt in allen Formen ein, wenn die zugehörige Applikation geschlossen wird,
auch wenn Windows beendet weden soll.
Reposition
Tritt ein, wenn ein anderer Datensatz in einem Recordset der aktuelle Datensatz
wird.
Resize
Tritt ein, wenn ein Formular das erste Mal auf den Bildschirm gebracht wird, oder
wenn sich die Größe eines Objekts ändert.
RowColChange
Tritt ein, wenn die aktuelle Zelle in einer Tabelle wechselt.
SelChange
Tritt ein, wenn der ausgewählte Bereich in einer Tabelle sich ändert.
Unload
Tritt ein wenn ein Formular geschlossen wird.
Validate
Tritt ein, wenn der aktuelle Datensatz wechselt, also wenn ein neuer Datensatz
zum aktuellen wird.
Seite 83 von 94
Anhang 3: Glossar
A
Abfrage Eine Abfrage liefert eine Auswahl von
Datensätzen aus einer oder mehreren ➔Tabellen,
die bestimmten Anforderungen entsprechen.
Access Key ➔Direktzugriffstaste
Aktueller Datensatz Der aktuelle Datensatz ist immer der ➔Datensatz,
auf den der ➔Datensatzzeiger gerichtet ist.
Applikation Unter einer Applikation versteht man allgemein
ein Anwendungsprogramm
Array Datenstruktur zur Bearbeitung größerer
Datenmengen mit gleichem Typ . In Basic etwa
6
6
nach Irene Bauder, Jürgen Bär, Turbo Pascal für Windows, Das Kompendium, 1992, Markt & Technik Verlag,
Haar bei München, S. 56
7
nach Hans Robert Hansen, Wirtschaftsinformatik I, Einführung in die betriebliche Datenverarbeitung, 5.
Auflage 1987, Gustav Fischer Verlag, Stuttgart, S. 108
Seite 84 von 94
Datenbank-Engine Programm(-teil), das in Client/Server-
➔Datenbanken eingesetzt wird und dessen
Hauptaufgabe die Bearbeitung von Client-
Nachfragen ist. In Visual Basic wird dieselbe Da-
tenbank-Engine wie in MS Access verwendet.8
Datensatz Ein Datensatz ist ein Datenobjekt, das aus einem
oder mehreren Daten-➔Feldern besteht.9
Datensatzzeiger Gedachter Zeiger auf einen ➔Datensatz eines
➔Recordsets. Der Zeiger ist immer nur auf einen
Datensatz gerichtet, und es kann immer nur der
Datensatz bearbeitet werden, auf den der
Datensatzzeiger zeigt.
Default Ein Default (-Wert) ist immer der voreingestellte
Wert einer Variablen oder eines Parameters.
Direktzugriffstaste Taste oder Tastenkombination durch die sofort,
ohne das umständliche Anwählen von
➔Menüpunkten, bestimmte Programmfunktionen
aufgerufen werden können.
DLL "Dynamic Link Library"-Dateien sind
Bibliotheken mit Funktionen zur Windows-
Programmierung, die von Win-
dowsprogrammiersystemen genutzt werden
können, auch von Visual Basic.
Dynaset Ein Dynaset ist eine dynamische Kopie aus einer
oder mehreren ➔Tabellen nach Ausführung einer
➔Abfrage.
E
Editor Bei einem Editor handelt es sich um ein Programm
zur Bearbeitung eines Textes bzw. ➔Quelltextes.
Der Visual Basic-Editor ist in die
➔Entwicklungsumgebung integriert, arbeitet
prozedurorientiert und bietet die farbige Hervor-
hebung von Visual Basic-Anweisungen.
Eigenschaft (property) Eigenschaften bestimmen das Aussehen und das
Verhalten von ➔Objekten. Neben den
Farbeinstellungen legen Sie z.B.
➔Titelleistentexte oder Beschriftungen fest. Eine
Liste der Eigenschaften finden Sie in Anhang 2!
8
a.o.O. Pia Maslo,Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für Windows, S. 729
9
nach Hans Robert Hansen, Wirtschaftsinformatik I, a.o.O., S. 108
Seite 85 von 94
Entwicklungsumgebung Die Visual Basic-Entwicklungsoberfläche ist eine
integrierte Benutzeroberfläche, mit der VB-
Programme entwickelt werden können. Alle
Schritte der Programmerstellung werden von der
Oberfläche aus durchgeführt, vom Formulardesign
bis zum ➔Compilieren.
Ereignis Ein Ereignis wird durch den Benutzer (Mausklick,
Eingabe über die Tastatur), das System oder
➔Applikationen ausgelöst und ruft in Visual
Basic-Programmen automatisch die zugehörige
➔Ereignisprozedur auf.
Ereignisprozedur Eine Ereignisprozedur ist ein Unterprogramm, das
nach Eintreten eines ➔Ereignisses abgearbeitet
wird.
Event siehe ➔Ereignis
Extension die "Erweiterung" eines Dateinamens unter DOS,
bestehend aus drei Buchstaben durch einen Punkt
vom eigentlichen Dateinamen getrennt, also etwa
'.EXE' oder '.DBF'.
F
Feld Jede ➔Tabelle besteht aus mehreren Feldern,
welche die Spalten der Tabelle darstellen.
Fensterelement Elemente, aus denen ein Windowsfenster besteht,
wie ➔Titelleiste, ➔Systemmenüfeld, ➔Rahmen,
➔Vollbildschaltfläche und ➔Symbolschaltfläche
Field siehe ➔Feld
Fields ➔Collection der Felder einer Tabelle, für jede
Tabelle verfügbar.
Fokus (Focus) Das Fenster oder Steuerelement, das den Fokus
hat, ist immer das aktuelle ➔Objekt, das
Tastatureingaben erhält, mit dem gearbeitet
werden kann. So muß etwa ein Textfeld den Fokus
haben, damit man Eingaben machen kann.
Formular (Form) Programm- und Dialogfenster werden als Form
oder Formular bezeichnet. In ein Formular können
➔Steuerelemente plaziert und ein ➔Menü
aufgenommen werden.
Funktion (function) Funktionen sind besondere ➔Unterprogramme,
die einen Funktionswert nach ihrem Ablauf
zurückliefern.
Seite 86 von 94
I
Icon Ein Icon ist ein kleines Bildsymbol für Programme
oder Formulare unter Windows, das etwa im
Programmmanager angezeigt wird.
Beispiel: Das Icon des Programmmanagers von
Windows:
10
nach Hans Robert Hansen, Wirtschaftsinformatik I, a.o.O., S. 253
Seite 87 von 94
O
Objekt Zu den Objekten zählen ➔Formulare und
➔Steuerelemente, dazu auch ➔Datenbanken,
➔Tabellen und ➔Abfragen, sowie spezielle
Objekte, wie etwa u.a. der Drucker (Printer) oder
der Bildschirm (Screen).
Für jedes Objekt können verschiedene
➔Eigenschaften, ➔Methoden und ➔Ereignisse
definiert sein.
Objektvariable Eine Variable die ein Visual Basic bekanntes
➔Objekt repräsentiert, also eine ➔Instanz eines
Objekts.
ODBC "Open Database Connectivity", also etwa "offene
Datenbank-Verbindungen". ODBC ist ein
Industriestandard zum Bearbeiten beliebiger
➔Datenbanken über eine einheitliche
11
Befehlssyntax .
ODBC-Treiber (-Driver) Ein ➔ODBC-Treiber ist eine ➔DLL, die ODBC-
Funktionsaufrufe ausführt und Datenquellen
beeinflußt.
P
Primärschlüssel Durch den Primärschlüssel ist jeder ➔Datensatz
(PrimaryKey) einer ➔Tabelle eindeutig auffindbar. In einem
➔Index über den Primärschlüssel darf kein
Schlüsselfeld doppelt auftreten.
Programmcode Unter Programmcode versteht man den
geschriebenen Text eines Programms - also z.B.
Basic-Befehle - der für den Ablauf des Programms
dann entweder interpretiert oder compiliert wird
(➔Compiler,➔Interpreter).
11
a.o.O. Pia Maslo,Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für Windows, S. 727
Seite 88 von 94
Prozedur (Procedure) siehe ➔Unterprogramm
Q
Quellcode siehe ➔Programmcode
Quellmodul (Quelldatei) Ein Quellmodul enthält benutzerdefinierte
➔Funktionen und ➔Unterprogramme, die bei
Bedarf von allen ➔Formen und Quellmodulen aus
gestartet werden können. In Quellmodulen können
Sie zudem Variablen programmübergreifend als
global vereinbaren.
Query siehe ➔Abfrage
QueryDef Visual Basic-Objekt, welches vor allem den SQL-
Ausdruck beinhaltet, der eine Abfrage definiert.
R
Rahmen Mit Hilfe des Rahmens werden Fenster in ihrer
Größe geändert. Über dem Rahmen nimmt der
Mauscursor die Form eines Doppelpfeils an.
Ziehen Sie dann bei gedrückter linker Maustaste
den Rahmen auf die gewünschte Größe.
12
nach Irene Bauder, Jürgen Bär, Turbo Pascal für Windows, S. 133
13
Steiner Franz-Josef, Manfred Czerwinski, Turbo Pascal Lexikon: Von A bis Z, 1989, Markt & Technik-
Verlag, Haar bei München, S. 441
14
nach Irene Bauder, Jürgen Bär, Turbo Pascal für Windows, S. 133
Seite 90 von 94
Toolbox In einer Toolbox sind bildlich dargestellte Tasten
zusammengefasst, mit denen auf wichtige
Funktionen eines Programms schnell zugegriffen
werden kann.
U
Unterprogramm Unterprogramme (bzw. Prozeduren) sind in sich
abgeschlossene Programmteile, die durch eine
einzelne Anweisung an anderen Stellen eines
Programms aufgerufen und abgearbeitet werden
können.
V
VBX-Datei Dies sind sogenannte Steuerelement-Dateien
(eigentlich besondere ➔DLL-Dateien), mit denen
zusätzliche ➔Steuerelemente zu den
standardmäßig in Visual Basic enthaltenen zur
Verfügung gestellt werden. Um solche Steuer-
elemente zu nutzen, muß die zugehörige VBX-
Datei über das Projektfenster in das ➔Projekt ein-
gebunden werden.
Vollbildschaltfläche
15
nach Irene Bauder, Jürgen Bär, Turbo Pascal für Windows, S. 133
Seite 91 von 94
Anhang 4: Abbildungs- und Literaturverzeichnis
Abbildungsverzeichnis
Abb. 1. Die Programmoberfläche von Visual Basic
Abb. 2. Das Menüfenster
Abb. 3. Das Entwurfsformular
Abb. 4. Beispiele für typische Windows-Steuerelemente
Abb. 5. Das Toolbox-Fenster
Abb. 6. Aktionsschalter mit unterschiedlichen Eigenschaften
Abb. 7. Das Properties- oder Eigenschaftsfenster
Abb. 8. Verändern der "Caption"-Eigenschaft im Properties-Fenster
Abb. 9. Editorfenster zum Eingeben von Basic-Quellcode
Abb. 10. Das Entwurfsformular für das Beispiel
Abb. 11. Ein markiertes Steuerelement
Abb. 12. Ein Aktionsschalter und die zugehörige Taste aus dem Toolbox-
Fenster
Abb. 13. Ein Textfeld und die zugehörige Taste aus dem Toolbox-Fenster
Abb. 14. Mehrzeiliges Textfeld mit horizontaler und vertikaler Bildlaufleiste
Abb. 15. Ein markiertes Bezeichnungsfeld und die zugehörige Taste aus dem16
Toolbox-Fenster
Abb. 16. Mit diesem Menüpunkt wird ein neues Projekt angelegt
Abb. 17. Das Entwurfsformular für das Beispiel zum Bezeichnungsfeld
Abb. 18. Der Quelltext für die Taste Ändern
Abb. 19. Das Speichern-unter-Dialogfeld von Visual Basic
Abb. 20. Ein Listenfeld und die zugehörige Taste aus dem Toolboxfenster
Abb. 21. Listenfeld mit columns = 2 und columns = 3
Abb. 22. Das Entwurfsformular des Beispiels zum Listenfeld
Abb. 23. Das Entwurfsformular des Beispiels zu Schaltfelder
Abb. 24. Das Entwurfsformular zum Alkomat mit Namen der Controls
Abb. 25. Wechseln in den "General"-Bereich des Quelltextes
Abb. 26. Erweitertes Formular für das Alkomat-Beispiel
Abb. 27. Bildschirmanzeige des Data Controls und die zugehörige Taste aus
dem Toolbox-Fenster
Abb. 28. Das Kombinationslistenfeld der "RecordSource"-Eigenschaft
Abb. 29. Das Entwurfsformular für das Beispiel zum Data Control
Abb. 30. Das Formular zum Beispiel "Durchgehen einer Tabelle"
Abb. 31. Das Entwurfsformular für das Beispiel zur Tabellenbearbeitung
Abb. 32. Das Fenster zum Anlegen neuer Prozeduren
Abb. 33. Das Formular für das Beispiel zu Abfragen
Abb. 34. Formular zum Beispiel über Gruppenbearbeitung
Seite 92 von 94
Literaturverzeichnis
Hilfe-Dateien zu Microsoft Visual Basic Version 3.0, Copyright © 1987-1993
Microsoft Corporation
Dr. Pia Maslo, Stefan Dittrich, Das große Buch zu Visual Basic 3.0 für
Windows, 1. Auflage 1993, DATA BECKER GmbH, Düsseldorf
Irene Bauder, Jürgen Bär, Turbo Pascal für Windows, Das Kompendium, 1992,
Markt & Technik Verlag, Haar bei München
Seite 93 von 94
Seite 94 von 94