Projektarbeit

Werbung
Projektarbeit
Einsatz des postrelationalen
Datenbankmanagment Systems
Caché für die Datenbankausbildung
Name:
André Knaupp
MatrNr.:
013198
Semester: SS 2003
Projektarbeit
André Knaupp
INHALTSVERZEICHNIS
Seite
1
EINLEITUNG ....................................................................................................4
1.1
2
3
WAS IST CACHÉ............................................................................................................4
INSTALLATION.................................................................................................6
2.1
SYSTEMVORAUSSETZUNGEN ........................................................................................6
2.2
SOFTWAREINSTALLATION ............................................................................................6
2.3
JDBC / ODBC UND CACHÉ ......................................................................................11
ARBEITEN MIT CACHÉ ...................................................................................13
3.1
CACHE STOPPEN UND STARTEN ................................................................................13
3.2
DIE DATENTYPEN .......................................................................................................15
3.2.1 Arbeiten mit den verschiedenen Datentypen..................................................................................16
3.3
DER CACHÉ SQL-MANAGER .....................................................................................17
3.3.1 User anlegen und vergeben von Rechten .......................................................................................18
3.3.2 Anmelden und Namespace Wechseln ..............................................................................................20
3.3.3 Die erste Tabelle erstellen und verwalten.......................................................................................21
3.3.4 SQL-Anweisungen ausführen ............................................................................................................23
3.3.5 Views erstellen und bearbeiten.........................................................................................................24
3.3.6 Tabellen und Daten von externen Datenbanken importieren ......................................................25
3.3.7 Trigger in Caché..................................................................................................................................26
3.4
DAS TERMINAL ...........................................................................................................29
3.4.1 Die Eingabe über die Kommandozeile .............................................................................................30
3.4.2 Importieren von Dateien....................................................................................................................32
4
3.4.2.1
Die Methode Systems.SQL.Oracle()...........................................................................32
3.4.2.2
Die Methode DDLImport(). .........................................................................................34
DER KONFIGURATIONSMANAGER ................................................................36
4.1
ERWEITERTE SQL EINSTELLUNGEN ..........................................................................37
4.2
EIN SQL-GATEWAY EINRICHTEN .............................................................................38
S e ite 2 vo n 6 1
Projektarbeit
André Knaupp
5
SIEGERLISTE MIT ADO ................................................................................39
6
DER CACHÉ WIZARD IN VISUAL BASIC ......................................................40
7
FAZIT .............................................................................................................42
8
ANHANG .........................................................................................................43
8.1
ÜBUNGSAUFGABEN .....................................................................................................43
8.2
AUSGABEN ..................................................................................................................46
8.3
MUSTERLÖSUNG .........................................................................................................51
8.4
IMPORTDATEI .............................................................................................................51
8.5
SIEGERLISTE - SOURCECODE.....................................................................................58
S e ite 3 vo n 6 1
Projektarbeit
André Knaupp
1 EINLEITUNG
Diese Projektarbeit soll eine Einführung in das Datenbankmanagmentsystem Caché
sein. Ich werde darin verschiedene Tools und Oberflächen von Caché beschreiben.
Dadurch soll der Umgang mit, und der Einstieg in Caché erleichtert werden.
Caché ist eine objektorientierte Datenbank in der aber auch aus relationaler Sicht
heraus mit Datenbanken gearbeitet werden kann. In dieser Projektarbeit befasse ich
mich hauptsächlich mit dem relationalen Teil von Caché.
Die Aufgabe der Projektarbeit war eine Anleitung für die SQL-Übungsaufgaben,
aus der Vorlesung Datenbankmanagmentsysteme (DABS), mit Caché zu erstellen,
die bestehende Importdatei und die Musterlösung anzupassen sowie die Ergebnisse
bzw. die Bildschirmausgaben zu den Aufgaben zu dokumentieren.
Desweiteren habe ich noch ein kurze Installationsanleitung für Caché erstellt und
mich kurz mit Triggern in Caché befasst.
Zum Abschluss habe ich die Aufgabe von Übungsblatt 4 (Siegerliste) in Visual Basic
programmiert, der Datenbankzugriff erfolgt über ADO.
1.1 WAS IST CACHÉ
Caché wurde von InterSystems Ende 1997 auf den Markt gebracht und hat
seit seiner Einführung diverse Auszeichnungen, unter anderem das Online Database
Derby 1997 und 1998 sowie den Informations- Management Award 1998, gewonnen.
Laut Aussage von InterSystems ist Caché so konzipiert, dass es die komplexen
Anforderungen der realen Welt optimal abbilden kann. Das kann man von
relationalen Datenbanken nicht immer sagen kann.
Deshalb wird es von InterSystems auch als postrelationales Datenbanksystem bezeichnet.
Was bedeutet postrelational?
Zunächst einmal ist die Bezeichnung postrelational eine Bezeichnung auf der
Zeitachse. Also könnte man alle DBMS die nach den relationalen DBMS entwickelt
wurden als postrelational bezeichen. So wird dieser Begriff auch häufig verwendet.
Vossen [1994] verwendet den Begriff postrelational als eine Zusammenfassung für
alle Datenbanken, die nicht mehr nur auf flachen Tabellen basieren, explizit nennt er
verschachtelt-relationale, multidimensionale und objektorientierte DBMS als Beispiele.
Alleine die zeitlich Betrachtung würde zu kurz greifen, viel mehr sollte man sich die
veränderten Anforderungen vor Augen führen welche heute an ein modernes DBMS
gestellt werden.
S e ite 4 vo n 6 1
Projektarbeit
André Knaupp
So schreibt z.B. Vaskevitch [1992] in einem Bericht für das BYTE Magazine:
Relational databases still make sense for many kinds of applications that lend
themselves to expressions as simple sets of simple tables. However, to build
applications that reflect the real world, you will have to find a way to take
another two steps forward this time to a postrelational world.
In diesem Sinne verstanden, hilft das postrelationale Modell von Caché die
Beziehungen der realen Welt ohne unzulässige Vereinfachung abzubilden.
Caché wird häufig im Gesundheitswesen eingesetzt so z.B. an der Berliner Charité
oder in den Städtischen Kliniken Dortmund.
Nach Angaben von InterSystems wird das derzeit größte Client/Server System der
Welt mit über 30.000 Nutzern auf einer Caché-Umgebung im Gesundheitswesen
ausgeführt.
Es wird aber auch in der Logistik wie zum Beispiel beim Container- und
Frachtumschlag im Hamburger Hafen eingesetzt.
Als Client-Technologien unterstützt Caché u.a. Java, C++, ActivX, XML, Visual Basic
und Delphi. Für den SQL Zugriff unterstützt Caché ADO, ODBC und JDBC.
Für die Entwicklung von Web-Anwendungen stehen dem Entwickler verschiedene
Skriptsprachen unter anderem Basic und Caché ObjektScript zur Verfügung.
Caché basierende Anwendungen können ohne Änderung am bestehenden Code auf
eine andere Plattform portiert werden. Außerdem können die Anwendungen auf den
verschiedensten Plattformen wie zum Beispiel Unix, Linux, OpenVMS und Windows
ausgeführt werden.
Über die Homepage von InterSystems www.cache.de kann man Caché kostenlos
downloaden oder als CD bestellen.
Es handelt sich dabei um eine kostenlose Single-User Version die eine umfangreiche
Dokumentation und einige Tutorials enthält.
Darüber hinaus hat man die Möglichkeit den Support von InterSystems in Anspruch
zu nehmen oder sich Informationen aus der Newsgroup von Intersystems zu holen.
Allerdings ist die kostenlose Caché Version dahingehend eingeschränkt, dass kein
Networking mit anderen Caché-Systemen möglich ist und keine externen
Eingabegeräte angeschlossen werden können.
S e ite 5 vo n 6 1
Projektarbeit
André Knaupp
2 INSTALLATION
Wie schon erwähnt kann man Caché auf den verschiedensten Plattformen nutzen.
Ich befasse mich in diesem Kapitel mit der Installation von CD unter Windows.
Caché arbeitet mit verschiedenen Herstellern von Software der Web- und
Frontendprogrammierung zusammen.
Möchten Sie Caché zusammen mit anderen Produkten, z.B. mit dem Dreamweaver
von Macromedia oder Visual Basic verwenden, dann stellen Sie sicher, dass diese
Software installiert ist bevor Sie Caché installieren.
Caché erkennt dann die benötigten Verbindungen zu den Frontend – und Web-Tools
und installiert die erforderlichen Add-Ins bei der Installation gleich mit.
2.1 SYSTEMVORAUSSETZUNGEN
Um Caché erfolgreich unter Windows zu installieren sollte Ihr System folgende
Voraussetzung erfüllen:
•
•
•
•
•
Windows 95, 98, 2000 (mit Service Pack 2), NT (mit Service Pack 4, 5
oder 6), XP
64 MB Hauptspeicher
110 MB freie Festplattenkapazität davon 100MB für die Software und 10
MB für die Installation.
Einen konfigurierten TCP/IP Stack
Bei Installation von CD, natürlich noch ein CD-Rom- Laufwerk
2.2 SOFTWAREINSTALLATION
Haben Sie Caché von der Homepage von InsterSystems heruntergeladen starten Sie
die installation durch ausführen der Datei CachePCkit.exe.
Wenn Sie von CD installieren möchten gehen Sie wie folgt vor:
Nach dem Einlegen der CD startet das Installationsprogramm alleine.
Ist die Autostart-Funktion für ihr CD-Rom-Laufwerk ausgeschaltet starten Sie die
autostart.exe in Ihrem CDRom-Verzeichnis selbst.
Ein Browser startet, hier können Sie sich noch einige Informationen anzeigen lassen.
Da die CD sowohl die Caché Versionen für Linx und Windows enthält führen Sie nun
die setup.exe im Unterverzeichnis Windows auf der CD aus.
S e ite 6 vo n 6 1
Projektarbeit
André Knaupp
Nach dem Sie die install.exe gestartet haben erscheint ein Fenster (Abb. 1), in dem
Sie die Sprache auswählen können in der Sie Caché installieren möchten.
Die Auswahl hat keinen Einfluss auf die Sprache der Dokumentation,
sie ist immer in englisch.
Klicken Sie auf <OK> wenn Sie die Auswahl beendet haben.
Abb. 1
Danach erscheint das Lizensvertragsfenster (Abb. 2). Lesen Sie alles ;) sorgfältig,
wenn Sie mit dem Vertrag einverstanden sind klicken Sie <Ja>.
Abb. 2
S e ite 7 vo n 6 1
Projektarbeit
André Knaupp
Nun werden Sie gefragt in welchen Ordner Caché installiert werden soll (Abb. 3)
Abb. 3
Wählen Sie einen Ordner aus oder geben Sie einen neuen Ordner an und bestätigen
Sie mit <OK>.
Wenn Sie einen Ordner angegeben haben der noch nicht existiert, werden Sie gefragt ob der neue Ordner angelegt werden soll (Abb. 4)
Abb. 4
Bestätigen Sie wieder mit <OK> wenn die Auswahl richtig ist.
S e ite 8 vo n 6 1
Projektarbeit
André Knaupp
Nun müssen Sie wählen welcher Character-Support installiert werden soll, Unicode
oder 8-Bit (Abb. 5). Wählen Sie 8-Bit aus wenn Sie mit Daten arbeiten bei denen
Buchstaben in 8-Bit gespeichert werden, wie z.B. in der deutschen Sprache.
Wählen Sie Unicode aus wenn Sie mit einer Sprache arbeiten die ihre Buchstaben im
Unicodeformat speichert z.B. japanisch.
Abb. 5
Als nächstes zeigt Ihnen das Installationsprogramm die einzelnen Komponenten an
die installiert werden (Abb. 6).
Abb. 6
S e ite 9 vo n 6 1
Projektarbeit
André Knaupp
Sind alle Angaben richtig bestätigen Sie mit <Weiter>.
Die Installation wird beendet.
Nach Beendigung der Installation haben Sie die Möglichkeit sich die
Getting-Started-Page anzusehen (Abb. 7).
Diese Seite ist Teil der mitgelieferten Dokumentation und beinhaltet unter anderem
Anmerkungen zur aktuellen Caché Version, eine kurze Einführung in Caché,
eine Installationsanleitung und ein paar Informationen über unterstützte
Betriebssysteme, Web-Server, Sprachen und der Kompatibilität zu älteren Caché
Versionen.
Abb. 7
Klicken Sie auf <Beenden> um die Installation zu beenden.
Ein Neustart von Windows ist nicht notwendig.
S e ite 10 von 6 1
Projektarbeit
André Knaupp
2.3 JDBC / ODBC UND CACHÉ
Der ODBC Treiber von InterSystems wird bei der Installation gleich mit installiert,
so dass Sie gleich starten können.
Um den Caché ODBC Treiber nach Ihren Wünschen zu konfigurieren, wählen Sie
über <Systemsteuerung -> Verwaltung -> Datenquellen -> SystemDSN> den Caché
ODBC Treiber aus. In Abb. 7.1 sehen Sie das Caché ODBC Data Source Setup wo Sie
folgende Konfigurationen vornehmen können:
•
Name:
Spezifiziert den Namen der DSN.
•
Description:
Optional können Sie hier noch eine Beschreibung
eingeben.
•
Host IP Address:
Die IP Adresse des Caché Hosts.
•
Host Port Number:
Die Portnummer des Hosts. Standard bei Caché ist
Port 1972.
•
Caché Namespace:
Spezifiziert den Namespace in dem Sie arbeiten
möchten.
•
User Name:
Der Username unter dem Sie sich verbinden
möchten Standardmäßig ist <_System> eingestellt.
•
Password:
Ihr Passwort. Standardmäßig für den User _System
ist hier <sys> eingetragen.
•
ODBC Log:
Ist die Checkbox aktiviert, wird ein Logfile erzeugt
welches die ODBC Client Log´s aufzeichnet.
Nutzen Sie dies nur zur Fehleranalyse da diese Option die Geschwindigkeit des Zugriffs über ODBC
stark vermindert.
•
Static Cursors:
Ist die Checkbox aktiviert, ermöglicht dies die
Unterstützung von statischen Cursor in Caché.
•
Disable Query Timeout:
T
•
Unicode SQL Types: Aktivieren Sie diese Option nur wenn Sie mit
Multibyte Charactersets arbeiten möchten wie
z.B. in chinesisch, hebräisch oder japanisch.
Ist die Checkbox aktiviert ignoriert der ODBC
reiber die Timeout-Settings der ODBC Query.
S e ite 11 von 6 1
Projektarbeit
André Knaupp
Nachdem Sie die ODBC Datenquelle konfiguriert haben können Sie mit dem Button
<Test Connection> die Verbindung testen und prüfen ob die Datenquelle richtig
funktioniert.
Abb. 7.1
Der JDBC Treiber, CacheDB.jar, befindet sich nach der Installation im Verzeichnis
C:\CacheSys\Dev\java\lib\.
Wie eine Verbindung von einem Java-Client, zu Caché aufgebaut wird zeigt
folgendes Beispiel:
String url="jdbc:Cache:
String username="_SYSTEM";
String password="sys";
//localhost:1972/USER";
// oder Ihr eigener Username
// oder Ihr eigenes Passwort
dbconnection = CacheDatabase.getDatabase(url, username, password);
S e ite 12 von 6 1
Projektarbeit
André Knaupp
3 ARBEITEN MIT CACHÉ
In Caché gibt es grundsätzlich zwei Möglichkeiten, mit SQL-Anweisungen und
relationalen Datenbanken zu arbeiten.
Ich werde beide, den SQL-Manager und das Caché Terminal beschreiben.
Zumindest werde ich die Teile beschreiben, die man zum Lösen der SQL-Aufgaben
aus der Vorlesung DABS benötigt, denn besonders das Terminal bietet eine große
Auswahl an Funktionen und Methoden um mit Caché zu arbeiten.
Zum Lösen der Aufgaben reicht eines der beiden Programme. Beide haben ihre
Vor.- und Nachteile bzw. Eigenheiten, auf die ich in den entsprechenden Kapiteln
hinweisen werde.
In Kapitel 5 werde ich kurz auf Caché Studio eingehen, damit kann man dann in
Visual Basic und dem intergrierte Cache-Wizard schnell eine kleine Anwendung
erstellen.
Zuerst jedoch zu den Grundlagen.
3.1 CACHE STOPPEN UND STARTEN
Nach der Installation erscheint in der Taskleiste ein kleiner Würfel (Abb. 8),
der Caché Cube.
Abb. 8
Caché startet nach der Installation automatisch. Das Caché bereits läuft erkennt man
am Caché Cube in der Taskleiste, ist der Cube wie in Abb. 8 dargestellt (dunkel)
dann ist Caché bereits gestartet.
Um Caché zu stoppen klicken Sie mit der Maus auf den Cube, es öffnet sich das
Caché-Menu (Abb. 9), wählen Sie hier <Caché stoppen>.
S e ite 13 von 6 1
Projektarbeit
André Knaupp
Abb. 9
Cache wird gestoppt (Abb. 10).
Abb. 10
Der Cube in der Taskleiste ist nun hellgrau (Abb. 11).
Abb. 11
Zum Starten klicken Sie einfach wieder auf den Cube in der Taskleiste und wählen
Sie den Menupunkt <Caché starten>.
Es erscheint der Startbildschirm von Caché (Abb. 12).
Abb. 12
S e ite 14 von 6 1
Projektarbeit
André Knaupp
3.2 DIE DATENTYPEN
Hier einige der Datentypen die Cache im Umgang mit SQL-Anweisungen unterstützt.
•
•
•
•
•
•
•
•
•
BINARY
MONEY, SMALLMONEY
DATE
DOUBLE, FLOAT, REAL
BIT, INT, INTEGER, SMALLINT, TINYINT
DEC, DECIMAL, NUMBER, NUMERIC
CHAR, CHARACTER, VARCHAR, VARCHAR2
TIME
DATETIME, TIMESTAMP
Die interne Typendarstellung in Caché weicht bei einigen von den oben genannten
Datentypen ab, da Caché die verschieden Datentypen umwandelt.
So werden alle CHAR-Typen als Typ der Klasse %Library.String dargestellt.
Aus Datetime wird %Library.TimeStamp und Number wird als %Library.Numeric.
dargestellt.
Die Details der internen Darstellung kann man sich im SQL-Manager anschauen.
Bleibt noch zu erwähnen das Caché die Attribute NULL, NOT NULL, DEFAULT und
PRIMARY KEY unterstützt. AUTO_INCREMENT kann man nur in Verbindung mit
Caché Objects benutzen.
Hinweis:
Im Gegensatz zu MySQL unterstützt Caché auch Constraints.
Man kann aber nicht in einer SQL-Anweisung eine Tabelle um eine Spalte erweitern
und gleichzeitig der Spalte ein Constraint hinzufügen.
Dazu benötigt man zwei Anweisungen.
Beispiel:
alter table Neu add (ID varchar2 (5))
alter table Neu add (constraint fk_neu foreign key (ID)
references tabelle_x (ID_x))
S e ite 15 von 6 1
Projektarbeit
André Knaupp
3.2.1 ARBEITEN MIT DEN VERSCHIEDENEN DATENTYPEN
Hier möchte ich ein paar Beispiele für das Arbeiten mit verschiedenen Datentypen
aufführen. Besonders der Datentyp Date und Timestamp können in unterschiedlicher
Weise abgefragt und in Tabellen eingefügt werden.
Unter anderem werden für den Date-Typ folgende Werte unterstützt:
•
•
•
•
•
insert into…(…, { d '1970-05-15' },…)
insert into…(…, '01/14/2003',…)
insert into…(…, TO_DATE('1976.05.23', 'YYYY.MM.DD'),…)
insert into…(…, TO_DATE('05.06.76', 'DD.MM.YY'),…)
insert into…(…, TO_DATE('Tuesday May 30, 2000', 'DAY MONTH DD,
YYYY'),…)
• insert into… (…, TO_DATE('30 May 2000'),…)
• zusätzlich über das Terminal noch Integer, insert into…(…, 51266,…)
die Zählung beginnt am 31.12.1840, gezählt werden die Tage.
Die Formatelemente sind hierbei:
•
•
•
DD
MM
Mon
•
MONTH
•
•
YY
YYYY
Wert zwischen 0-31
Wert zwischen 0-12
Der Name des Monats in abgekürzter Schreibweise, Jan,
Feb....
Der Name des Monats in ungekürzter Schreibweise,
January....
Die zwei letzten Ziffern des Jahres
Alle Ziffern des Jahres
Der TimeStamp-Typ unterstützt folgende Werte:
•
•
•
insert into…(..., {ts '2002-10-24 08:01:00'},...)
insert into…(..., {ts '2002-10-24 08:01:'},...)
insert into…(..., '1996-08-22 15:00:00',...)
Bei Numeric Datentypen wird die Anzahl der Stellen vor und nach dem Komma durch
zwei mit Komma getrennt Zahlen in Klammer definiert.
Bsp. Create table…(..., nummer numeric(9,2),...)
Für eine Zahl mit 9 Stellen vor dem Komma und 2 danach.
Führende Nullen werden nicht dargestellt nachfolgende schon.
Bei Integer und Numeric kann man sowohl mit als auch ohne Hochkommas
arbeiten.
Stringtypen, also alle Chartypen, werden in einfachen Hochkommas eingegeben.
S e ite 16 von 6 1
Projektarbeit
André Knaupp
3.3 DER CACHÉ SQL-MANAGER
Der SQL-Manager bietet Ihnen die Möglichkeit über eine grafische Oberfläche mit
Ihren Tabellen zu arbeiten. Er bietet eine relationale Ansicht der Datenbank.
Im SQL-Manager können Sie folgende Aktionen durchführen:
•
•
•
•
•
•
•
Benutzer anlegen, verwalten
Rechte zuweisen und verwalten
SQL-Anweisungen durchführen
Views anlegen und ändern
Import und Export von Daten aus bzw. in ASCII-Dateien
Tabellen und deren Daten anschauen
Importieren von Tabellen und Daten aus anderen Datenbanksystemen
Hinweis:
Der SQL-Manager unterstützt aber nicht den Import von SQL-Skript-Dateien um
Tabellen anzulegen oder Daten in Tabellen einzufügen.
Starten Sie den SQL-Manager durch einen Klick auf den Caché Cube und die Auswahl
des Menupunktes <SQL-Manager>. Wenn Sie den SQL Manager das erste Mal
starten werden Sie automatisch als User: _Sytem angemeldet.
Der User: _System wird bei der Installation von Caché automatisch angelegt und hat
hier kein Password.
Nach dem Starten erscheint folgendes Fenster (Abb. 13).
In der linken Hälfte des Fensters sieht man oben den Server (hier Server) mit dem
man verbunden ist und die Ordner für Rollen und die Benutzer die auf diesem Server
eingerichtet sind.
Darunter folgt der Namespace (hier USER) unter dem man angemeldet ist und die
Ordner für die Tabellen und Views usw. Haben Sie noch keine Tabellen erstellt fehlen
die Ordner unterhalb von <USER>.
Abb. 13
S e ite 17 von 6 1
Projektarbeit
André Knaupp
3.3.1 USER ANLEGEN UND VERGEBEN VON RECHTEN
Um sich einen eigenen Benutzer anzulegen klicken Sie mit der rechten Maustaste auf
den Ordner <Benutzer> in der linken Hälfte des Fensters.
Es erscheint folgendes Fenster (Abb. 14).
Abb. 14
Geben Sie hier alle relevanten Daten an (Name, Kennwort und Kennwort bestätigen)
und klicken Sie dann auf <OK> um den Benutzer anzulegen.
Nach dem ein neuer Benutzer angelegt ist, kann man diesem im SQL-Manager
Rechte zuweisen.
Doppelklicken Sie hierzu auf den Ordner des neu angelegten Users.
Unter <Recht> können sie dem User verschiedene Rechte, z.B. Benutzer anzulegen,
zu ändern oder zu löschen, zuweisen (Abb. 15).
Um Userrechte zu verwalten müssen Sie als USER: _SYSTEM angemeldet sein oder
Ihrem zuvor erstellten User die Rechte vergeben.
S e ite 18 von 6 1
Projektarbeit
André Knaupp
Abb. 15
Unter Zugriff sehen Sie ob des entsprechende Recht gewährt ist oder nicht.
Unter <Objekt> werden die gewährten Rechte des USERS für Tabellen dargestellt.
Hier gibt es drei Möglichkeiten :
1. Nicht gewährt
2. Gewährt
3. Gewährt mit Gewähroption (erlaubt es dem User Rechte zu
vergeben
S e ite 19 von 6 1
Projektarbeit
André Knaupp
3.3.2 ANMELDEN UND NAMESPACE WECHSELN
Wenn Sie sich unter einem anderen Username anmelden möchten wählen Sie aus
dem Menu <Datei> den Menupunkt <Change Namespace>.
Es erscheint der Cache Connection Manager (Abb. 16).
Abb. 16
Melden Sie sich hier mit Ihrem neuen Benutzernamen und Passwort an, damit ist
sichergestellt, dass Tabellen die Sie anlegen auch Ihrem Benutzer zugeordnet werden und Sie die Rechte besitzen den Zugriff auf ihre Tabellen zu verwalten.
Hier können Sie auch in einen anderen Namespace wechseln z.B. <SAMPLES>
um sich die mitgelieferten Beispiele anzuschauen.
Um mit den Samples zu arbeiten müssen Sie sich als User <_System> anmelden.
S e ite 20 von 6 1
Projektarbeit
André Knaupp
3.3.3 DIE ERSTE TABELLE ERSTELLEN UND VERWALTEN
Wenn Sie die erste Tabelle erstellen möchten wählen Sie aus dem Menu <Objekt>
auf den Menupunkt <Abfrage>, es erscheint folgendes Fenster (Abb. 17).
SQL-Anweisung
ausführen
Abb. 17
Beachten Sie, dass der Caché SQL-Manager kein <;> als Endekennung einer
Anweisung benötigt.
Geben Sie nun die entsprechende SQL-Anweisung ein.
Ausgeführt wird die Anweisung durch drücken des obersten Buttons auf der rechten
Seite des Fensters.
War die Ausführung erfolgreich erhalten Sie eine Fertigmeldung in der unteren Hälfte
des Fensters.
Fehlermeldungen werden in einem Popupfenster angezeigt (Abb. 17.1).
Abb. 17.1
Nachdem Sie erfolgreich die erste Tabelle erzeugt haben können Sie im
SQL-Manager durch einen Doppelklick auf den Ordner <Tabellen> die Details der
Tabelle anschauen (Abb. 18).
S e ite 21 von 6 1
Projektarbeit
André Knaupp
Abb. 18
Unter <Allgemein> können Sie sich die Einzelheiten der Tabelle anschauen (Datentypen, benötigte und eindeutige Felder .....).
Wenn Sie nun die Spalten ihrer Tabelle sehen, werden Sie Spalten entdecken, die
nicht mit der Create-Anweisung erzeugt worden sind.
Diese Spalten (in diesem Fall ID und x_classname) werden von Caché automatisch
erzeugt und intern von Caché verwendet und müssen nicht bei SQL-Anweisungen
berücksichtigt werden
Das Register Indizes zeigt z.B. den Primary Key.
Die Register Trigger und Constraints zeigen, wie die Namen schon sagen, die zu der
Tabelle gehörigen Trigger und Constraints an (das Thema Trigger wird später noch
genauer erläutert).
Unter gespeicherte Abfragen kann man sich bereits ausgeführte SQL-Anweisungen
Anzeigen lassen.
Nachdem Sie die erste Tabelle, wie oben beschrieben, erstellt haben können sie
weitere Tabellen auch über das Register <Abfrage> erstellen (siehe nächstes Kapitel), genau so wie bereits bei Abb. 17 beschrieben.
S e ite 22 von 6 1
Projektarbeit
André Knaupp
3.3.4 SQL-ANWEISUNGEN AUSFÜHREN
Wenn SQL-Anweisungen mit dem SQL-Manager ausführen möchten klicken Sie, wie
unter 3.3.3 beschrieben, auf den Ordner Tabellen und geben Sie die SQL-Anweisung
im Register <Abfrage ausführen> ein.
Starten Sie die Anweisung durch klicken auf den oberen Button auf der rechten Seite
des Fensters.
Die entsprechenden Abfrageergebnisse werden in der unteren Hälfte des Fenster
angezeigt (Abb. 19). Fehlermeldungen werden wie in Abb. 17.1 dargestellt.
SQL-Anweisung
ausführen
Bereits ausgeführte Anweisung durchblättern
Abb. 19
Um bereits gespeicherte Anweisungen nochmals durchzuführen benutzen Sie den
nach oben / nach unten Pfeil auf der rechten Seite des Fensters.
Wie lange ausgeführte Anweisungen gespeichert werden, können Sie im
Konfigurationsmanager einstellen, voreingestellt sind 7 Tage.
Sollten Sie mit Tabellen arbeiten die viele Daten enthalten, werden nicht alle
Ergebnisse bei Abfragen und nicht alle Daten beim Öffnen einer Tabelle angezeigt.
Um alle Daten anzuzeigen, wählen Sie aus dem Menu <Optionen> den Menupunkt
<Voreinstellungen> und ändern die Werte für Abfragen und Tabelle öffnen
entsprechend ab.
S e ite 23 von 6 1
Projektarbeit
André Knaupp
3.3.5 VIEWS ERSTELLEN UND BEARBEITEN
Natürlich kann man in Caché Views auch mit SQL-Anweisungen erstellen, trotzdem
möchte ich eine weitere Methode zeigen wie man im SQL-Manager Views erstellen
und bearbeiten kann.
Wählen Sie dazu den Ordner <Views> aus dem Verzeichnis SQLUser mit einem
rechten Mausklick aus und wählen Sie den Menupunkt <neuer View>.
Der View-Wizard wird gestartet (Abb. 19.1)
Abb. 19.1
Geben Sie unter<Name> den Namen der View ein und unter <View Text> die
View-Anweisungen ohne den <create view ...as...> Teil.
Durch bestätigen mit <OK> wird die View erstellt.
Der View Text kann jederzeit bearbeitet werden, indem man die View durch einen
Doppelklick im Ordner View auswählt und den Button <Ansicht bearbeiten> wählt.
Es öffnet sich, wie in Abb. 19.1, ein Fenster, in dem Sie den View Text genauso
ändern können wie Sie ihn erstellt haben.
Den Namen der View kann man nachträglich nicht mehr ändern.
S e ite 24 von 6 1
Projektarbeit
André Knaupp
3.3.6 TABELLEN UND DATEN VON EXTERNEN DATENBANKEN IMPORTIEREN
Der SQL-Manager bietet die Möglichkeit Tabellen und Daten von externen
Datenbanken zu importieren. Dazu muss man im Konfigurationsmanager zuerst ein
SQL-Gateway einrichten (siehe Kapitel 4).
Ist das Gateway eingerichtet müssen Sie sich als User _System einloggen, ein
Password ist hier nicht notwendig.
Wählen Sie <Datenmigration> im Menu <Datei>, der Datenmigrations-Wizard wird
gestartet.
Klicken Sie auf <Weiter> und wählen Sie im nächsten Fenster die Verbindung aus,
die Sie vorher im Konfigurationmanager eingerichtet haben.
Es erscheint das in Abb. 19.2 dargestellte Fenster.
Abb. 19.2
Hier können Sie die, in der externen Datenbank, enthaltenen Tabellen auswählen.
Um die Daten und Tabellen zu importieren bestätigen Sie die Auswahl im nächsten
Fenster mit <Fertigstellen>.
Die Tabellen sind nun im SQL-Manager sichtbar.
Damit andere User auf die Daten zugreifen können, müssen natürlich noch die
entsprechenden Rechte vergeben werden.
S e ite 25 von 6 1
Projektarbeit
André Knaupp
3.3.7 TRIGGER IN CACHÉ
Für Trigger gibt es im SQL-Manager keinen Wizard.
Um einen Trigger zu erstellen, geben Sie die SQL-Anweisung ein wie in wie in Kapitel
3.3.4 beschrieben,.
Ein wesentlicher Unterschied zu den Triggern in Oracle ist, dass Trigger in Caché nur
für ein Ereignis definiert werden können. Möchte man nun insert und update
Ereignisse einer Tabelle überwachen benötigt man für jedes Ereignis einen eigenen
Trigger.
Die Syntax für das <CREATE TRIGGER...> Kommando ist in Caché wie folgt
definiert:
CREATE TRIGGER Name BEFORE/AFTER Event ORDER Integer ON Table
REFERENCING Alias Action
•
Name:
•
Event:
Gibt den Typ des Trigger-Events an.
Mögliche Werte sind, INSERT, DELETE oder UPDATE.
Bei UPDATE Triggern können Sie nach UPDATE noch das
Schlüsselwort OF verwenden um Spalten anzugeben die der Trigger berücksichtigen soll.
•
Dieser Parameter ist optional. Wenn Sie mehrere Trigger
Integer:
definiert haben die auf der selben Tabelle zum selben Zeitpunkt und zum
gleichen Ereignis arbeiten sollen gibt dieser Parameter die Reihenfolge
an in der die Trigger ausgeführt werden sollen.
Wird dieser Parameter nicht gesetzt werden die Trigger in der Reihenfolge ausgeführt in der sie erstellt worden sind.
•
Table:
•
Dieser Parameter ist Optional. Er ermöglicht es Ihnen eine
Alias:
Referenz auf die vorhandenen (old) Werte einer Tabelle bzw. auf die
neuen (new) Werte, die eingefügt werden sollen, zu erhalten.
•
Action:
Hier folgt der Programmcode des Triggers. Sie haben die
Möglichkeit, am Anfang des Programmcodes anzugeben ob Sie SQL oder
COS (Caché Object Skript) als Sprache für den Programmcode des Triggers verwenden möchten. Verwenden Sie dazu die Schlüsselwörter LANGUAGE SQL oder LANGUAGE COS. Wenn Sie die Definition der Sprache
weglassen, wird standardmäßig SQL verwendet.
Der Name des zu erstellenden Triggers.
Gibt die Tabelle an für die der Trigger erzeugt wurde.
Es folgt ein Beispiel zum Aufgabenblatt 5, Aufgabe 3 der Vorlesung DABS, bei der die
Auslastung einer Arena korrigiert werden soll wenn eine neue Veranstaltung
eingetragen, gelöscht bzw. ein Update auf die Tabelle Veranstaltung gemacht wird.
S e ite 26 von 6 1
Projektarbeit
André Knaupp
CREATE TRIGGER auslastung AFTER INSERT ON Veranstaltung
REFERENCING NEW as NewRow
BEGIN
UPDATE Arena
set Arena.Auslastung = Arena.Auslastung + NewRow.Dauer
where Arena.Auslastung > 0
and Arena.AID = NewRow.AID;
UPDATE Arena
set Arena.Auslastung = 0 + NewRow.Dauer
where Arena.Auslastung IS NULL
and Arena.AID = NewRow.AID;
END
Das kleine Beispiel zeigt die etwas veränderte Syntax im Vergleich zu den Triggern in
Oracle.
Hinweis:
Man benötigt zusätzlich noch 2 weitere Trigger für das Löschen und für den Update
der Daten.
Caché wandelt die <Create Trigger...> Anweisung in Caché ObjectScript Code um.
Ein Beispiel von Caché ObjectScript Code zu diesem Beispiel sieht wie folgt aus:
New SQLCODE,%ROWID,%ROWCOUNT
&sql(UPDATE Arena set Arena.Auslastung = Arena.Auslastung + :{Dauer*N}
where Arena.Auslastung > 0
and Arena.AID = :{AID*N})
If SQLCODE<0 Set %ok=0 Quit
&sql(UPDATE Arena set Arena.Auslastung = 0 + :{Dauer*N}
where Arena.Auslastung IS NULL
and Arena.AID = :{AID*N})
If SQLCODE<0 Set %ok=0 Quit
Wenn Sie Trigger benutzen möchten, die nicht wie in dem oben genannten Beispiel
einfach ein UPDATE auf einer Tabelle ausführen, wenn in eine andere Tabelle etwas
eingefügt wird, sondern die, wie in Triggeraufgabe 1 gefordert, Tabellen abfragen
um festzustellen ob eine Arena zu einer neuen Veranstaltung passt, müssen Sie den
Trigger in Cache ObjectScript programmieren.
S e ite 27 von 6 1
Projektarbeit
André Knaupp
Folgendes Beispiel zeigt den Trigger zu Aufgabe 1 Übungsblatt 5:
CREATE TRIGGER arena_passt_zu_veranst before insert on Veranstaltung
LANGUAGE COS
{
new aid,sid,count,SQLCODE
set aid = {aid}
//Zugriff auf die Veranstaltungs AID
set sid = {sid}
//Zugriff auf die Veranstaltungs SID
set count = 0 &sql(select count(*) into :count from Arena_fuer_Sport
where Arena_fuer_Sport.AID = :aid
and Arena_fuer_Sport.SID = :sid)
if (count = 0 )
{
set %ok=0
//Fehlermeldung durch Messagebox
set %msg="Arena ungeeignet fuer Sportart der Veranstaltung"
}
}
Um auf die neu einzufügenden bzw. die bereits vorhandenen Werte einer Tabelle
zuzugreifen haben Sie folgende Möglichkeiten:
Bei Insert Triggern:
{Spaltenname*O} (*O referenziert Old Values)
Bei Update Triggern:
{Spaltenname*O}
{Spaltenname*N} (*N referenziert New Values)
Bei Delete Triggern:
{Spaltenname*O}
S e ite 28 von 6 1
Projektarbeit
André Knaupp
3.4 DAS TERMINAL
Das Terminal bietet im Wesentlichen die Möglichkeiten des SQL-Managers nur ohne
grafische Oberfläche.
Es gibt aber auch Einschränkungen z.B. werden Revoke Kommandos vom Terminal
nicht unterstützt. Sinnvollerweise aber Grant Kommandos ???.
Ein Vorteil im Vergleich zum SQL-Manager ist, dass man Dateien importieren kann
um Tabellen zu erstellen und um Daten in Tabellen einzufügen.
Starten Sie das Terminal durch einen Klick auf den Caché Cube und die Auswahl des
Menupunktes <Terminal>.
Es erscheint das Fenster aus Abb. 20
Abb.20
Im Terminal haben Sie mehrere Möglichkeiten SQL-Anweisungen einzugeben bzw.
Dateien zu importieren.
Um den Namespace zu wechseln, um zum Beispiel die mitgelieferten Beispiele von
Caché zu bearbeiten oder anzuschauen, geben Sie an der Eingabeaufforderung
<ZN Namespacename> ein.
In welchem Namespace Sie sich gerade befinden, wird Ihnen an der
Eingabeaufforderung angezeigt (in Abb. 20 also der Namespace USER).
Hinweis:
Im Terminal können Sie im Menu <Edit> den Menupunkt <User Keys...> auswählen
um Shortcuts für häufig von Ihnen verwendete Eingaben zu definieren.
Die bietet sich besonders dann an, wenn Sie viel mit dem Terminal arbeiten, da die
Eingaben über die Kommandozeile oft lang sind.
S e ite 29 von 6 1
Projektarbeit
André Knaupp
3.4.1 DIE EINGABE ÜBER DIE KOMMANDOZEILE
Um mit SQL-Anweisungen über die Kommandozeile arbeiten zu können geben Sie an
der Eingabeaufforderung <Do $System.SQL.Shell()> ein (siehe Abb. 21).
Das Sie an der Shell angemeldet sind erkennen Sie an dem doppelten >> am
Zeilenanfang.
Abb. 21
Nun können Sie SQL-Anweisungen eingeben (ohne <;> als Endekennung).
Bestätigen Sie mit der Returntaste und geben Sie <GO> ein um die
Anweisung zu auszuführen (Abb. 21.1).
Das Datum wird in der Shell standardmäßig als Integer dargestellt.
Die Zählung beginnt am 31.12.1840 (in Tagen), 49805 entspricht also dem Datum
12.05.1977. Wie man die Datumsdarstellung ändert wird weiter unten erläutert.
Abb. 21.1
Die Shell bietet folgende Möglichkeiten:
•
Eingabe einer SQL-Anweisung. Nach Bestätigen mit der Returntaste wird
die SQL-Anweisung in einen SQL-Buffer geschrieben.
Es erscheint wieder die Eingabeaufforderung, die Zahl vor der
Eingabeaufforderung gibt die Anzahl der gespeicherten SQL-Anweisungen
an. Mit *SHOW kann man sich die eingegebenen Anweisungen anzeigen
lassen.*CLEAR löscht den SQL-Buffer. Wenn Sie GO eingeben werden die
gespeicherten Anweisungen ausgeführt.
•
Geben Sie EXIT ein um die Shell wieder zu verlassen und den SQL-Buffer
zu löschen.
S e ite 30 von 6 1
Projektarbeit
André Knaupp
•
Um die Datumsanzeige zu ändern, standardmäßig wird in Caché das
Datum als Integer angegeben, geben Sie SELECTMODE ODBC ein um die
Datumsdarstellung in die gewohnte Form (ODBC Mode) bringen.
Geben Sie LOGICAL an wenn Sie lieber mit Integer arbeiten.
SELECTMODE ohne weitere Angaben gibt den aktuellen Modus aus.
•
Mit SETUSER Username Password können Sie sich einloggen, wenn Sie
Username und Password weglassen wird ihnen der aktuelle User
angezeigt
Fehlermeldungen werden Ihnen über die Shell angezeigt (Abb. 21.2)
Abb. 21.2
S e ite 31 von 6 1
Projektarbeit
André Knaupp
3.4.2 IMPORTIEREN VON DATEIEN
Es gibt mehrere Möglichkeiten Dateien zu importieren. Ich werde zwei Methoden der
Klasse $Sytems.SQL erläutern die den Import von Dateien ermöglichen.
3.4.2.1 Die Methode Systems.SQL.Oracle()
Um DDL Scripts von der Kommandozeile aus zu laden gehen Sie bitte wie in
Abb. 22 dargestellt vor und geben an der Eingabeaufforderung
<Do $System.SQL.Oracle()> ein.
Dieses Beispiel bezieht sich auf Oracle DDL Scripts, Caché unterstützt den Import
weiterer DDL Scripts schauen Sie hierzu bitte im Manual unter %System.SQL für die
Details nach.
Abb. 22
Nachdem Sie mit Return bestätigt haben erscheint auf dem Bildschirm eine
Information welche Kommandos unterstützt werden:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
CREATE TABLE
CREATE VIEW
CREATE USER
CREATE ROLL
ALTER TABLE
CREATE [ UNIQUE ] INDEX
DROP TABLE
DROP INDEX
DROP VIEW
INSERT
UPDATE
DELETE
SET OPTION
GRANT { ALTER | SELECT | INSERT | UPDATE | DELETE | REFERENCES |
ALL PRIVILEGES }
Außerdem werden Sie darauf hingewiesen, dass keine Delimited Identifiers
unterstützt werden. Wie Sie die Unterstützung für Delimited Identifiers einschalten
können Sie im Kapitel Konfigurationsmanager nachlesen.
Um fortzufahren drücken Sie <y> und bestätigen Sie mit <Return>.
S e ite 32 von 6 1
Projektarbeit
André Knaupp
Im weiteren Verlauf werden Sie aufgefordert Ihren Benutzernamen und Ihr Passwort
einzugeben.
Danach werden Sie nach dem Pfad der Importdatei und dem Pfad der Datei gefragt
in welcher eventuelle Fehlermeldungen gespeichert werden sollen.
Als Parameter geben Sie bei der Importdatei <R> ein, bei der Fehlerdatei <WNS>.
Leider habe ich in der Dokumentation nichts über diese Parameter gefunden.
Nun werden Sie noch gefragt ob nicht unterstützte Anweisungen in ein Logfile
geschrieben werden sollen und mit welchem Begrenzerzeichen (z.B. <;>) die
SQL-Anweisungen abgeschlossen sind.
Als letztes müssen Sie angeben wie viele Sekunden nach einem Fehler gewartet
bevor das nächste Statement ausgeführt wird.
Im Fehlerfall hat man dann die Möglichkeit das Einlesen weiterer Statements mit
<Q> zu unterbinden.
Wenn alle Angaben und die SQL-Anweisungen fehlerlos waren sollten Sie folgenden,
bzw. einen ähnlichen, Bildschirm (Abb. 22.1) nach dem importieren einer Datei
erhalten.
Wichtig ist hier der Returnwert des SQLCODE, 0 bedeutet wie unschwer zu erkennen
ist das die Ausführung erfolgreich war.
Abb. 22.1
Eine weitere Methode um DDL-Scripts zu importieren können Sie im folgenden
Kapitel nachlesen.
S e ite 33 von 6 1
Projektarbeit
André Knaupp
3.4.2.2 Die Methode DDLImport().
Die Methode DDLImport() ist wie die Methode Oracle() für den Import von
DDL-Scripts zuständig. Sie benötigt einige Parameter beim Aufruf.
Ein Aufruf mit allen Parametern sieht wie folgt aus:
DDLImport(DDLMode, SQLUser, infile, outfile, nosup , nosupfile, deos, errpause)
Die einzelnen Parameter:
• DDLMode:
Hersteller der die zu importierende Datei generiert hat, bzw. dessen Syntax benutzt wurde. Dieser Parameter wird benötigt.
Unterstützt werden: FDBMS
Informix
Interbase
MSSQLServer
Oracle
Sybase
• SQLUser:
Caché SQL Benutzername, unter welchem der Import
durchgeführt werden soll. Dieser Parameter wird benötigt.
• Infile:
Der komplette Pfad und Namen der Datei die importiert
werden soll. Dieser Parameter wird benötigt
• Outfile:
Der komplette Pfad und Namen der Datei in der Fehler
gespeichert werden soll. Standardmäßig wird der gleiche Pfad
und Name des Infiles verwendet, an die Endung des Infiles wird
_Errors.log angehängt.
Dieser Parameter ist optional.
• Nosup:
Ein Flag, es kann entweder den Wert True oder False
annehmen. Ist es auf True gesetzt werden nicht
unterstütze Anweisungen in die Datei Nosupfile
geschrieben. Dieser Parameter ist optional.
• Nosupfile:
Wenn das Nosup Flag auf True gesetzt wird bestimmt der
Parameter Nosupfile den Dateinamen der Datei in welche die
Anweisungen gespeichert werden die nicht unterstützt werden.
Standardmäßig wird der gleiche Pfad und Name des Infiles verwendet an die Endung des Infiles wird _Unsupported.log angehängt. Dieser Parameter ist optional.
• Deos:
Ist der Begrenzer des Endes der Anweisung.
Standardmäßig wird der Begrenzer gewählt der
entsprechend dem in DDLMode angegebenen Herstellers
genommen. Dieser Parameter ist optional.
S e ite 34 von 6 1
Projektarbeit
• Errpause:
André Knaupp
Anzahl an Sekunden die nach einem Fehler gewartet
werden soll, bevor die nächste Anweisung ausgeführt
wird. Standardmäßig sind 5 Sekunden eingestellt.
Dieser Parameter ist optional.
Ein Beispiel für den Import eines Oracle-DDL-Scripts sehen Sie in Abb. 23.
Abb. 23
Sie erhalten eine Fertigmeldung nachdem die Datei importiert wurde.
Nach dem Import des DDL-Scripts zur Aufgabe 1 (Aufgabenblatt 3) sollte Ihnen das
Terminal die in Abb. 24 dargestellte Meldung ausgeben.
Abb. 24
S e ite 35 von 6 1
Projektarbeit
André Knaupp
4 DER KONFIGURATIONSMANAGER
Starten Sie den Konfigurationsmanager durch einen Klick auf den Caché Cube und
die Auswahl des Menupunktes <Konfigurationsmanager>.
Es erscheint das Fenster aus Abb. 25.
Abb. 25
Im Konfigurationsmanager können Sie unterschiedliche Einstellungen vornehmen.
Unter <Allgemein> kann man festlegen ob Caché automatisch beim Systemstart
gestartet werden soll oder nicht.
Im Weiteren werden einige Einstellungen erläutert, die unter <Erweitert>
vorgenommen werden können.
S e ite 36 von 6 1
Projektarbeit
André Knaupp
4.1 ERWEITERTE SQL EINSTELLUNGEN
Wählen Sie den Ordner SQL um verschiedene Einstellungen vorzunehmen (Abb. 26).
Man kann hier zum Beispiel die Unterstützung von Delimited Identifiers einstellen,
nach welcher Zeit SQL Anweisungen im SQL-Manager gelöscht werden sollen,
ob das Löschen nicht vorhandener Tabellen mit drop... zu einem Fehler führen soll
oder nicht usw.
Abb. 26
S e ite 37 von 6 1
Projektarbeit
André Knaupp
4.2 EIN SQL-GATEWAY EINRICHTEN
Wählen Sie den Ordner SQL Gateway und dort <Hinzufügen> um ein neues
SQL-Gateway einzurichten (Abb. 27).
Abb. 27
Nun werden Sie aufgefordert einen Namen für die Verbindung einzugeben.
Danach müssen Sie noch den Data Source Name, den Benutzernamen und das
Passwort eingeben.
Nachdem Sie alle Angaben gemacht haben klicken Sie auf <OK> um den
Konfigurationsmanager zu beenden.
Um die Änderungen ohne Neustart von Caché zu aktivieren wählen Sie im folgendem
Dialog (Abb. 28) <Aktivieren>.
Abb. 28
S e ite 38 von 6 1
Projektarbeit
André Knaupp
5 SIEGERLISTE MIT ADO
Für das Programm habe ich nicht den, von Caché, installierten Wizard verwendet.
Wenn man den Caché Wizard in Visual Basic verwenden möchte, sollte man Caché Studio,
wie in Kapitel 6 erwähnt, verwenden.
Caché Studio ist ein Tool, um objektorientiert mit Datenbanken zu arbeiten.
Man kann dort z.B. SQL-Anweisungen als Methoden definieren, die dann später in Visual Basic
zur Verfügung stehen.
Nun zu dem von mir erstellten Programm, zur Ausgabe einer Siegerliste.
Es werden die ersten drei Sieger ausgegeben.
Das Programm liest zuerst alle Veranstaltungen aus bei denen es ein Finale gibt und die
bereits stattgefunden hat (es sind Einnahmen vorhanden).
Wenn eine Veranstaltung gewählt wurde, wird überprüft, in welcher Einheit (s oder m) die
Ergebnisse gemessen werden.
Handelt es sich um Sportarten die nach Sekunden gemessen wird, werden die ersten drei
Sportler, der nach dem Ergebnis sortierten Liste, ausgegeben.
Werden die Ergebnisse in Metern gemessen, wird die Liste absteigend sortiert, danach die ersten
drei Sportler ausgegeben.
Den Sourcecode finden Sie im Anhang.
S e ite 39 von 6 1
Projektarbeit
André Knaupp
6 DER CACHÉ WIZARD IN VISUAL BASIC
Wenn Sie mit dem Caché Wizard in Visual Basic arbeiten möchten, empfiehlt es sich,
Caché Studio zu verwenden. In Visual Basic kann man später die SQL-Abfragen, die
man vorher in Cache Studio als Methoden definiert hat, nutzen.
Ich werde hier beschreiben wie man mit Visual Basic eine Oberfläche erstellt mit der
man die Tabelle Sportler verwalten kann.
Starten Sie Caché Studio durch Auswahl des Menupunktes <Studio> im Caché Cube
Menu. Das Studio wird gestartet (Abb.29).
Projektfenster
Abb. 29
Wenn Sie die Tabelle Sportler im SQL-Manager erstellt haben gehen Sie bitte wie
folgt vor:
•
Wählen Sie mit dem einem rechten Mausklick im Projektfenster den
Ordner <Klassen> aus.
•
Wählen Sie <Hinzufügen>. In dem Auswahlfenster wählen Sie den
Namespace USER und dort die Tabelle Sportler aus.
Bestätigen Sie mit <Hinzufügen>.
•
Sie können nun im Ordner <Klassen> die Klasse Sportler sehen.
•
Klicken Sie auf Sportler, wählen Sie im Menu <Klasse> den Menupunkt
<Hinzufügen> und dort <Neue Abfrage>. Der Wizard wird gestartet.
S e ite 40 von 6 1
Projektarbeit
André Knaupp
•
Geben Sie nun den Namen (für das Beispiel: Suche) der Anweisung an.
Klicken Sie <Weiter>. Im nächsten Fenster machen Sie keine Angaben.
•
Nun werden Sie aufgefordert Spalten auszuwählen.
Wählen Sie alle Spalten aus, auch die interne ID von Caché.
Bestätigen Sie mit <Fertig stellen>. Die SQL-Anweisung wird erstellt.
•
Wählen Sie nun aus dem Menu <Erstellen> den Menupunkt
<Kompilieren>.
•
Starten Sie nun Visual Basic. Wählen Sie im Menu <Add-Ins> den Caché
Form Wizard. Der Wizard begrüßt Sie.
•
Sie müssen sich im nächsten Fenster an Caché anmelden.
Nach erfolgreicher Anmeldung wählen Sie im nächsten Fenster die Klasse
Sportler aus und bestätigen Sie mit <Weiter>.
•
Nun übernehmen Sie alle Eigenschaften in das Formular. (Für das Beispiel wählen Sie die Reihenfolge: PID, PName, GebDat, Geschlecht und
Nation). Bestätigen Sie mit <Fertig> um die Anwendung fertig zu stellen.
Wenn Sie das Programm starten müssen Sie sich zunächst wieder an Caché
anmelden. Nach der Anmeldung erscheint das in Abb. 30 dargestellt Fenster.
Abb. 30
Alle Button´s, auch das Menu, sind voll funktionsfähig.
Sie können neue Sportler eintragen und Sportler suchen um die Daten zu ändern
oder zu löschen.
Wenn Sie <Suche...> wählen öffnet sich ein neues Fenster. Dort können Sie unter
Query Name, die vorher erstellte Abfrage, <Suche> auswählen.
Mit dem Button <Query> führen Sie die Abfrage aus.
Es müssten alle Sportler angezeigt werden.
Durch die Auswahl eines Sportlers kehren Sie wieder zum ersten Fenster zurück um
die Sportlerdaten zu bearbeiten.
S e ite 41 von 6 1
Projektarbeit
André Knaupp
7 FAZIT
Das ist nun das Ende der Projektarbeit und wenn man die vorangegangen Seiten
gelesen hat könnte man meinen, dass das eigentlich nicht so schwierig gewesen sein
kann. Ich kann Ihnen aber versichern, dass das Einarbeiten in Caché nicht so einfach
war wie es vielleicht den Anschein hat.
Das lag zum einen daran, dass es derzeit keine verfügbare Literatur, zum Thema
Caché der aktuellen Version, gibt. Genauer gesagt gibt es überhaupt nur ein Buch
dessen Auflage derzeit vergriffen und die neue Auflage noch nicht erschienen ist.
(Hinweis: Inzwischen gibt es die Neuauflage des Buches, siehe Literatur.) Zum anderen lag es daran, dass die meisten Entwickler objektorientiert mit Caché arbeiten und
natürlich auch die Dokumentation zu Caché auch mehr für objektorientierte Anwendungsentwicklung geschrieben ist.
Am meisten hat mir die Unterstützung durch die Newsgroup von InterSystems
geholfen. Dort habe ich schnelle und kompetente Hilfe bekommen.
Manch einer schien mir aber ziemlich verwundert, dass ich mit Caché nur für rein
relationale Datenbanken nutzte.
Nach der Einarbeitung bleibt zu sagen, dass Caché mit dem SQL-Manager ein gutes
Tool mit grafischer Oberfläche zum Arbeiten mit relationalen Datenbanken bietet.
Hier habe ich nur vermisst, dass man keine SQL-Scripte importieren kann.
Aus diesem Grund ist das Terminal unerlässlich; die beiden in Kapitel 3.4.2
beschriebenen Methoden ermöglichen das Importieren von Dateien.
S e ite 42 von 6 1
Projektarbeit
André Knaupp
8 ANHANG
8.1 ÜBUNGSAUFGABEN
8.1.1 AUFGABENBLATT 2: ERSTELLE RELATIONALES DB-SCHEMA AUS ER-DIAGRAMM
8.1.2 AUFGABENBLATT 3: DIVERSE SQL-BEFEHLE
Schreiben Sie interaktive SQL-Anweisungen für folgende Aufgaben:
Die Ausgaben zu den verschiedenen Aufgaben für die Beispieldatenbank finden Sie in
der Datei Ausgaben.pdf auf der CD.
1. Löschen Sie Ihre Tabellen.
Kopieren Sie stattdessen meine Tabellen, indem Sie das SQL-Script
import_cache.sql von CD ausführen.
Benutzen Sie dazu die Methoden aus Kapitel 3.4.2 (Importieren von Dateien).
Es gibt folgende Tabellen: Sportler, Sportart, Sportler_macht_Sport, Arena,
Arena_fuer_Sport, Veranstaltung, Sportler_nimmtteil_Veranst.
2. Wegen feuerpolizeilichen Auflagen müssen die Plätze in allen Arenen um 7%
reduziert werden. Führen Sie diese Änderung mit einem SQL-Kommando
durch.
3. Wegen politischen Schwierigkeiten darf das Land Nari nicht an den
Olympischen Spielen teilnehmen. Löschen Sie alle Sportler und Sportlerinnen
dieses Landes. Achten Sie auf abhängige Datensätze in Verbindungstabellen.
Zum Löschen der abhängigen Datensätze brauchen Sie Unterabfragen.
4. Ausgabe aller Daten aller Sportler und Sportlerinnen.
5. Name und Geburtsdatum aller Sportler und Sportlerinnen.
6. Name und Geschlecht aller Sportler und Sportlerinnen aus Deutschland sollen
angezeigt werden.
7. Alle Namen von Sportlerinnen aus Deutschland sollen angezeigt werden.
8. Alle Veranstaltungen (Nr. und Bezeichnung) sollen angezeigt werden, die in
der Arena, die "Am Rosenweg" liegt, stattfinden.
Verwenden Sie einen JOIN, keine Unterabfragen.
S e ite 43 von 6 1
Projektarbeit
André Knaupp
9. Ausgabe aller verschiedenen (Hinweis: DISTINCT) Sportarten, die von
Sportlern und Sportlerinnen mit der Nationalität Jamaica ausgeübt werden.
Verwenden Sie einen JOIN, keine Unterabfragen.
10. Wieviele Sitzplätze hat die Arena in der die Veranstaltung "Finale 100 m Lauf
Damen" stattfindet? Verwenden Sie einen JOIN, keine Unterabfragen.
11. Ausgabe aller Daten aller Sportler und Sportlerinnen (Hinweis: DISTINCT), die
an einer Veranstaltung in der Arena, die "Am Rosenweg" liegt, teilnehmen.
Verwenden Sie einen JOIN, keine Unterabfragen.
12. Ausgabe aller Arenen (Name, Plätze) mit den dazugehörigen Veranstaltungen
(Bezeichnung), geordnet nach Beginn und Dauer (absteigend).
13. Für jede Arena soll die Zahl der Veranstaltungen die in ihr stattfinden, die
Summe der Einnahmen, die durchschnittlichen, die minimalen und die
maximalen Einnahmen ermittelt werden.
14. Wiederholen Sie Aufgabe 14 aber zeigen Sie nur Arenen an, in denen
mindestens fünf Veranstaltungen stattfinden. (Hinweis: HAVING)
15. Nutzen Sie reguläre Ausdrücke und den Operator LIKE, um alle Sportarten zu
finden, die mit einem 100 m Lauf zu tun haben, z. B. der "100 m Lauf Herren"
oder der "100 m Lauf Damen ".
16. Unterabfragen: Suchen Sie nach den Namen aller Sportler und Sportlerinnen,
die aus dem gleichen Land kommen wie Frau Mbenko Buri.
17. Geben Sie alle Arenen aus, die mehr Plätze bieten als der Durchschnitt der
Arenen.
18. Die korrekte Verteilung der Veranstaltungen auf Arenen soll überprüft werden.
Geben Sie alle Veranstaltungen aus, die in einer Arena stattfinden, die für die
Sportart der Veranstaltung nicht geeignet ist.
19. Geben Sie lesendes Zugriffsrecht für Ihre Tabelle Sportler an alle anderen
Caché-Benutzer. Testen Sie! Ziehen Sie es wieder zurück. Testen Sie!
(Hinweis: GRANT und REVOKE)
Legen Sie hierzu einen oder mehrere User im SQL-Manager an (Kap. 3.3.1).
Melden Sie sich dann unter anderem Usernamen, zum Testen, an und überprüfen Sie die Zugriffsrechte.
20. Legen Sie eine Tabelle Sportlerin_tab und einen View Sportlerin_view, in
denen nur Sportlerinnen enthalten sind, aufgrund der bestehenden Tabelle
Sportler an. (Hinweis: in Caché kann man keine Tabelle mit create table ...as
select... erstellen)
Tragen Sie eine neue Sportlerin in die Tabelle Sportler ein.
Prüfen Sie, ob die neuen Daten in Sportlerin_tab und Sportlerin_view
S e ite 44 von 6 1
Projektarbeit
André Knaupp
übernommen wurden.
Löschen Sie die Tabelle Sportlerin_tab und aus der Tabelle Sportler die neu
eingefügte Sportlerin.
21. Geben Sie die Namen aller Sportlerinnen aus, die Leichtathletik betreiben.
Nutzen Sie dazu den View Sportlerin-view (Hinweis distinct).
22. Wie speichern Sie Mannschaften mit mehreren Sportlern?
23. Gegeben ist die Relation: Veranstaltung a "ist Folgeveranstaltung von"
Veranstaltung b ⊂ Veranstaltung × Veranstaltung.
Dabei hat jede Veranstaltung maximal eine Folgeveranstaltung.
Beispiel:
Der 100 m Zwischenlauf 1 ist Folgeveranstaltung der 100 m Vorläufe 1, 2 und
3 Zeichnen Sie diese Relation in das ER-Modell ein.
Realisieren Sie die Relation in der Datenbank.
24. Geben die Bezeichnung aller Veranstaltungen zusammen mit der Bezeichnung
einer evtl. vorhandenen Folgeveranstaltung aus. (Hinweis: left join)
S e ite 45 von 6 1
Projektarbeit
André Knaupp
8.2 AUSGABEN
Aufgabe 2:
(nur zur Überprüfung mit: select * from Arena)
AID
1
2
3
4
Aname
Olympiastadion
Schwimmhalle
Leichtathletikstadion
Sprinthalle
Aufgabe 4:
SID SName
1
Mueller
2
Meier
3
Mbenko Buri
4
Mendouse
5
Ruder
8
Hulb
9
Kropp
10
Ballet
11
Lebeque
12
Jao Dong
13
Jones
14
Miles
15
Davis
Aufgabe 5:
PName
Mueller
Meier
Mbenko Buri
Mendouse
Ruder
Hulb
Kropp
Ballet
Lebeque
Jao Dong
Jones
Miles
Davis
Ort
Am Olympiapark
Horst Buchmann Weg
Am Rosenweg
Horst Buchmann Weg
GebDat
05/12/1977
05/11/1977
05/10/1977
05/22/1977
05/12/1979
05/11/1977
05/11/1977
05/11/1977
05/11/1977
06/12/1978
06/05/1976
11/10/1977
08/07/1977
Nation
Deutschland
Deutschland
Luxembourg
Luxembourg
Luxembourg
Deutschland
Deutschland
England
Frankreich
China
Jamaica
Jamaica
Jamaica
Plaetze
65100
2790
27900
9300
Geschlecht
w
m
w
m
w
w
w
w
w
m
w
m
w
GebDat
05/12/1977
05/11/1977
05/10/1977
05/22/1977
05/12/1979
05/11/1977
05/11/1977
05/11/1977
05/11/1977
06/12/1978
06/05/1976
11/10/1977
08/07/1977
S e ite 46 von 6 1
Projektarbeit
Aufgabe 6:
Pname
Mueller
Meier
Hulb
Kropp
André Knaupp
Geschlecht
w
m
w
w
Aufgabe 7:
Pname
Mueller
Hulb
Kropp
Aufgabe 8:
Bezeichnung
Finale Speerwurf Herren
Finale Weitsprung Herren
Finale Speerwurf Damen
Finale Weitsprung Damen
VID
13
14
15
16
Aufgabe 9:
SName
100 m Lauf Herren
200 m Lauf Damen
Aufgabe 10:
Plaetze
9300
Aufgabe 11:
SID PName
2
Meier
4
Mendouse
12
Jao Dong
1
Mueller
3
Mbenko Buri
5
Ruder
8
Hulb
9
Kropp
10
Ballet
11
Lebeque
GebDat
05/11/1977
05/22/1977
06/12/1978
05/12/1977
05/10/1977
05/12/1979
05/11/1977
05/11/1977
05/11/1977
05/11/1977
Nation
Deutschland
Luxembourg
China
Deutschland
Luxembourg
Luxembourg
Deutschland
Deutschland
England
Frankreich
Geschlecht
m
m
m
w
w
w
w
w
w
w
S e ite 47 von 6 1
Projektarbeit
André Knaupp
Aufgabe 12:
Aname
Sprinthalle
Sprinthalle
Sprinthalle
Sprinthalle
Sprinthalle
Sprinthalle
Olympiastadion
Olympiastadion
Olympiastadion
Olympiastadion
Olympiastadion
Olympiastadion
Olympiastadion
Olympiastadion
Leichtathletikstadion
Leichtathletikstadion
Leichtathletikstadion
Leichtathletikstadion
Schwimmhalle
Schwimmhalle
Plaetze
9300
9300
9300
9300
9300
9300
65100
65100
65100
65100
65100
65100
65100
65100
27900
27900
27900
27900
2790
2790
Bezeichnung
Vorlauf 1 100 m Lauf Herren
Vorlauf 2 100 m Lauf Herren
Halbfinale 100 m Lauf Herren
Halbfinale 100 m Lauf Damen
Finale 100 m Lauf Herren
Finale 100 m Lauf Damen
Halbfinale 200 m Lauf Herren
Halbfinale 400 m Lauf Herren
Finale 200 m Lauf Herren
Finale 400 m Lauf Herren
Halbfinale 200 m Lauf Damen
Halbfinale 400 m Lauf Damen
Finale 200 m Lauf Damen
Finale 400 m Lauf Damen
Finale Speerwurf Herren
Finale Weitsprung Herren
Finale Speerwurf Damen
Finale Weitsprung Damen
Finale 100 m Delphin Herren
Finale 100 m Delphin Damen
Aufgabe 13:
Für die Spalten 2-6 wird im SQL-Manager die
Aggregate_6 verwendet. (Ein = Einnahme)
Aname
COUNT(VID) SUM(EIN)
Olympiastadion
8
162000.8
Schwimmhalle
4
33000.2
Leichtathletikstadion
4
39000.2
Sprinthalle
4
33000.2
Aufgabe 14:
Aname
Olympiastadion
Spaltenüberschrift Aggregat_2 bis
COUNT(VID) SUM(EIN)
8
162000.8
Aufgabe 15:
SID SName
1
100 m Lauf Herren
7
100 m Lauf Damen
Sportklasse
Leichtathletik
Leichtathletik
AVG(EIN)
20250.1
16500.1
19500.1
16500.1
MIN(EIN)
10000.1
15000.1
18000.1
15000.1
MAX(EIN)
25000.1
18000.1
21000.1
18000.1
AVG(EIN)
20250.1
MIN(EIN)
10000.1
MAX(EIN)
25000.1
einzel_Mann
E
E
Weltrekord
9,8 s
10,8 s
Aufgabe 16:
PName
Mbenko Buri
Mendouse
Ruder
S e ite 48 von 6 1
Projektarbeit
André Knaupp
Aufgabe 17:
AID AName
1
Olympiastadion
3
Leichtathletikstadion
Ort
Am Olympiapark
Am Rosenweg
Plaetze
65100
27900
Aufgabe 18:
VID
Bezeichnung
1
Halbfinale 100 m Lauf Herren
3
Finale 100 m Lauf Herren
AName
Schwimmhalle
Schwimmhalle
Aufgabe 20:
Ausgabe Sportlerin_Tab:
PID PName
1
Mueller
3
Mbenko Buri
5
Ruder
8
Hulb
9
Kropp
10
Ballet
11
Lebeque
13
Jones
15
Davis
GebDat
05/12/1977
05/10/1977
05/12/1979
05/11/1977
05/11/1977
05/11/1977
05/11/1977
06/05/1976
08/07/1977
Nation
Deutschland
Luxembourg
Luxembourg
Deutschland
Deutschland
England
Frankreich
Jamaica
Jamaica
Ausgabe Sportlerin_View:
PID PName
1
Mueller
3
Mbenko Buri
5
Ruder
8
Hulb
9
Kropp
10
Ballet
11
Lebeque
13
Jones
15
Davis
18
Lydia
(neue Sportlerin aus Tabelle Sportler ist sichtbar!)
GebDat
Nation
Geschlecht
05/12/1977
Deutschland
w
05/10/1977
Luxembourg
w
05/12/1979
Luxembourg
w
05/11/1977
Deutschland
w
05/11/1977
Deutschland
w
05/11/1977
England
w
05/11/1977
Frankreich
w
06/05/1976
Jamaica
w
08/07/1977
Jamaica
w
04/10/1977
Russland
w
Geschlecht
w
w
w
w
w
w
w
w
w
Aufgabe 21:
PName
Jones
Mueller
Mbenko Buri
Ruder
Hulb
Kropp
Ballet
Lebeque
Davis
S e ite 49 von 6 1
Projektarbeit
Aufgabe 24:
VID
Veranst
1
Halbfinale 100 m Lauf Herren
2
Halbfinale 100 m Lauf Damen
3
Finale 100 m Lauf Herren
4
Finale 100 m Lauf Damen
5
Halbfinale 200 m Lauf Herren
6
Halbfinale 400 m Lauf Herren
7
Finale 200 m Lauf Herren
8
Finale 400 m Lauf Herren
9
Halbfinale 200 m Lauf Damen
10
Halbfinale 400 m Lauf Damen
11
Finale 200 m Lauf Damen
12
Finale 400 m Lauf Damen
13
Finale Speerwurf Herren
14
Finale Weitsprung Herren
15
Finale Speerwurf Damen
16
Finale Weitsprung Damen
17
Finale 100 m Delphin Herren
18
Finale 100 m Delphin Damen
19
Vorlauf 1 100 m Lauf Herren
20
Vorlauf 2 100 m Lauf Herren
André Knaupp
Folgeveranst
Finale 100 m Lauf Herren
Finale 100 m Lauf Damen
Finale 200 m Lauf Herren
Finale 400 m Lauf Herren
Finale 200 m Lauf Damen
Finale 400 m Lauf Damen
Halbfinale 100 m Lauf Herren
Halbfinale 100 m Lauf Herren
S e ite 50 von 6 1
Projektarbeit
André Knaupp
8.3 MUSTERLÖSUNG FEHLT IN DIESER AUSGABE
8.4 IMPORTDATEI
Die Importdatei habe ich etwas erweitert um bei dem Siegerlistenprogramm eine
größere Auswahl an Sportarten zu haben bei denen bereits ein Finale stattgefunden
hat und es mehr Teilnehmer pro Veranstaltung gibt.
Die Idee meiner Frau, mit richtigen Olympiadaten zu arbeiten, habe ich aus zeitlichen
Gründen verworfen ;)
create table Sportler
(PID
varchar2
PName
varchar2
GebDat
date,
Nation
varchar2
Geschlecht
varchar2
create table Sportart
(SID
SName
Sportklasse
einzel_Mannsch
Weltrekord
(5)
(30)
primary key,
not null,
(20),
(1));
varchar2
varchar2
varchar2
varchar2
varchar2
(5)
primary key,
(20) not null,
(20),
(1),
(20));
create table Arena
(AID
varchar2 (5)
primary key,
AName
varchar2 (25),
Ort
varchar2 (50),
Plaetze
integer);
create table Veranstaltung
(VID
varchar2 (5)
primary key,
Beginn
datetime,
Dauer
integer,
Bezeichnung varchar2 (40),
Einnahme
number (9,2),
AID
varchar2 (5)
constraint findet_statt_in references Arena (AID),
SID
varchar2 (5)
constraint fuer_Sportart references Sportart (SID));
create table Arena_fuer_Sport
(SID
varchar2 (5)
constraint fk_Sport references Sportart (SID),
AID
varchar2 (5)
constraint fk_Arena references Arena (AID));
create table Sportler_macht_Sport
(PID
varchar2 (5)
constraint
SID
varchar2 (5)
constraint
create table Sportler_nimmtteil_Veranst
(PID
varchar2 (5)
constraint
VID
varchar2 (5)
constraint
Ergebnis
varchar2 (20));
fk_SportlerSport references Sportler (PID),
fk_Sportart references Sportart (SID));
fk_Sportler references Sportler (PID),
fk_Veranst references Veranstaltung (VID),
S e ite 51 von 6 1
Projektarbeit
André Knaupp
insert into Sportler values
('1', 'Mueller', TO_DATE('12.05.77', 'DD.MM.YY'), 'Deutschland', 'w');
insert into Sportler values
('2', 'Meier', TO_DATE('11.05.77', 'DD.MM.YY'), 'Deutschland', 'm');
insert into Sportler values
('3', 'Mbenko Buri', TO_Date('10.05.77', 'DD.MM.YY'), 'Luxembourg', 'w');
insert into Sportler values
('4', 'Mendouse', TO_DATE('22.05.77', 'DD.MM.YY'), 'Luxembourg', 'm');
insert into Sportler values
('5', 'Ruder', TO_DATE('12.05.79', 'DD.MM.YY'),'Luxembourg', 'w');
insert into Sportler values
('6', 'Omar', TO_DATE('12.05.81', 'DD.MM.YY'), 'Nari', 'w');
insert into Sportler values
('7', 'Abdulla', TO_DATE('12.05.77', 'DD.MM.YY'), 'Nari', 'm');
insert into Sportler values
('8', 'Hulb', TO_DATE('11.05.77', 'DD.MM.YY'), 'Deutschland', 'w');
insert into Sportler values
('9', 'Kropp', TO_DATE('11.05.77', 'DD.MM.YY'), 'Deutschland', 'w');
insert into Sportler values
('10', 'Ballet', TO_DATE('11.05.77', 'DD.MM.YY'), 'England', 'w');
insert into Sportler values
('11', 'Lebeque', TO_DATE('11.05.77', 'DD.MM.YY'), 'Frankreich', 'w');
insert into Sportler values
('12', 'Jao Dong', TO_DATE('12.06.78', 'DD.MM.YY'), 'China', 'm');
insert into Sportler values
('13', 'Jones', TO_DATE('05.06.76', 'DD.MM.YY'), 'Jamaica', 'w');
insert into Sportler values
('14', 'Miles', TO_DATE('10.11.77', 'DD.MM.YY'), 'Jamaica', 'm');
insert into Sportler values
('15', 'Davis', TO_DATE('07.08.77', 'DD.MM.YY'), 'Jamaica', 'w');
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
Sportart values ('1', '100 m Lauf Herren', 'Leichtathletik', 'E', '9,8 s');
Sportart values ('2', '200 m Lauf Herren', 'Leichtathletik', 'E', '19,8 s');
Sportart values ('3', '400 m Lauf Herren', 'Leichtathletik', 'E', '41,8 s');
Sportart values ('4', '100 m Delphin Herren', 'Schwimmen', 'E', '30,8 s');
Sportart values ('5', 'Speerwurf Herren', 'Leichtathletik', 'E', '87,85 m');
Sportart values ('6', 'Weitsprung Herren', 'Leichtathletik', 'E','7,56 m');
Sportart values ('7', '100 m Lauf Damen', 'Leichtathletik', 'E', '10,8 s');
Sportart values ('8', '200 m Lauf Damen', 'Leichtathletik', 'E', '21,8 s');
Sportart values ('9', '400 m Lauf Damen', 'Leichtathletik', 'E', '44,8 s');
Sportart values ('10', '100 m Delphin Damen', 'Schwimmen', 'E', '32,8 s');
Sportart values ('11', 'Speerwurf Damen', 'Leichtathletik', 'E', '79,85 m');
sportart values ('12', 'Weitsprung Damen', 'Leichtathletik', 'E','6,87 m');
sportart values ('13', 'Volleyball', 'Ballsport', 'M','Kuba');
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
values
values
values
values
values
values
values
values
values
values
values
values
('2',
('2',
('2',
('2',
('2',
('2',
('4',
('4',
('4',
('4',
('4',
('4',
'1');
'2');
'3');
'4');
'5');
'6');
'1');
'2');
'3');
'4');
'5');
'6');
S e ite 52 von 6 1
Projektarbeit
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
André Knaupp
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
('7', '1');
('7', '2');
('7', '3');
('7', '4');
('7', '5');
('7', '6');
('12', '1');
('12', '2');
('12', '3');
('12', '4');
('12', '5');
('12', '6');
('13', '1');
('1', '7');
('1', '8');
('1', '9');
('1', '10');
('1', '11');
('1', '12');
('3', '7');
('3', '8');
('3', '9');
('3', '10');
('3', '11');
('3', '12');
('5', '7');
('5', '8');
('5', '9');
('5', '10');
('5', '11');
('5', '12');
('6', '7');
('6', '8');
('6', '9');
('6', '10');
('6', '11');
('6', '12');
('8', '7');
('8', '8');
('8', '9');
('8', '10');
('8', '11');
('8', '12');
('9', '7');
('9', '8');
('9', '9');
('9', '10');
('9', '11');
('9', '12');
('10', '7');
('10', '8');
('10', '9');
('10', '10');
('10', '11');
('10', '12');
('11', '7');
('11', '8');
S e ite 53 von 6 1
Projektarbeit
André Knaupp
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
Sportler_macht_Sport
insert
insert
insert
insert
into
into
into
into
Arena
Arena
Arena
Arena
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
Arena_fuer_Sport
values
values
values
values
('1',
('2',
('3',
('4',
values
values
values
values
values
values
('11',
('11',
('11',
('11',
('14',
('15',
'9');
'10');
'11');
'12');
'8');
'8');
'Olympiastadion', 'Am Olympiapark', 70000);
'Schwimmhalle', 'Horst Buchmann Weg', 3000);
'Leichtathletikstadion', 'Am Rosenweg', 30000);
'Sprinthalle', 'Horst Buchmann Weg', 10000);
values
values
values
values
values
values
values
values
values
values
values
values
values
('4', '2');
('10', '2');
('1', '4');
('7', '4');
('5', '3');
('6', '3');
('11', '3');
('12', '3');
('2', '1');
('3', '1');
('8', '1');
('9', '1');
('13', '4');
insert into Veranstaltung values
('1', '1996-08-22 15:00:00', 80, 'Halbfinale 100 m Lauf Herren', 15000.10, '2', '1');
insert into Veranstaltung values
('2', '1996-08-22 16:00:00', 90, 'Halbfinale 100 m Lauf Damen', 15000.10, '4', '7');
insert into Veranstaltung values
('3', '1996-08-23 15:00:00', 80, 'Finale 100 m Lauf Herren', 18000.10, '2', '1');
insert into Veranstaltung values
('4', '1996-08-23 16:00:00', 90, 'Finale 100 m Lauf Damen', 18000.10, '4', '7');
insert into Veranstaltung values
('5', '1996-08-24 14:00:00', 80, 'Halbfinale 200 m Lauf Herren', 22000.10, '1', '2');
insert into Veranstaltung values
('6', '1996-08-24 15:00:00', 90, 'Halbfinale 400 m Lauf Herren', 22000.10, '1', '3');
insert into Veranstaltung values
('7', '1996-08-25 14:00:00', 80, 'Finale 200 m Lauf Herren', 25000.10, '1', '2');
insert into Veranstaltung values
('8', '1996-08-25 15:00:00', 90, 'Finale 400 m Lauf Herren', 24000.10, '1', '3');
insert into Veranstaltung values
('9', '1996-08-26 15:00:00', 80, 'Halbfinale 200 m Lauf Damen', 10000.10, '1', '8');
insert into Veranstaltung values
('10', '1996-08-26 16:00:00', 90, 'Halbfinale 400 m Lauf Damen', 20000.10, '1', '9');
insert into Veranstaltung values
('11', '1996-08-27 15:00:00', 80, 'Finale 200 m Lauf Damen', 15000.10, '1', '8');
insert into Veranstaltung values
('12', '1996-08-27 16:00:00', 90, 'Finale 400 m Lauf Damen', 24000.10, '1', '9');
insert into Veranstaltung values
('13', '1996-08-28 13:00:00', 80, 'Finale Speerwurf Herren', 18000.10, '3', '5');
insert into Veranstaltung values
('14', '1996-08-28 14:00:00', 90, 'Finale Weitsprung Herren', 21000.10, '3', '6');
insert into Veranstaltung values
('15', '1996-08-29 15:00:00', 80, 'Finale Speerwurf Damen', NULL, '3', '11');
insert into Veranstaltung values
S e ite 54 von 6 1
Projektarbeit
('16', '1996-08-29 16:00:00', 90,
insert into Veranstaltung values
('17', '1996-08-30 15:00:00', 80,
insert into Veranstaltung values
('18', '1996-08-30 16:00:00', 90,
insert into Veranstaltung values
('19', '1996-08-21 15:00:00', 80,
insert into Veranstaltung values
('20', '1996-08-21 16:00:00', 80,
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
André Knaupp
'Finale Weitsprung Damen', NULL, '3', '12');
'Finale 100 m Delphin Herren', NULL, '2', '4');
'Finale 100 m Delphin Damen', NULL, '2', '10');
'Vorlauf 1 100 m Lauf Herren', NULL, '4', '1');
'Vorlauf 2 100 m Lauf Herren', NULL, '4', '1');
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
values ('2', '1', '9.89 s');
values ('4', '1', '9.9 s');
values ('7', '1', '10.1 s');
values ('12', '1', '10.2 s');
values ('13', '1', '10.11 s');
values ('2', '3', '9.8 s');
values ('4', '3', '9.87 s');
values ('7', '3', '10.05 s');
values ('12', '3', '10.1 s');
values ('13', '1', '9.83 s');
values ('1', '2', '10.2 s');
values ('3', '2', '10.25 s');
values ('5', '2', '10.3 s');
values ('6', '2', '10.4 s');
values ('8', '2', '10.35 s');
values ('9', '2', '10.4 s');
values ('10', '2', '10.18 s');
values ('11', '2', '10.15 s');
values ('1', '4', '10.0 s');
values ('5', '4', '10.12 s');
values ('6', '4', '10.25 s');
values ('8', '4', '10.12 s');
values ('9', '4', '10.5 s');
values ('10', '4', '10.1 s');
values ('11', '4', '10.11 s');
values ('2', '5', '16.89 s');
values ('4', '5', '16.9 s');
values ('7', '5', '17.1 s');
values ('12', '5', '17.2 s');
values ('2', '6', '46.89 s');
values ('4', '6', '46.9 s');
values ('7', '6', '47.1 s');
values ('12', '6', '47.2 s');
values ('2', '7', '16.8 s');
values ('4', '7', '16.99 s');
values ('7', '7', '17.12 s');
values ('12', '7', '17.11 s');
values ('2', '8', '46.77 s');
values ('4', '8', '46.89 s');
values ('7', '8', '47.01 s');
values ('12', '8', '47.02 s');
values ('1', '7', '18.2 s');
values ('3', '7', '18.25 s');
values ('5', '7', '18.3 s');
values ('6', '7', '19.42 s');
values ('8', '7', '19.35 s');
values ('9', '7', '19.4 s');
S e ite 55 von 6 1
Projektarbeit
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
André Knaupp
values ('10', '7', '18.18 s');
values ('11', '7', '19.15 s');
values ('1', '8', '48.2 s');
values ('3', '8', '48.25 s');
values ('5', '8', '48.3 s');
values ('6', '8', '49.42 s');
values ('8', '8', '49.35 s');
values ('9', '8', '49.46 s');
values ('10', '8', '48.18 s');
values ('11', '8', '49.15 s');
values ('1', '9', '18.2 s');
values ('3', '9', '18.25 s');
values ('5', '9', '18.3 s');
values ('6', '9', '19.42 s');
values ('8', '9', '19.35 s');
values ('9', '9', '19.4 s');
values ('10', '9', '18.18 s');
values ('11', '9', '19.15 s');
values ('14', '9', '19.43 s');
values ('15', '9', '19.44 s');
values ('1', '10', '48.2 s');
values ('3', '10', '48.25 s');
values ('5', '10', '48.3 s');
values ('6', '10', '49.42 s');
values ('8', '10', '49.35 s');
values ('9', '10', '49.46 s');
values ('10', '10', '48.18 s');
values ('11', '10', '49.15 s');
values ('1', '11', '18.12 s');
values ('3', '11', '18.15 s');
values ('5', '11', '18.13 s');
values ('8', '11', '19.25 s');
values ('9', '11', '19.24 s');
values ('10', '11', '18.1 s');
values ('11', '11', '19.1 s');
values ('1', '12', '48.12 s');
values ('3', '12', '48.2 s');
values ('5', '12', '48.3 s');
values ('6', '12', '49.21 s');
values ('8', '12', '49.33 s');
values ('10', '12', '48.28 s');
values ('11', '12', '49.14 s');
values ('2', '13', '87.77 m');
values ('4', '13', '86.5 m');
values ('7', '13', '87.73 m');
values ('12', '13', '87.58 m');
values ('2', '14', '7.89 m');
values ('4', '14', '7.98 m');
values ('7', '14', '7.67 m');
values ('12', '14', '7.85 m');
(pid, vid) values ('1', '15');
(pid, vid) values ('3', '15');
(pid, vid) values ('5', '15');
(pid, vid) values ('8', '15');
(pid, vid) values ('9', '15');
(pid, vid) values ('10', '15');
(pid, vid) values ('11', '15');
S e ite 56 von 6 1
Projektarbeit
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
into
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
Sportler_nimmtteil_Veranst
André Knaupp
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
(pid,
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
vid)
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
values
('1', '16');
('3', '16');
('5', '16');
('8', '16');
('9', '16');
('10', '16');
('11', '16');
('2', '17');
('4', '17');
('7', '17');
('12', '17');
('1', '18');
('3', '18');
('5', '18');
('8', '18');
('9', '18');
('10', '18');
('11', '18');
S e ite 57 von 6 1
Projektarbeit
André Knaupp
8.5 SIEGERLISTE - SOURCECODE
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Private Sub CmdStart_Click()
Dim auswahl As String
IF CmbSportart.Text <> "Bitte auswählen" Then
'Siegerfelder einblenden
Me.Lbl1Sieger.Visible = True
Me.Lbl2Sieger.Visible = True
Me.Lbl3Sieger.Visible = True
Me.TxtName1.Visible = True
Me.TxtName2.Visible = True
Me.TxtName3.Visible = True
Me.TxtNation1.Visible = True
Me.TxtNation2.Visible = True
Me.TxtNation3.Visible = True
Me.TxtErgebnis1.Visible = True
Me.TxtErgebnis2.Visible = True
Me.TxtErgebnis3.Visible = True
'auswahl trimmen um aktuelle Sportart festzustellen
auswahl = Trim(CmbSportart.Text)
'Fehlerbearbeitung
On Error GoTo ergebnis_error
'SQL-String - aufsteigend sortieren
cmd.CommandText = "Select ToNumber(Ergebnis) As ErgSort,RIGHT(Ergebnis,1) As einheit, " & _
"Ergebnis, Pname, Nation from Sportler, Sportler_nimmtteil_Veranst SNT, Sportart SA, " & _
"Veranstaltung VA where SName = '" & auswahl & "' and VA.SID = SA.SID " & _
"and VA.VID = SNT.VID
"and VA.Bezeichnung like '%Finale%' " & _
"and SNT.PID = Sportler.PID order by ErgSort"
'Ausführen der Abfrage
cmd.ActiveConnection = con
Set rst = cmd.Execute
rst.MoveFirst
'wenn ein Datensatz vorhanden ist
IF Not rst.EOF Then
'wenn Ergebnis nach Metern gemessen wird muss umsortiert werden
IF rst!Einheit = "m" Then
'SQL-String - absteigend sortieren
cmd.CommandText = "Select ToNumber(Ergebnis) as ErgSort,RIGHT(Ergebnis,1) as einheit, " & _
"Ergebnis, Pname, Nation from Sportler, Sportler_nimmtteil_Veranst SNT, Sportart SA, " & _
"Veranstaltung VA where SName = '" & auswahl & "' and VA.SID = SA.SID " & _
"and VA.VID = SNT.VID and VA.Bezeichnung like '%Finale%' " &_
"and SNT.PID = Sportler.PID order by ErgSort desc"
S e ite 58 von 6 1
Projektarbeit
André Knaupp
cmd.ActiveConnection = con
Set rst = cmd.Execute
End IF
rst.MoveFirst
i=1
'die ersten drei Sieger ausgeben
Do While i <= 3 And Not rst.EOF And Not rst.BOF
IF i = 1 Then
Me.TxtName1.Text = rst!Pname
Me.TxtNation1.Text = rst!Nation
Me.TxtErgebnis1.Text = rst!Ergebnis
End IF
IF i = 2 Then
Me.TxtName2.Text = rst!Pname
Me.TxtNation2.Text = rst!Nation
Me.TxtErgebnis2.Text = rst!Ergebnis
End IF
IF i = 3 Then
Me.TxtName3.Text = rst!Pname
Me.TxtNation3.Text = rst!Nation
Me.TxtErgebnis3.Text = rst!Ergebnis
End IF
i=i+1
rst.MoveNext
Loop
Else
MsgBox "Keine Ergebnisse vorhanden ! "
End IF
End IF
Exit Sub
ergebnis_error:
'Siegerfelder ausblenden
Me.TxtName1.Text = ""
Me.TxtName2.Text = ""
Me.TxtName3.Text = ""
Me.TxtNation1.Text = ""
Me.TxtNation2.Text = ""
Me.TxtNation3.Text = ""
Me.TxtErgebnis1.Text = ""
Me.TxtErgebnis2.Text = ""
Me.TxtErgebnis3.Text = ""
Me.CmbSportart.Text = "Bitte auswählen"
Select Case Err.Number ' Fehlernummer auswerten.
Case 94
MsgBox "Es sind noch keine Ergebnisse vorhanden!"
Case 3021
MsgBox "Kein Sportler hat die Sportart belegt!"
Case Else
MsgBox "sonstiger Fehler!" ' Andere Fälle hier bearbeiten...
End Select
Exit Sub
End Sub
S e ite 59 von 6 1
Projektarbeit
André Knaupp
Private Sub Form_Load()
Dim i As Integer
i=0
'Connectionstring zusammenbauen
Const ConnectString = "uid=Andre; pwd=123; dsn=CacheWeb_User"
With con
'Verbindung herstellen
.ConnectionString = ConnectString
.ConnectionTimeout = 10
.Open
End With
'Siegerfelder ausblenden
Me.Lbl1Sieger.Visible = False
Me.Lbl2Sieger.Visible = False
Me.Lbl3Sieger.Visible = False
Me.TxtName1.Visible = False
Me.TxtName2.Visible = False
Me.TxtName3.Visible = False
Me.TxtNation1.Visible = False
Me.TxtNation2.Visible = False
Me.TxtNation3.Visible = False
Me.TxtErgebnis1.Visible = False
Me.TxtErgebnis2.Visible = False
Me.TxtErgebnis3.Visible = False
'Fehlerbearbeitung
On Error GoTo sportart_error
cmd.CommandText = "Select SName from Sportart, Veranstaltung " & _
"where Sportart.SID = Veranstaltung.SID " & _
"and Veranstaltung.Bezeichnung like '%Finale%' " & _
"and Veranstaltung.Einnahme is not NULL order by SName"
'Ausführen der Abfrage
cmd.ActiveConnection = con
Set rst = cmd.Execute
rst.MoveFirst
'Ausgabe der Sportarten
While Not rst.EOF
CmbSportart.AddItem rst!SName, i
i=i+1
rst.MoveNext
Wend
Exit Sub
'Fehlerbearbeitung
sportart_error:
Select Case Err.Number ' Fehlernummer auswerten.
Case 3021
MsgBox "Es hat noch kein Finale stattgefunden!"
Case Else
MsgBox "sonstiger Fehler" ' Andere Fälle hier bearbeiten...
End Select
S e ite 60 von 6 1
Projektarbeit
André Knaupp
Exit Sub
End Sub
Private Sub CmdBeenden_Click()
rst.Close
con.Close
Unload Me
End Sub
S e ite 61 von 6 1
Herunterladen