Reinhold Maurus/Ralf Hofer Client/Server- Datenbank- Programmierung mit Delphi 3 Für Delphi 1, 2 &3 SQL-Programmierung & Datenbankkomponenten Web-Server-Erweiterung ActiveX, DCOM, Multi-Tier An International Thomson Publishing Company Bonn Albany Belmont Boston Cincinnati Detroit Johannesburg London THOMSON Madrid Melbourne Mexico City New York Paris Singapore Tokyo PUBLISHING
i Vorwort 13 1 Das Orakel von Delphi 3 - Was ist neu? 17 1.1 Packages 17 1.2 ActiveX-Controls 17 1.3 ActiveForms 18 1.4 Ein noch schnelleres RAD 18 1.5 Datenbankzugriffe 18 1.6 Internet 19 1.7 Business Object Broker 19 1.8 Business Insight 19 2 Arbeiten mit der Visual Component Library 21 2.1 Object und Class - das Objektmodell von Delphi 21 2.1.1 Wie erzeugt Delphi Objekte? 21 2.1.2 Anzeige von Informationen über Klassen 25 2.1.3 Die Objekthierarchie der Delphi-VCL 27 2.1.4 Benutzung von Override in Konstruktoren und Destruktoren 31 2.2 Tips zur Arbeit mit der VCL 38 2.2.1 Die Runtime-Type-Information (RTTI) 38 2.2.2 Einbinden von Klassen aus einer DLL 41 2.2.3 Zusammenhang zwischen Bordericons, BorderStyle und Showmodal 46 2.2.4 Das Erzeugen einer Toolbar für ein Formular 47 2.2.5 Die Abläufe bei Erstellen und Schließen eines Formulars 58 2.2.6 Das Erzeugen transparenter Fensterein Anwendungsbeispiel 66 2.2.7 Das Speichern von Eigenschaften eines Formulars 79 5
3 Die 32-Bit-Welt - Multitasking, Multithreading & Adressierung 95 3.1 Allgemeines 95 3.2 Threads - aus Sicht des Windows-API 99 3.3 Die Synchronisation mehrerer Threads 111 3.4 Das Objekt TThread 121 4 4.1 4.1.1 4.1.2 4.1.3 4.2 4.2.1 4.2.2 4.3 4.3.1 4.3.2 4.4 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.5 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.6 4.6.1 4.6.2 Datenbank-Design Allgemeines Die Planung Das Pflichtenheft Gebräuchliche Begriffe Grundlegende Überlegungen zum Datenbank-Design Auftretende Fehler in Datenmodellen Forderungen an ein Datenmodell Relationale Datenbank-Managementsysteme Die Beziehungen zwischen Tabellen Die Verwendung von Relationen Die fünf Normalformen Die erste Normalform Die zweite Normalform Die dritte Normalform Die vierte Normalform Die fünfte Normalform Normalisieren - aber nicht übertreiben Zusammenfassung Die praktische Umsetzung Unser Pflichtenheft Das Normalisieren Werte prüfen auf Abhängigkeit Die erste Codd'sche Normalform Die zweite Codd'sche Normalform Die dritte Codd'sche Normalform Beziehungen Das Entity-Relationship-Modell Die Generalisierung der Objekte und Beziehungen Die Umsetzung unseres Pflichtenheftes 125 125 126 126 127 129 129 131 131 132 134 139 139 140 140 141 141 141 142 142 142 143 143 145 148 149 150 151 151 152 6
4.6.3 Die Darstellung in einem vereinfachten ER-Diagramm 152 4.6.4 Die Umsetzung des ER-Diagramms in Tabellen 153 4.7 Zusammenfassung 155 4.7.1 Wichtige Punkte 156 5 Die Datenbankkomponenten von Delphi 157 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.2 5.2.1 5.2.2 5.2.3 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 Datenzugriffselemente TSession TDataBase TDBDataSet TTable TQuery TStoredProc TUpdateSQL TDataSource TBatchMove Datensteuerelemente TDBGrid TDBEdit TDBCtrIGrid Entscheidungskomponenten TDecisionQuery TDecisionCube TDecisionSource TDecisionGrid TDecisionGraph TDecisionPivot Programmbeispiel 157 157 160 162 174 180 185 188 190 192 196 196 206 208 213 213 215 216 217 218 218 220 6 Arbeiten mit C/S-Datenbanken 225 6.1 Oracle7-lnstallation 225 6.1.1 Oracle7 Workgroup Server 225 6.1.2 Personal Oracle7 229 6.1.3 BDE-Konfiguration 230 6.1.4 Tips bei Oracle-und BDE-lnstallationsproblemen 232 6.2 InterBase-Installation 233 6.2.1 BDE-Konfiguration 234 6.2.2 Tips bei InterBase- und BDE-lnstallationsproblemen 236 7
6.3 ODBC-Installation 237 6.3.1 ODBC-Treiber-Konfiguration 238 6.3.2 BDE-Konfiguration 240 6.4 Transaktionen und Datensynchronisation mit dem Server 242 6.5 Datenbankkomponenten - Probleme und Workarounds 247 6.5.1 Besonderheiten bei der Arbeit mit Blob-Feldern 247 6.5.2 Cached Updates und die UpdateSQL-Komponente 251 6.5.3 Vergleich von TTable und TQuery 257 6.5.4 Probleme beim Einfügen von Datensätzen mittels TQuery-Komponenten 261 6.5.5 Verwendung von TBDECallback 270 6.5.6 Die Methoden Last und Fetch - Problembehandlung 279 6.5.7 Table-Joins und Read Only Queries 286 6.5.8 Nutzung von InterBase-Event-Alerters 313 6.6 SQL-Monitor 317 6.6.1 Funktionsweise 317 6.6.2 Arbeiten mit dem SQL-Monitor 318 6.6.3 Beispielausgaben von SQL-Statements 320 6.6.4 Der Parameter»?«322 6.7 Trigger 329 6.8 Constraints 334 6.9 Stored Procedures 335 6.10 Vergleich zwischen Oracle und InterBase 339 6.11 Programmbeispiel 343 6.11.1 Umsetzung des Datenbank-Designs 343 6.11.2 Erstellen eines Data Definition Language (DDL)-Scripts 345 6.11.3 Erstellen von Tabellen ohne DDL 346 6.11.4 Programmbeispiel VideoShop 2000 349 6.12 Export und Import bei Oracle 363 7 Datenbanken im Internet/Intranet 365 7.1 Szenario 365 7.2 Grundbegriffe 367 7.2.1 HTML 367 7.2.2 Statisches HTML und dynamisches HTML 367 7.2.3 URL 367 7.2.4 Hyperlink 368 7.2.5 HTTP 368 8
7.2.6 CGI 368 7.2.7 ISAPI 369 7.2.8 NSAPI 369 7.3 Internet-Server-Komponenten 369 7.3.1 TWebRequest 371 7.3.2 TWebResponse 372 7.3.3 TWebDispatcher 373 7.3.4 TPageProducer 377 7.3.5 TQueryTableProducer 380 7.3.6 TDataSetTableProducer 381 7.4 Verbindungsaufbau zwischen Client und der Server-Erweiterung 382 7.5 Erstellen einer Web-Server-Erweiterung 383 7.6 Test der Web-Server-Erweiterung 389 7.7 Tips zum Debuggen einer Web-Server-Erweiterung 390 8 ActiveX 393 8.1 Klassisches C/S Szenario 394 8.2 Multi-Tier-Umgebung 395 8.3 Unterstützung von Data-Warehouse-Anwendungen 396 8.4 Wie können COM-Objekte realisiert werden? 396 8.5 Welche Vorteile bieten COM-Objekte? 396 8.6 Entspricht das COM-Objektmodell dem Delphi-Objektmodell? 398 8.7 Varianten 400 8.8 Partnersuche bei COM-Objekten 401 8.9 COM-Anwendungen 402 8.9.1 AcitiveX-Controls 402 8.9.2 OLE-Container 403 8.9.3 OLE-Automation 403 8.10 Diese Begriffe sollten Sie kennen 403 8.10.1 Globally Unique Identifier (GUID) 403 8.10.2 Interface Identifier (MD) 404 8.10.3 CLASSID bzw. CLSID 404 8.10.4 Programmatic Identifier (ProgID) 404 8.10.5 Registrierung eines COM-Servers 405 9
8.11 8.11.1 8.11.2 8.11.3 8.11.4 8.11.5 8.12 8.13 8.13.1 8.14 8.15 8.16 8.17 8.18 8.19 8.19.1 8.19.2 8.19.3 8.19.4 8.19.5 8.20 8.20.1 8.20.2 8.20.3 COM-Interfaces 406 Standardinterface lunknown 407 Interface und vtable 408 Dispatch Interface 409 Dual Interface 410 Factory Interface 411 COM-Klassenhierarchie 412 Type Library 413 Type Library erstellen 415 Automation Client mit Bindung zur Laufzeit 421 Automation Server mit Bindung zur Laufzeit 424 Automation Client mit Bindung zur Entwicklungszeit 427 Automation Server mit Bindung zur Entwicklungszeit 430 Wie können DLLs registriert werden? 434 Seien Sie Active mit X und erfolgreich! 434 ActiveX-Controls von Drittherstellern in Palette aufnehmen 434 ActiveX-Klassenhierarchie 435 Mit ActiveForm eigene ActiveX-Controls erstellen 436 Delphi-Komponenten in ActiveX-Controls konvertieren 437 ActiveX-Controls in Web-Seiten einbinden 437 Distributed COM (DCOM) 438 Wie arbeitet DCOM? 439 DCOM konfigurieren 441 DCOM-Konfigurationsprogramm 442 9 9.1 9.2 9.3 9.4 Multi-Tier-Architektur 449 TRemoteServer 459 TClientDataSet 460 TProvider 465 Anwendungs-Server - Beispiel 466 10
A Glossar 479 B Literaturverzeichnis 489 C Wichtige WWW-Adressen 491 D Inhalt der CD 493 Index 497 li