Andreas Kosch Delphi 3 Grundlagen relationaler Datenbanken - Wertpapierverwaltungsprogramm Schritt für Schritt entwickeln - Einfache Reports mit TQuickRepoif' SQL- Grundlagen und Workshop InterBase SQL Server for Windows 95/NT" im praktischen Einsatz - Client/Server Datenbankentwicklung Mit 245 Abbildungen und 135 Tabellen
7 Inhalt 1 Datenbanken 15 1.1 Datenbank - was ist das? 15 1.2 Anforderungen an eine Datenbank 16 1.3 Relationales Datenbankmanagementsystem 17 1.3.1 Systemtabellen 18 1.3.2 Transaktionen 18 1.3.3 Transaktionsmodelle 21 1.4 Relationale Datenbank 22 1.4.1 Relationale Operatoren 27 1.4.2 Codd's Zwölf Gebote" 28 1.4.3 SQL - Structured Query Language 29 7.5 Desktop-Datenbank oder Client/Server-Lösung? 30 1.5.1 Vergleich der beiden Prinzipien 32 1.5.2 Two-tier oder Multi-tier? 33 1.5.3 Delphi 3 und die Multi-Tier Distributed Application Services 35 1.5.4 Entscheidungsrichtlinien 37 1.6 Datenbankformate - Delphis reiche Auswahl 38 1.6.1 dbase-datenbanktabellen 41 1.6.2 Das Paradox-Tabellenformat 48 1.6.3 FoxPro-Tabellenformat 62 1.6.4 Access-Tabellenformat 69 1.6.5 OLE DB 70 1.6.6 Delphi's Local Interbase Server 72 1.6.7 Delphi's InterBase SQL Server for Windows 95/NT 73 1.6.8 Borland's InterBase Workgroup Server 73 1.6.9 Zugriff auf Fremdformate 80 1.7 Borland Database Engine - ein Blick hinter die Kulissen 85 1.7.1 Die Architektur der BDE, 86 1.7.2 Leistungsmerkmale der BDE 87 1.7.3 IDAPI-Aufbau und Verwendung 88 1.8 Resümee 97 2 Datenbankdesign 98 2.1 Theoretische Grundlagen 99 2.1.1 Eintabellen- versus Multitabellen-Datenbanken 100 2.1.2 Normalisierung einer Datenbank 100
8 Inhalt 2.2 Praktische Umsetzung am Beispiel ShareMan" 102 2.2.1 Problemanalyse 102 2.2.2 Entity-Relationship-Modellierung 106 2.2.3 Datenmodell in Datenbanktabellen umsetzen 111 2.3 Datenbank-Dictionary 118 2.4 Resümee 120 3 Anwendung Schritt für Schritt entwickeln 121 3.1 Schritt 1 : Alias für die Datenbank anlegen 123 3.2 Schritt 2 : Tabellen in der Datenbankoberfläche erzeugen 124 3.2.1 Quick Info's zur Datenbankoberfläche 124 3.2.2 Tabellen der Datenbank ShareMan" konfigurieren 126 3.2.3 Datenbankinventur 130 3.3 Schritt 3: Hauptformular in Delphi gestalten 131 3.3.1 Formular 133 3.3.2 Statuszeile unter Windows 95 139 3.3.3 TPageControl und TTabSheet 140 3.3.4 Windows 95 like 141 3.4 Schritt 4: Datenbankanbindung über ein Datenmodul 145 3.4.1 TDataSet - das Fundament von TTable und TQuery 147 3.4.2 Datenmodul - der lang ersehnte Komponentencontainer 147 3.4.3 Datenbankzugriffskomponenten 150 3.4.4 Programmimplementierung im Datenmodul 157 3.4.5 Neue datensensitive Dialogelemente im Hauptformular 173 3.4.6 Änderungen im Hauptformular 176 3.4.7 Wie lösche ich ein Datum? 183 3.4.8 Der erweiterte BDE-Fehlerdialog 186 3.5 Schritt 5: SQL-Abfrage in einem eigenen Thread 190 3.5.1 Der Aufruf 190 3.5.2 Die Implementierung 192 3.5.3 Der Hintergrund 194 3.6 Schritt 6: TChartFX bzw. TChart zeigt den Kursverlauf an 197 3.6.1 OCX-Grundlage'n - die Kurzfassung 198 3.6.2 Die Implementierung mit TChartFX 199 3.6.3 Die Implementierung mit TChart 200 3.7 Schritt 7: Wertpapiere kaufen und verkaufen 202 3.7.1 Erweiterungen im Datenmodul 203 3.7.2 Erweiterungen im Hauptformular von ShareMan" 204 3.8 Schritt 8: Das Kontobuch wird implementiert 210 3.8.1 Kontobuch-Formular sm_konto.pas" 210 3.8.2 Einzahlungs- und Auszahlungsformular sm_betr.pas" 213 3.8.3 QuickReport-Formular sm_repko.pas" 216
Inhalt 3.9 Schritt 9: Kursdaten eines Jahrgangs löschen 220 3.9.1 Aufruf im Hauptformular 220 3.9.2 Der Löschdialog 221 3.10 Schritt 10: Datenbank-Backup 224 3.10.1 Änderung im Hauptformular 224 3.10.2 Das Backup-Formular 225 3.11 Schritt 11: Auswertungen im Datenbestand 228 3.11.1 Überblick über die aktuellen Aktienkurse 228 3.11.2 Aktueller Stand im eigenen Wertpapierportfolio 230 3.11.3 Chronologischer Kursverlauf einer Aktie 233 3.11.4 Portfolio-Rendite auf einen Blick 236 3.12 Schritt 12 : SQL-Rechercheformular 240 3.12.1 Komponentengröße und Position dynamisch anpassen 241 3.12.2 TQuery - die SQL-Engine 242 3.12.3 TBatchMove - das Arbeitspferd 244 3.12.4 BDE-Callback: Der Datenbank-Informationsdienst 246 3.12.5 Das Datenbankstrukturfenster 251 3.12.6 SQL-Befehle speichern und einlesen 252 3.13 Schritt 13: Datenexport in eine dbase-datei 253 3.13.1 Änderungen im Hauptformular 253 3.13.2 Das Exportformular FormExport" 254 3.14 Schritt 14 : Splash - die Programmvisitenkarte 256 3.14.1 Änderung in der Projektdatei 256 3.14.2 Das Splash-Formular 259 3.15 Resümee 259 4 Delphi ruft MS Word 260 4.1 Der direkte Ausdruck aus dem Programm heraus 260 4.1.1 Daten aus TQuery drucken 261 4.1.2 Die Tool-Unit prnstuff.pas" 264 4.2 Serienbriefgenerator 266 4.2.1 Die Adreßdatenbank 266 4.2.2 Das Serienbriefformular für die Kurzmitteilungen 267 4.3 Dokument über globales*makro beim Start erzeugen 275 4.3.1 Konfiguration des Delphi-Anwendungsprogramms 276 4.3.2 Konfiguration von MS Word 95 278 4.4 Die DDE-Lösung 280 4.5 Die OLE-Lösungen 285 4.5.1 OLE-Grundlagen 285 4.5.2 oletestl.dpr"- OLE-Container für Word für Windows...287 4.5.3 oletest2.dpr" - OLE-Automation mit Microsoft Word 289 4.6 Resümee 290
10 Inhalt 5 InstallShield - das Installationsprogramm 292 5.1 Die Aufgabe 293 5.2 Die Lösung 293 5.2.1 Schritt 1: Visuelles Design 293 5.2.2 Schritt 2: Die eigenen Programmdateien 294 5.2.3 Schritt 3: Die Datenbankdateien 295 5.2.4 Schritt 4: Die OCX-Controls 296 5.2.5 Schritt 5: Komponenten der Benutzerschnittstelle wählen 298 5.2.6 Schritt 6: InstallShield-Objekte für Delphi 298 5.2.7 Schritt 7: Ordner und Symbole festlegen 299 5.2.8 Schritt 8: Der Diskettengenerator 300 5.2.9 Schritt 9: Der Test 300 5.3 Resümee 300 6 Hilfe zum Programm 302 6.1 Das Windows95-Hilfesystem 304 6.2 Aufbau eines Hilfeprojektes 305 6.2.1 Die Projektdatei *.HPJ 305 6.2.2 Die Hilfetextdatei im RTF-Format 307 6.3 Die Hilfedatei Schritt für Schritt erstellen 309 6.3.1 Schritt 1 : Die Projektdatei»artikel.hpj«vorbereiten 309 6.3.2 Schritt 2 : Die RTF-Datei artikel.rtf anlegen 310 6.3.3 Schritt 3 : Suchsequenzen für ein Thema definieren 314 6.3.4 Schritt 4 : Definitionen zur Begriffserläuterung festlegen 316 6.3.5 Schritt 5: Die Inhaltsübersicht zusammenstellen 317 6.4 Hilfedatei aus dem Delphi-Programm heraus aufrufen 318 6.4.1 TApplication.HelpCommand 318 6.4.2 TApplication.HelpContext 319 6.4.3 TApplication.HelpJump 320 6.4.4 Windows-API-Funktion WinHelp 320 6.4.5 Aufruf über die Fl-Taste 321 6.4.6 Die Direkthilfe von Windows 95 321 6.5 Resümee..' 322 7 SQL - eine unterschätzte Toolbox 323 7.1 Was ist SQL? 323 7.1.1 Warum wird SQL verwendet? 324 7.1.2 Wie wird SQL verwendet? 325 7.1.3 Wer verwendet SQL? 325 7.2 SQL-Kommandoklassen 326 7.2.1 Data Definition Language - DDL 326
Inhalt 7.2.2 Data Manipulation Language - DML 326 7.2.3 Data Query Language - DQL 327 7.2.4 Transaction Control Language - TCL 327 7.2.5 Database Administration Language - DAL 327 7.3 Wie verwaltet SQL Daten? 328 7.4 SQL-Befehlsausführung 331 7.4.1 Aufbau eines SQL-Befehls 332 7.5 SQL-Elemente 332 7.5.1 Namen 332 7.5.2 Datentypen 334 7.5.3 System-Schlüsselwörter 336 7.5.4 Ausdrücke 336 7.5.5 Auswahlbedingungen 337 7.5.6 Operatoren 339 7.5.7 Aggregatfunktionen 341 7.5.8 Zeilen gruppieren 342 7.5.9 Joins - Daten aus mehreren Tabellen abfragen 344 7.5.10 CAST - die Typumwandlung in SQL 349 7.6 Die SELECT-Anweisung 350 7.7 Step by Step - ein Exkurs in die SQL-Welt 351 7.7.1 Tabellen anlegen, füllen und auswerten 352 7.7.2 Tabelleninhalte ändern 357 7.7.3 Daten auswerten 358 7.7.4 Daten löschen und Tabellen umstrukturieren 359 7.8 Tips & Tricks zum Thema SQL und Delphi 360 7.8.1 Besonderheiten der Borland Database Engine 360 7.8.2 Lange, Leerzeichen enthaltende Tabellenspaltennamen 360 7.8.3 Parametisierte SQL-Abfragen 361 7.8.4 SQL-Abfrage sortieren 363 7.8.5 DOS-Jokerzeichen versus SQL-Jokerzeichen 363 7.8.6 SQL und Sonderzeichen 364 7.9 Resümee 365 8 Tips & Tricks zu Datenbanken 366 8.1 Datenbanktabellen vom Programm anlegen lassen 366 8.1.1 Datenbanktabellen zur Programmlaufzeit generieren 366 8.1.2 Datenbank aus den Programm-Ressourcen heraus kopieren 371 8.2 Alias 375 8.2.1 Alias beim Programmstart prüfen 375 8.2.2 Alias im Programm anlegen 375 8.2.3 Daten zu einem bestimmten Alias auslesen 378 8.3 Datenbanktabellen 379 8.3.1 Datenbankverzeichnis ermitteln 379
" 2 Inhalt 8.3.2 Zugriff auf paßwortgeschützte Paradox-Tabellen 380 8.3.3 Paßwort einer Paradox-Tabelle programmgesteuert ändern 381 8.3.4 Referenzintegrität und kaskadiertes Löschen der Datensätze 382 8.3.5 Gelöschte Datensätze in einer dbase-tabelle anzeigen 385 8.3.6 Packen, Reorganisieren und Regenerieren 387 8.3.7 Daten in eine ASCII-Datei exportieren 390 8.3.8 Tabellenstruktur anzeigen und ausdrucken 392 8.3.9 Tabellen sperren und umbenennen 395 8.3.10 Tabelleninhalt generieren und löschen 396 8.3.11 Memory-Tabellen im Arbeitsspeicher 398 8.3.12 KeyViolation-Error abfangen 402 8.3.13 Tabelleneigenschaften auslesen 403 8.3.14 BDE-Tabellenpuffer programmgesteuert zurückschreiben 405 8.4 Datensätze suchen und filtern 408 8.4.1 Tabellendatensätze filtern 408 8.4.2 Suche in indizierten Tabellenspalten 413 8.4.3 Suche in nichtindizierten Tabellenspalten 414 8.4.4 Locate 420 8.4.5 Soundex - die unscharfe Suche 421 8.5 Datenbank, SQL und Multithreading 425 8.5.1 Der einfache Weg 425 8.5.2 Der offizielle Weg 427 8.5.3 Der effektive Weg 429 8.6 Datenbank-Komponenten 432 8.6.1 DBNavigatorfunktionen über das Menü aufrufen 432 8.6.2 TMemoField-Inhalt im DBGrid anzeigen 433 8.6.3 TQuery-Beispiele 435 8.6.4 Lookup-Felder 438 8.6.5 SQL-Abfrage via TQuery abbrechen 439 8.6.6 TInPlaceEdit 441 8.7 BDE 442 8.7.1 BDE-Fehlermeldungen nachschlagen 442 8.7.2 Informationen in der Registry 443 8.8 DLL und Datenbank 445 8.8.1 Zugriff auf lokale Tabellen 445 8.8.2 Zugriff auf SQL-Server 447 9 Client/Server-Datenbankanwendungen 448 9.1 Was ist an Client/Server so anders? 448 9.1.1 Technische Unterschiede 448 9.1.2 Logistische Unterschiede 449 9.1.3 Delphi-Professional oder Client/Server-Suite? 450 9.2 TTable versus TQuery versus TStoredProc 450 9.2.1 Eine Tabelle auf dem SQL-Server wird über TTable geöffnet 451
Inhalt " 3 9.2.2 Datensätze über TTable suchen 453 9.2.3 Nachteile von TQuery 454 9.2.4 Entscheidungsrichtlinien 455 9.3 Delphi's InterBase SQL Server for Windows 95/NT 457 9.3.1 InterBase Registry Configuration 457 9.3.2 Communication Diagnostic Tool - der IBS95-TÜV 458 9.3.3 InterBase Server Manager - das IBS95-Regiezentrum 458 9.4 Client/Server Step by Step 460 9.4.1 Neue Datenbank im IBS95 einrichten 460 9.4.2 Beispieltabelle person" anlegen 463 9.4.3 Borland Database Engine konfigurieren 466 9.4.4 Das erste Delphi-Beispielprojekt 467 9.4.5 Das zweite Beispiel - TQuery als Datenquelle 468 9.4.6 Das dritte Beispiel: TQuery als lebendige" Datenmenge 471 9.4.7 Beispiel 4: Delphi's Transaktionskontrolle 471 9.4.8 Luxus schafft Probleme! 474 9.4.9 Resümee 475 9.5 InterBase - ein Blick hinter die Kulissen 475 9.5.1 InterBase-Transaktionen 475 9.5.2 InterBase Transaction Isolation Level 476 9.5.3 SQLPASSTHRU-Mode 481 9.5.4 Delphi's UpdateMode-Varianten 487 9.5.5 Deadlocks 488 9.5.6 Garbage collection 490 9.5.7 Bedeutung von OIT und OAT 490 9.5.8 InterBase Sweeping 492 9.5.9 Der Optimizer des InterBase SQL Servers 493 9.5.10 InterBase UDF's - die User Defined Functions 498 9.6 Design einer InterBase-Datenbank 505 9.6.1 Der schnelle Weg über den Data Pump Expert 505 9.6.2 Der mühsame Weg des eigenen Designs 506 9.6.3 Domains 507 9.6.4 Generatoren 508 9.6.5 Trigger 509 9.6.6 Stored Procedure 513 9.6.7 Events.,: 516 9.6.8 Exceptions 1. 516 9.7 Tips & Tricks zum Thema Client/Server 517 9.7.1 Eine InterBase-Datenbank programmgesteuert anlegen 517 9.7.2 InterBase-Versioning in der Praxis 521 9.7.3 InterBase und die Fließkommazahlen 522 9.7.4 InterBase CHAR vs VARCHAR vs BLOB 523 9.7.5 Datenbank-Constraint's über mehrere Spalten 525 9.7.6 Datenbank-Benutzer auflisten 525
14 lnnalt 9.8 Performance Tips 526 9.8.1 Allgemeine Hinweise zur BDE 526 9.8.2 InterBase-Optimierung 527 9.8.3 Logische Datenbankstruktur 528 9.8.4 Kurzzeitige Transaktionen 528 9.8.5 Datenbankpflege 529 9.9 Resümee : 531 Anhang 532 Sachverzeichnis 537