14. SQL dynamisch nutzen
Eine Verknüpfung mit Microsoft Query ausführen
Ziele
Die heutige Lektion soll Ihnen anhand einiger Anwendungen von SQL im Überblick zeigen, wo Sie das bisher Gelernte praktisch umsetzen können. Wir konzentrieren uns auf Anwendungen in der Umgebung von Microsoft Windows, wobei aber die Prinzipien genauso auf andere Softwareplattformen übertragbar sind. In dieser Lektion erfahren Sie ...
Diese Lektion soll Ihnen Denkanstöße geben, wo Sie Ihre neu erworbenen SQL-Fertigkeiten einsetzen können.
Produkte im Überblick
Dieser Abschnitt untersucht verschiedene kommerzielle Produkte im Kontext des Betriebssystems Microsoft Windows und beschreibt kurz, wie sie sich zu SQL verhalten. Die Prinzipien, wenn nicht sogar die Produkte selbst, lassen sich über verschiedene Softwareplattformen hinweg anwenden.
ODBC
ODBC (Open Database Connectivity) gehört zu den grundlegenden Technologien im Betriebssystem Windows. Über den ODBC-Treiber können Windows-basierte Anwendungen auf alle gebräuchlichen Datenbanken zugreifen. Damit entfallen speziell für jede Datenbank angepaßte Schnittstellen, die man eventuell sogar selbst schreiben müßte. Die Architektur von ODBC ist vergleichbar mit den Windows-Druckertreibern, die ebenfalls eine - vom konkreten Drucker unabhängige - Programmierung erlauben. Individuelle Unterschiede, denen man sich bei der Programmierung von DOS-Anwendungen widmen mußte, behandelt der Druckertreiber in komfortabler Weise. Letztendlich brauchen Sie Ihre Arbeitszeit nicht für das Schreiben von Druckertreibern zu verschwenden, sondern können sich auf die für das eigentliche Programm relevanten Aufgaben konzentrieren.
ODBC überträgt dieses Konzept auf Datenbanken. Der visuelle Teil von ODBC findet sich in der Systemsteuerung von Windows 3.1, 3.11 und Windows 95 und in einer eigenen Programmgruppe in Windows NT.
Auf ODBC gehen wir näher ein, wenn wir uns dem Erstellen einer Datenbank zuwenden.
Personal Oracle8
Personal Oracle8 ist die bekannteste Neuentwicklung für Datenbanken auf dem PC-Markt. Lassen Sie sich nicht von der Unmenge der Programme abschrecken, die Oracle8 installiert - wir haben alle in den ersten Tagen gezeigten Beispiele ausschließlich mit dem Oracle Database Manager und SQL*Plus aufgebaut. Abbildung 14.1 zeigt das Programmfenster von SQL*Plus.
Abbildung 14.1: |
InterBase SQL (ISQL)
In anderen Beispielen dieser Lektion kommt das Werkzeug ISQL von Borland zum Einsatz, das im wesentlichen Oracle8 entspricht, außer daß Oracle8 textorientiert und ISQL mehr auf die Windows-Umgebung ausgerichtet ist.
Abbildung 14.2 zeigt einen ISQL-Bildschirm. Die Abfrage gibt man in das obere Bearbeitungsfeld ein, das Ergebnis erscheint im unteren Feld. Mit den Schaltflächen Previous (Vorherige) und Next (Nächste) scrollen Sie durch die Liste aller Abfragen, die Sie während einer Sitzung - mit Run - ausgeführt haben.
Abbildung 14.2: |
Visual C++
Zu Visual C++ sind Unmengen von Büchern erschienen. Für die Beispiele in diesem Buch haben wir die Version 5.0 eingesetzt. Es ist aber beileibe nicht der einzige Compiler, der ODBC-Verbindungen realisieren kann. Wenn Sie mit einem anderen Compiler arbeiten, bietet Ihnen dieser Abschnitt einen guten Einstieg.
Visual C++ installiert eine ganze Reihe von Werkzeugen. Wir greifen nur auf zwei zurück: den Compiler und den Ressourceneditor. Beide sind im Microsoft Developer Studio unter einer einheitlichen Oberfläche erreichbar.
Delphi
Das letzte der hier untersuchten Werkzeuge ist Delphi von Borland, das Gegenstand vieler neuer Bücher ist. Delphi bietet eine skalierbare Schnittstelle zu verschiedenen Datenbanken.
In den Beispielen kommen zwei Programme von Delphi zum Einsatz: der InterBase Server (IMBGR32) und Windows ISQL (WISQL32).
Einrichten
Genug der Einführung, beginnen wir mit der Arbeit. Nachdem Sie Ihre SQL-Engine oder Ihren ODBC-kompatiblen Compiler installiert haben, müssen Sie erst die Bühne vorbereiten, bevor die Akteure auftreten können. Sowohl bei Oracle8 als auch InterBase müssen Sie sich zuerst anmelden und ein Konto für sich selbst erstellen. Die Prozeduren sind im wesentlichen gleich. Schwieriger gestaltet sich die Suche in der Dokumentation nach den vorgegebenen Kennwörtern. Beide Systeme bieten ein Standardkonto für den Systemadministrator. (Siehe dazu Abbildung 14.3.)
Abbildung 14.3: |
Nach dem Anmelden und Erstellen eines Kontos können Sie die Datenbank erstellen.
Die Datenbank erstellen
Jetzt ist der Zeitpunkt gekommen, wo sich Ihre bisher erworbenen SQL-Kenntnisse auszuzahlen beginnen. Zuerst müssen Sie die zu verwendende Datenbank starten. Wenn die Arbeit mit SQL*Plus weitergehen soll, starten Sie einfach Oracle SQL*Plus über Start | Programme | Oracle für Windows 95 | SQL Plus 8.0 oder durch Doppelklicken auf das SQL*Plus-Symbol in der Oracle-Programmgruppe. Nach der Anmeldung mit Benutzername und Kennwort stellt Oracle die Verbindung zur Datenbank her. Die einzelnen Schritte können Sie über die angezeigten Dialogfelder Oracle8 starten verfolgen. Den krönenden Abschluß dieser Folge bildet das in Abbildung 14.4 gezeigte Dialogfeld.
Abbildung 14.4: |
Sobald die Verbindung hergestellt ist, gelangen Sie zum Fenster von SQL*Plus (siehe Abbildung 14.5).
Abbildung 14.5: |
Nunmehr können Sie mit Hilfe der Schlüsselwörter CREATE und INSERT Ihre Tabellen erzeugen und Daten eingeben. Für diesen Zweck bietet sich auch eine Skript-Datei an. Dabei handelt es sich gewöhnlich um eine Textdatei mit den in der richtigen Reihenfolge angegebenen SQL-Befehlen. Der folgende Auszug stammt aus der Datei BUILD_DB.SQL, die zum Lieferumfang von Oracle8 gehört:
--
-- $Header: build_db.sql 1.1 94/10/18 15:55:37 gdudey Osd<desktop/netware> $ Copyr (c) 1994 Oracle
--
-- This file must be run out of the directory containing the
-- initialization file.
startup nomount pfile=F:\ORAWIN95\DATABASE\initorcl.ora
-- Create database
create database oracle
controlfile reuse
logfile 'F:\ORAWIN95\DATABASE\log1orcl.ora' size 200K reuse,
'F:\ORAWIN95\DATABASE\log2orcl.ora' size 200K reuse
datafile 'F:\ORAWIN95\DATABASE\sys1orcl.ora' size 20M reuse autoextend on
next 10M maxsize 200M
character set WE8ISO8859P1;
Wenn Sie bei der Installation von Oracle8 die Standardpfade beibehalten haben, finden Sie die Datei BUILD_DB.SQL im Verzeichnis \ORAWIN95\RDBMS80\ADMIN\. |
Die genaue Syntax hängt von der jeweiligen SQL-Implementierung und der verwendeten Datenbank ab. Sehen Sie deshalb bitte in der entsprechende Dokumentation nach. Um diese Skript-Datei in die SQL-Engine zu laden, wählen Sie Datei | Öffnen. Eine Skript-Datei wird mit
@dateiname
oder
start dateiname
ausgeführt. In dateiname kann die Standarderweiterung .SQL fehlen. Gegebenenfalls ist der vollständige Pfad zur Datei anzugeben.
InterBase von Borland lädt Daten in ähnlicher Weise. Der folgende Auszug stammt aus der Datei INSERTS.SQL zum Einfügen von Daten:
/*
* Add countries.
*/
INSERT INTO country (country, currency) VALUES ('USA', 'Dollar');
INSERT INTO country (country, currency) VALUES ('England', 'Pound');
INSERT INTO country (country, currency) VALUES ('Canada', 'CdnDlr');
INSERT INTO country (country, currency) VALUES ('Switzerland', 'SFranc');
INSERT INTO country (country, currency) VALUES ('Japan', 'Yen');
INSERT INTO country (country, currency) VALUES ('Italy', 'Lira');
INSERT INTO country (country, currency) VALUES ('France', 'FFranc');
INSERT INTO country (country, currency) VALUES ('Germany', 'D-Mark');
INSERT INTO country (country, currency) VALUES ('Australia', 'ADollar');
INSERT INTO country (country, currency) VALUES ('Hong Kong', 'HKDollar');
INSERT INTO country (country, currency) VALUES ('Netherlands', 'Guilder');
INSERT INTO country (country, currency) VALUES ('Belgium', 'BFranc');
INSERT INTO country (country, currency) VALUES ('Austria', 'Schilling');
INSERT INTO country (country, currency) VALUES ('Fiji', 'FDollar');
Wenn Sie bei der Installation von InterBase die Standardpfade beibehalten haben, finden Sie die Datei INSERTS.SQL im Verzeichnis \PROGRAMME\BORLAND\INTRBASE\EXAMPLES\TUTORIAL\. |
Die im Beispiel dargestellten Anweisungen der Skript-Datei fügen die Namen und Währungen der jeweiligen Länder in die Tabelle COUNTRY ein. (Eine Einführung zum Befehl INSERT gibt Lektion Tag 8.) |
Skript-Dateien haben nichts Magisches an sich. Programmierer finden immer Wege, um Tastenanschläge einzusparen. Falls Sie gerade im stillen Kämmerlein mit SQL experimentieren, sollten Sie einmal die folgenden Tabellen eingeben:
/* Table: KUNDE, Owner: PERKINS */
CREATE TABLE KUNDE (NAME CHAR(10),
ADRESSE CHAR(10),
STAAT CHAR(2),
ZIP CHAR(10),
TELEFON CHAR(11),
BEMERKUNGEN CHAR(10));
/* Table: AUFTRAEGE, Owner: PERKINS */
CREATE TABLE AUFTRAEGE (AUFTRDAT DATE,
NAME CHAR(10),
TEILNUM INTEGER,
MENGE INTEGER,
BEMERKUNGEN CHAR(10));
/* Table: TEIL, Owner: PERKINS */
CREATE TABLE TEIL (TEILNUM INTEGER,
BESCHREIBUNG CHAR(20),
PREIS NUMERIC(9, 2));
Füllen Sie nun diese Tabellen mit den nachstehenden Daten:
SELECT * FROM KUNDE
NAME ADRESSE STAAT ZIP TELEFON BEMERKUNGEN
========== ========== ====== ========== =========== ===========
TRUE WHEEL 550 HUSKER NE 58702 555-4545 NONE
BIKE SPEC CPT SHRIVE LA 45678 555-1234 NONE
LE SHOPPE HOMETOWN KS 54678 555-1278 NONE
AAA BIKE 10 OLDTOWN NE 56784 555-3421 JOHN-MGR
JACKS BIKE 24 EGLIN FL 34567 555-2314 NONE
SELECT * FROM AUFTRAEGE
AUFTRDAT NAME TEILNUM MENGE BEMERKUNGEN
=========== ========== =========== =========== ===========
15-MAY-1996 TRUE WHEEL 23 6 PAID
19-MAY-1996 TRUE WHEEL 76 3 PAID
2-SEP-1996 TRUE WHEEL 10 1 PAID
30-JUN-1996 TRUE WHEEL 42 8 PAID
30-JUN-1996 BIKE SPEC 54 10 PAID
30-MAY-1996 BIKE SPEC 10 2 PAID
30-MAY-1996 BIKE SPEC 23 8 PAID
17-JAN-1996 BIKE SPEC 76 11 PAID
17-JAN-1996 LE SHOPPE 76 5 PAID
1-JUN-1996 LE SHOPPE 10 3 PAID
1-JUN-1996 AAA BIKE 10 1 PAID
1-JUL-1996 AAA BIKE 76 4 PAID
1-JUL-1996 AAA BIKE 46 14 PAID
11-JUL-1996 JACKS BIKE 76 14 PAID
SELECT * FROM TEIL
TEILNUM BESCHREIBUNG PREIS
=========== ==================== ===========
54 PEDALS 54.25
42 SEATS 24.50
46 TIRES 15.25
23 MOUNTAIN BIKE 350.45
76 ROAD BIKE 530.00
10 TANDEM 1200.00
Nach der Eingabe dieser Daten erstellen Sie im nächsten Schritt eine ODBC-Verbindung. Öffnen Sie die Systemsteuerung (wenn Sie unter Windows 3.1, 3.11 oder Windows 95 arbeiten) und doppelklicken Sie auf das Symbol ODBC.
Verschiedene SQL-Engines laden ODBC automatisch, beispielsweise Visual C++, Delphi und Oracle8. |
Abbildung 14.6 zeigt das anfängliche ODBC-Fenster.
Abbildung 14.6: |
Das Fenster zeigt die aktuellen ODBC-Verbindungen. (Im Beispiel sind noch keine Verbindungen vorhanden, was bei Ihnen durchaus anders sein kann.) Es soll nun eine neue Verbindung erzeugt werden. Nehmen wir an, daß Sie mit InterBase arbeiten und die neue Datenbank SQL21 nennen. (10 Punkte für den Kandidaten, wenn Sie erraten, wofür SQL21 steht.) Klicken Sie auf die Schaltfläche Hinzufügen, und wählen Sie den InterBase-Treiber - wie in Abbildung 14.7 gezeigt - aus.
Abbildung 14.7: |
Von dieser Auswahl gelangen Sie zum Setup-Fenster. Füllen Sie es gemäß Abbildung 14.8 aus.
Abbildung 14.8: |
Geben Sie Ihren eigenen Namen oder eine kurze und leicht zu merkende Bezeichnung ein, je nach dem Konto, das Sie für sich selbst einrichten möchten.
Geben Sie den vollständigen Pfad und den Dateinamen inklusive Erweiterung ein. Fehlt zum Beispiel die Erweiterung, läßt sich die im nächsten Abschnitt beschriebene Abfrage nicht realisieren. |
Eine Verknüpfung mit Microsoft Query ausführen
Nachdem Sie eine ODBC-Verbindung hergestellt haben, unternehmen wir einen kleinen Abstecher zu einem nützlichen Werkzeug namens Microsoft Query. Dieses Programm gehört unter anderem zum Lieferumfang von Microsoft Office. Sollten Sie Microsoft Query zwar installiert haben, aber weder im Startmenü noch in einer eigenen Programmgruppe finden, lokalisieren Sie es mit dem Windows-Explorer (Dateiname MSQRY32.EXE). Es empfiehlt sich, eine Verknüpfung zu erstellen und auf dem Desktop unterzubringen. Abbildung 14.9 zeigt das Startfenster von Microsoft Query.
Abbildung 14.9: |
Wählen Sie Datei | Neue Abfrage. Da Ihre ODBC-Verknüpfung zu SQL21 nicht zu sehen ist, klicken Sie auf die Schaltfläche Andere. Es erscheint das in Abbildung 14.10 dargestellte Dialogfeld ODBC-Datenquellen. Markieren Sie hier SQL21.
Abbildung 14.10: |
Klicken Sie auf OK, um zum Dialogfeld Datenquelle auswählen zurückzukehren. Markieren Sie SQL21, und klicken Sie auf Verwenden (siehe Abbildung 14.11).
Abbildung 14.11: |
Es schließt sich die unvermeidliche Anmeldeprozedur an. Tippen Sie Ihr Kennwort ein, um zum nächsten Fenster zu gelangen.
Das in Abbildung 14.12 dargestellte Dialogfeld Tabellen hinzufügen zeigt alle Tabellen der Datenbank, mit der Sie verbunden sind. Fügen Sie nacheinander die Tabellen KUNDE, AUFTRAEGE und TEIL über die Schaltfläche Hinzufügen in die Abfrage ein, und klicken Sie dann auf Schliessen.
Abbildung 14.12: |
Der Bildschirm sollte nun Abbildung 14.13 entsprechen. Doppelklicken Sie auf ADRESSE und NAME in der Tabelle KUNDE. Doppelklicken Sie dann auf AUFTRDAT und TEILNUM in der Tabelle AUFTRAEGE.
Abbildung 14.13: |
Der nächste Schritt zeigt eine der Stärken von Microsoft Query. Klicken Sie in der Symbolleiste auf die Schaltfläche mit der Aufschrift SQL. Der Bildschirm sollte nun Abbildung 14.14 entsprechen.
Abbildung 14.14: |
Dieses Hilfsmittel bietet zwei Funktionen. Erstens erlaubt es die Prüfung einer ODBC-Verbindung. Wenn diese hier funktioniert, sollte sie auch im Programm arbeiten. Man kann damit Probleme einkreisen und der Datenbank oder dem Programm zuordnen. Zweitens lassen sich Abfragen generieren und prüfen. Fügen Sie die folgende Zeile in das Dialogfeld SQL ein, und klicken Sie auf OK:
WHERE KUNDE.NAME = AUFTRAEGE.NAME AND TEIL.TEILNUM = AUFTRAEGE.TEILNUM
Abbildung 14.15 zeigt das bemerkenswerte Ergebnis.
|
Abbildung 14.15: |
Sie haben gerade eine Verknüpfung realisiert! Darüber hinaus sind die verknüpften Felder grafisch in der Tabellendarstellung verbunden (beachten Sie die Zickzack-Linien zwischen NAME und TEILNUM).
Mit Query besitzen Sie unter Windows ein wichtiges Werkzeug in Ihrem SQL-Arsenal. Es erlaubt Ihnen, Tabellen und Abfragen zu untersuchen und zu manipulieren. Man kann damit auch Tabellen erzeugen und Daten manipulieren. Wenn Sie in Windows mit ODBC und SQL arbeiten, sollten Sie dieses Werkzeug entweder selbst erwerben oder von Ihrer Firma bzw. Ihren Kunden kaufen lassen (wenn es nicht ohnehin zum Lieferumfang eines Ihrer Programme gehört). Es ist zwar nicht so aufregend wie eine Netzwerkversion von DOOM, spart Ihnen aber Zeit und Geld. Nachdem Sie nun eine ODBC-Verknüpfung eingerichtet haben, können Sie sie in einem Programm verwenden.
Visual C++ und SQL
Starten Sie Visual C++. Wählen Sie Datei | Neu. Im Dialogfeld Neu markieren Sie auf der Registerkarte Projekte den Eintrag MFC-Anwendungs-Assistent (exe). Wählen Sie den gewünschten Pfad, und geben Sie einen passenden Namen im Bearbeitungsfeld Projektname ein (im Beispiel SQL21
Abbildung 14.16: |
Klicken Sie auf OK, um zum Dialogfeld MFC-Anwendungs-Assistent - Schritt 1 zu gelangen (siehe Abbildung 14.17). Wählen Sie hier die Option Einzelnes Dokument (SDI). Klicken Sie dann auf die Schaltfläche Weiter.
Abbildung 14.17: |
Im zweiten Dialogfeld des Assistenten wählen Sie die Option Datenbankansicht ohne Dateiunterstützung (siehe Abbildung 14.18).
Abbildung 14.18: |
Diese Option verlangt die Auswahl einer Datenquelle. Klicken Sie auf die Schaltfläche Datenquelle, um zu dem in Abbildung 14.18 dargestellten Dialogfeld Datenbankoptionen zu gelangen. Wählen Sie SQL21
Abbildung 14.19: |
Klicken Sie im Dialogfeld Datenbankoptionen auf OK. Es schließt sich die bereits bekannte Anmeldeprozedur an. Geben Sie Ihr Kennwort ein. Anschließend gelangen Sie zum Dialogfeld Datenbanktabellen wählen (siehe Abbildung 14.20). Markieren Sie die Tabelle KUNDE.
Abbildung 14.20: |
Klicken Sie im Dialogfeld Datenbanktabellen wählen auf OK, um zum Anwendungs-Assistenten zurückzukehren. Für die restlichen Einstellungen können Sie die Vorgaben übernehmen. Klicken Sie daher auf Weiter, bis das sechste Dialogfeld erreicht ist. In diesem Dialogfeld zeigt der MFC-Anwendungs-Assistent die erstellten Klassen an. Klicken Sie im Schritt 6 des Anwendungs-Assistenten auf Fertigstellen. Der Anwendungs-Assistent zeigt nun das in Abbildung 14.21 dargestellte Dialogfeld Neue Projektinformationen mit den Spezifikationen des neu angelegten Anwendungsgerüsts an.
Abbildung 14.21: |
Klicken Sie auf OK, um das Programm generieren zu lassen. Als nächstes entwerfen Sie den Hauptbildschirm Ihres Programms. Aktivieren Sie im Fenster Arbeitsbereich die Registerkarte ResourceView. Erweitern Sie den Eintrag SQL21 Ressourcen und dann den Eintrag Dialog. Doppelklicken Sie anschließend auf den Eintrag IDD_SQL21_FORM. In der rechten Fensterhälfte wird daraufhin ein leeres Formular (eigentlich ein Dialogfeld) angezeigt. Löschen Sie den Text TODO: Place form controls on this dialog, und fügen Sie entsprechend Abbildung 14.22 vier Textfelder mit den Aufschriften Name, Adresse, Staat und ZIP sowie vier Bearbeitungsfelder hinzu.
Abbildung 14.22: |
Der Einfachheit halber haben wir die IDs der Eingabefelder mit IDC_NAME, IDC_ADRESSE, IDC_STAAT und IDC_ZIP festgelegt. Hier sind aber auch beliebige Namen möglich.
Wählen Sie Ansicht | Klassen-Assistent (oder drücken Sie (Strg)+(W)), um den Klassenassistenten zu starten, und aktivieren Sie die Registerkarte Member-Variablen. Markieren Sie nacheinander die Steuerelement-IDs, klicken Sie auf die Schaltfläche Variable hinzufügen, und legen Sie die Member-Variablen nach dem aus Abbildung 14.23 ersichtlichen Muster fest.
Abbildung 14.23: |
Schließen Sie das Dialogfeld MFC-Klassen-Assistent mit OK, und speichern Sie Ihre Arbeit. Erstellen Sie das Programm durch Wahl von Erstellen | SQL21.exe erstellen. Wenn sich das Programm fehlerfrei erstellen läßt, sollte das Ausgabefenster Abbildung 14.24 entsprechen. Gehen Sie ansonsten die genannten Schritte noch einmal durch, und kontrollieren Sie alles.
Abbildung 14.24: |
Starten Sie nun das Programm (über Erstellen | Ausführen von SQL21.exe oder (Strg)+(F5)). Nach der unvermeidlichen Anmelderoutine sollten Sie zu dem in Abbildung 14.25 dargestellten Fenster gelangen.
Abbildung 14.25: |
Ein eindrucksvolles Programm, wenn man bedenkt, daß Sie bisher keine einzige Codezeile geschrieben haben. Verwenden Sie die Pfeiltasten auf der Symbolleiste, um in der Datenbank nach vorn und hinten zu blättern. Beachten Sie, daß die Reihenfolge der Daten der Eingabereihenfolge entspricht. Die Daten liegen also nicht alphabetisch geordnet vor (es sei denn, Sie haben sie entsprechend eingegeben). Wie läßt sich nun die Reihenfolge ändern?
Die Verbindung zur Datenbank ist in der vom Anwendungsassistenten automatisch erzeugten Klasse CSQL21Set verkapselt. Sehen Sie sich die Header-Datei (SQL21set.h) an:
// SQL21Set.h : Schnittstelle der Klasse CSQL21Set
//
/////////////////////////////////////////////////////////////////////////////
class CSQL21Set : public Crecordset
{
public:
CSQL21Set(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CSQL21Set)
// Feld-/Parameterdaten
//{{AFX_FIELD(CSQL21Set, CRecordset)
CString m_NAME;
CString m_ADRESSE;
CString m_STAAT;
CString m_ZIP;
CString m_TELEFON;
CString m_BEMERKUNGEN;
//}}AFX_FIELD
// Überladungen
// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
//{{AFX_VIRTUAL(CSQL21Set)
public:
virtual CString GetDefaultConnect(); // Standard-Verbindungszeichenfolge
virtual CString GetDefaultSQL(); // Standard-SQL für Recordset
virtual void DoFieldExchange(CFieldExchange* pFX); // RFX-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
};
Der Anwendungsassistent hat Elementvariablen für alle Spalten in der Tabelle konstruiert. Beachten Sie auch die Funktionen GetDefaultConnect und GetDefaultSQL. Die Implementierung dieser Funktionen steht in der Datei SQL21Set.cpp: CString CSQL21Set::GetDefaultConnect() |
Die Funktion GetDefaultConnect stellt die ODBC-Verbindung her. Diese Funktion sollten Sie nicht ändern. Allerdings erlaubt die Funktion GetDefaultSQL einige interessante Dinge. Ändern Sie den Text dieser Funktion in:
return _T("SELECT * FROM KUNDE ORDER BY NAME");
Kompilieren Sie das Programm neu. Die Tabelle ist nun wie von Geisterhand nach dem Namen sortiert (siehe Abbildung 14.26).
Abbildung 14.26: |
Da wir hier keinen Lehrgang zur Microsoft Foundation Class (MFC) abhalten wollen, sei wenigstens erwähnt, daß man CRecordSet- und Cdatabase-Objekte manipulieren, Tabellen verknüpfen und löschen, Zeilen aktualisieren und einfügen sowie allgemein alle möglichen SQL-Operationen realisieren kann. Sie haben gerade ein wenig über den Tellerrand geschaut, und wir haben den Weg gezeigt, wie man SQL in C++-Anwendungen integriert. Weitere Studien sollten Sie den Objekten CRecordSet und Cdatabase (beide in der Online-Hilfe zu C++ zu finden), dem ODBC-API (Gegenstand mehrerer Bücher) und den von Oracle und Sybase bereitgestellten APIs (die beide ähnlich zum ODBC-API sind) widmen.
Delphi und SQL
Delphi ist ein weiteres wichtiges Datenbank-Werkzeug auf der Windows-Plattform. Während Sie im C++-Beispiel eine Codezeile umgeschrieben haben, werden Sie in Delphi zwei Tabellen verknüpfen, ohne überhaupt eine einzige Codezeile zu schreiben!
Den Quellcode für dieses Programm finden Sie im Anhang C. |
Starten Sie Delphi über das Start-Menü oder durch Doppelklicken auf das Delphi-Symbol in der entsprechenden Programmgruppe. Abbildung 14.27 zeigt den Startbildschirm.
Abbildung 14.27: |
In Delphi müssen Sie alle ODBC-Verbindungen, die Sie in Ihren Programmen verwenden, registrieren. Starten Sie dazu das Dienstprogramm BDE-Konfiguration (entweder über Start | Programme | Borland Delphi 3 | BDE-Konfiguration oder durch Doppelklicken auf das Symbol in der Delphi-Programmgruppe). Klicken Sie auf die Registerkarte Konfiguration im linken Teil der BDE-Verwaltung. Erweitern Sie die Knoten Konfiguration und Treiber (durch Klicken auf die Plus-Symbole). Klikken Sie dann mit der rechten Maustaste auf das Symbol ODBC. Daraufhin erscheint das Dialogfeld Neuer ODBC-Treiber. Füllen Sie das Dialogfeld wie in Abbildung 14.28 aus.
Abbildung 14.28: |
Um einen neuen Datenbank-Alias zu erstellen, klicken Sie auf die Registerkarte Datenbanken der BDE-Konfiguration. Klicken Sie dann mit der rechten Maustaste, um das Dialogfeld Neuer Datenbank-Alias zu öffnen. Wählen Sie den in Abbildung 14.29 gezeigten Treibernamen aus, und klicken Sie auf OK. Um einen anderen Namen festzulegen, markieren Sie den Alias, klicken mit der rechten Maustaste und wählen Umbenennen.
Abbildung 14.29: |
Wählen Sie Datei | Neues Formular und anschließend Datenbank | Formular-Experte, um den Datenbankformular-Experten zu starten. Sie können auch Datei | Neu wählen, im Dialogfeld Neue Einträge die Registerkarte Geschäftlich aktivieren und den Datenbankformular-Experten durch Doppelklicken auf das Symbol Datenbank-Experte starten, wie es Abbildung 14.30 zeigt.
Abbildung 14.30: |
Im ersten Dialogfeld des Datenbankformular-Experten wählen Sie die Optionen Haupt-/Detailformular erstellen und Formular unter Verwendung von TQuery-Objekten erstellen (siehe Abbildung 14.31).
Abbildung 14.31: |
Klicken Sie auf Weiter, um zum nächsten Dialogfeld zu gelangen (siehe Abbildung 14.32). Wählen Sie hier die Datenquelle SQL21, die Sie weiter vorn eingerichtet haben. Klicken Sie dann auf Weiter.
Abbildung 14.32: |
Im linken Teil des Dialogfelds sind alle Tabellen der Datenbank SQL21 aufgeführt. Markieren Sie TEIL als Tabelle für die Hauptabfrage, wie es Abbildung 14.33 zeigt. Klicken Sie auf Weiter.
Abbildung 14.33: |
Klicken Sie auf den nach rechts weisenden Doppelpfeil, um dem Formular alle Felder hinzuzufügen (siehe Abbildung 14.34).
Abbildung 14.34: |
Für die Anordnung der Felder auf dem Formular wählen Sie die Option Horizontal, wie es Abbildung 14.35 zeigt. Klicken Sie auf Weiter.
Abbildung 14.35: |
In den nächsten Dialogfeldern des Datenbankformular-Experten (siehe Abbildungen 14.36 bis 14.38) markieren Sie AUFTRAEGE als Tabelle für die Detailabfrage, übernehmen alle verfügbaren Felder und wählen Tabellenförmig als Anordnung der Felder auf dem Formular. Klicken Sie in den Dialogfeldern jeweils auf Weiter.
Abbildung 14.36: |
Abbildung 14.37: |
Abbildung 14.38: |
Im nächsten Dialogfeld können Sie eine Verknüpfung einrichten. Markieren Sie TEILNUM in den Listen Detailfelder und Hauptfelder, und klicken Sie auf Hinzufügen. Das Ergebnis zeigt Abbildung 14.39.
Abbildung 14.39: |
Im letzten Dialogfeld klicken Sie auf die Schaltfläche Beenden, um das Formular zu erstellen. Abbildung 14.40 zeigt das fertige Formular.
Abbildung 14.40: |
Kompilieren und starten Sie das Programm. Wenn Sie verschiedene Teile auswählen, sollten die zugehörigen Aufträge in der unteren Tabelle erscheinen (siehe Abbildung 14.41).
Abbildung 14.41: |
Schließen Sie das Projekt, und klicken Sie auf eines der Abfrageobjekte (mit der Aufschrift SQL) auf dem Formular. Der Objektinspektor auf der linken Seite des in Abbildung 14.27 dargestellten Bildschirms zeigt daraufhin die verschiedenen Eigenschaften an. Markieren Sie im Objektinspektor die Eigenschaft SQL
Abbildung 14.42: |
Probieren Sie die Abfrage aus, und verfolgen Sie die Ergebnisse. Stellen Sie sich vor, was Sie alles erreichen können, wenn Sie erst einmal mit dem Schreiben von Code beginnen!
Zusammenfassung
Heute haben Sie einen ersten Eindruck davon bekommen, wie man SQL in den bekannten Entwicklungsumgebungen einsetzt. Um das bisher Gelernte zu vertiefen, sollten Sie am besten ohne Umschweife mit der Arbeit beginnen und Abfragen en masse ausführen.
Fragen & Antworten
Frage:
Worin liegt der Unterschied zwischen dem ODBC-API und den APIs von Oracle und Sybase?
Antwort:
Auf der Funktionsebene sind sich die APIs von Oracle und Sybase nicht zufällig sehr ähnlich. Mehrere Firmenzusammenschlüsse und -trennungen haben zu Bibliotheken geführt, die offensichtlich von einer gemeinsamen Basis abstammen. Das ODBC-API ist eher generischer Natur - es bezieht sich nicht auf eine spezielle Datenbank. Will man auf Sonderfunktionen einer Datenbank zurückgreifen oder die Leistungsbilanz einer bestimmten Datenbank im Detail verbessern, sollte man den Einsatz der API-Bibliothek der betreffenden Datenbank in Betracht ziehen.
Frage:
Woher weiß ich bei der Fülle der verfügbaren Produkte, welches sich am besten eignet?
Antwort:
A In einer Büroumgebung stellt die Produktauswahl gewöhnlich einen Kompromiß zwischen Management und »Techniker« dar. Das Management blickt auf die Kosten eines Produkts, der Techniker interessiert sich vor allem für die Leistungsmerkmale und wie er mit der Programmierumgebung am besten zurecht kommt.
Workshop
Kontrollfragen
1. In welchem Objekt ist SQL in Microsoft Visual C++ untergebracht?
2. Welches Objekt ist in Delphi für SQL verantwortlich?
3. Was bedeutet ODBC?
4. Was kann man mit Delphi realisieren?
Übungen
1. Ändern Sie im C++-Beispiel die Sortierreihenfolge auf dem Feld STAAT von aufsteigend in absteigend.
2. Halten Sie nach einer Anwendung Ausschau, die SQL benötigt, und bauen Sie SQL in diese Anwendung ein.