Leseprobe Walter Doberenz, Thomas Gewinnus Access...

95
Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren Grundlagen und Praxiswissen. Für die Versionen 2010, 2013 und 2016 ISBN (Buch): 978-3-446-45027-1 Weitere Informationen oder Bestellungen unter http://www.hanser-fachbuch.de/978-3-446-45027-1 sowie im Buchhandel. © Carl Hanser Verlag, München

Transcript of Leseprobe Walter Doberenz, Thomas Gewinnus Access...

Page 1: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Leseprobe

Walter Doberenz, Thomas Gewinnus

Access programmieren

Grundlagen und Praxiswissen. Für die Versionen 2010, 2013 und 2016

ISBN (Buch): 978-3-446-45027-1

Weitere Informationen oder Bestellungen unter

http://www.hanser-fachbuch.de/978-3-446-45027-1

sowie im Buchhandel.

© Carl Hanser Verlag, München

Page 2: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis

Vorwort ...................................................................... 27

Teil I: Grundlagen 1 Einführung ................................................................... 331.1 VBA-Programmierung in Access ................................................ 33

1.1.1 Visual Basic versus VBA ................................................ 331.1.2 Objekt- und ereignisorientierte Programmierung ......................... 341.1.3 VBA- oder Makro-Programmierung? .................................... 351.1.4 Die VBA-Entwicklungsumgebung ....................................... 361.1.5 Formularentwurf ........................................................ 361.1.6 Code-Fenster und Symbolleiste .......................................... 371.1.7 Das Eigenschaftenfenster ................................................ 381.1.8 Der Projekt-Explorer .................................................... 391.1.9 Das Code-Fenster ....................................................... 391.1.10 Arbeiten mit der Hilfe ................................................... 42

1.2 Sicherheitseinstellungen ......................................................... 431.2.1 Zur Geschichte der Access-Sicherheit .................................... 431.2.2 Eine nicht vertrauenswürdige Datenbank öffnen .......................... 441.2.3 Das Sicherheitscenter ................................................... 461.2.4 Definition vertrauenswürdiger Speicherorte .............................. 49

1.3 Einführungsbeispiele ............................................................ 501.3.1 Erstellen der Testdatenbank .............................................. 511.3.2 Konventionelle Programmierung ........................................ 521.3.3 Programmieren mit VBA ................................................ 561.3.4 Automatische Makrokonvertierung ...................................... 611.3.5 Programmieren mit Datenmakros ........................................ 62

1.4 Highlights und Features von Access 2016 ........................................ 641.4.1 Zur Geschichte der Vorgängerversionen .................................. 641.4.2 Microsoft Access 2016 – viel Lärm um nichts? ........................... 671.4.3 Der inoffizielle Access-Friedhof (Access 2013/2016) ..................... 68

Page 3: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

6 Inhaltsverzeichnis

1.5 Übersichten und Ergänzungen ................................................... 681.5.1 Deutsche und englische Bezeichner ...................................... 681.5.2 DoCmd-Objekt ......................................................... 70

2 Programmieren mit VBA .................................................. 732.1 Datentypen, Variablen und Konstanten ........................................... 73

2.1.1 Übersicht ............................................................... 732.1.2 Variablendeklaration .................................................... 742.1.3 Konstantendeklaration .................................................. 792.1.4 Gültigkeitsbereiche ..................................................... 80

2.2 Einzelheiten zu den Datentypen ................................................. 832.2.1 Single- und Double-Datentypen ......................................... 832.2.2 Integer-, Long- und Boolean-Datentypen ................................. 832.2.3 Date-Datentyp .......................................................... 842.2.4 Currency-Datentyp ...................................................... 862.2.5 String-Datentyp ......................................................... 872.2.6 Variant-Datentyp ........................................................ 89

2.3 Datenfelder (Arrays) ............................................................ 922.3.1 Statische Arrays ......................................................... 922.3.2 Dynamische Arrays ..................................................... 94

2.4 Benutzerdefinierte Datentypen .................................................. 962.4.1 Type-Anweisung ........................................................ 962.4.2 With-Anweisung ........................................................ 972.4.3 Strings innerhalb Type .................................................. 972.4.4 Enumerationen .......................................................... 982.4.5 Arrays in benutzerdefinierten Typen ..................................... 99

2.5 Operatoren ..................................................................... 1002.5.1 Arithmetische Operatoren ............................................... 1012.5.2 Logische Operatoren .................................................... 1032.5.3 Vergleichsoperatoren .................................................... 104

2.6 Kontrollstrukturen .............................................................. 1052.6.1 Bedingte Verzweigungen ................................................ 1052.6.2 Schleifenanweisungen ................................................... 1072.6.3 GoTo und GoSub ....................................................... 109

2.7 Zeichenkettenfunktionen ........................................................ 1102.7.1 Stringverarbeitung ...................................................... 1102.7.2 Format-Funktion ........................................................ 112

2.8 Vordefinierte Funktionen ........................................................ 1162.8.1 Mathematische Funktionen .............................................. 1162.8.2 Finanzmathematische Funktionen ........................................ 119

Page 4: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 7

2.8.3 Datums-/Zeitfunktionen ................................................. 1202.9 Benutzerdefinierte Funktionen/Prozeduren ....................................... 123

2.9.1 Funktion ................................................................ 1232.9.2 Prozedur ................................................................ 1242.9.3 Parameterübergabe ByRef oder ByVal ................................... 1242.9.4 Optionale Argumente .................................................... 1252.9.5 Benannte Argumente .................................................... 1262.9.6 Parameter-Arrays ....................................................... 1262.9.7 Dynamische Arrays als Argumente ....................................... 1272.9.8 Rückgabe von Arrays ................................................... 1272.9.9 Private-, Public- und Static-Deklarationen ................................ 128

2.10 Fehlersuche ..................................................................... 1302.10.1 Direktfenster ............................................................ 1312.10.2 Verwendung des Debug-Objekts ......................................... 1312.10.3 Arbeiten mit dem Lokal-Fenster ......................................... 1322.10.4 Überwachungs-Fenster .................................................. 1342.10.5 Noch mehr Debugging .................................................. 135

2.11 Fehlerbehandlung ............................................................... 1392.11.1 Anweisungen zum Error-Handling ....................................... 1392.11.2 Beispiele zum Error-Handling ........................................... 1402.11.3 Fehlerbehandlung per Ereignis ........................................... 1422.11.4 Fehlerbehandlung komplett deaktivieren ................................. 143

2.12 Standarddialogfelder ............................................................ 1432.12.1 Einfache MsgBox-Anweisung ........................................... 1442.12.2 Ausführliche MsgBox-Anweisung ....................................... 1452.12.3 Rückgabewerte der MsgBox-Funktion ................................... 1452.12.4 Abfrage von Werten mit der InputBox-Funktion .......................... 147

2.13 Übersichten und Ergänzungen ................................................... 1482.13.1 Datumskonstanten ...................................................... 1482.13.2 Rückgabewerte der VarType-Funktion ................................... 148

2.14 Praxisbeispiele .................................................................. 1492.14.1 In einem Textfeld suchen ................................................ 1492.14.2 Zeitangaben runden ..................................................... 1502.14.3 Das Wochenende feststellen ............................................. 1522.14.4 Mit dynamischen Arrays rechnen ........................................ 1532.14.5 Arbeiten mit dem Debugger ............................................. 157

3 Makros – eine Einführung ................................................. 1633.1 Klassische Makros .............................................................. 163

3.1.1 Entwurfsoberfläche ..................................................... 163

Page 5: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

8 Inhaltsverzeichnis

3.1.2 Eigenständige Makros ................................................... 1643.1.3 Eingebettete Makros .................................................... 1673.1.4 Das AutoKeys-Makro ................................................... 1713.1.5 Das AutoExec-Makro ................................................... 1733.1.6 Potenziell gefährliche Makroaktionen .................................... 173

3.2 Datenmakros ................................................................... 1743.2.1 Einsatzmöglichkeitem ................................................... 1753.2.2 Funktionsprinzip ........................................................ 1753.2.3 Erzeugen von Datenmakros ............................................. 1763.2.4 Datenmakros umbenennen, löschen und ändern .......................... 1773.2.5 USysApplicationLog .................................................... 1773.2.6 Aktionen in Datenmakros ............................................... 1783.2.7 Auswahl des richtigen Tabellenereignisses ............................... 179

3.3 Praxisbeispiele .................................................................. 1803.3.1 Eingabe-Formular mit neuem Datensatz öffnen ........................... 1813.3.2 Einen Datensatznavigator selbst bauen ................................... 1823.3.3 Ein ereignisgesteuertes Datenmakro erstellen ............................. 1843.3.4 Arbeiten mit einem benannten Datenmakro .............................. 1893.3.5 Per VBA auf ein benanntes Datenmakro zugreifen ........................ 1933.3.6 Änderungen von Tabelleninhalten protokollieren ......................... 194

4 Formulare und Steuerelemente .......................................... 1974.1 Allgemeines .................................................................... 197

4.1.1 Gruppen von Eigenschaften ............................................. 1984.1.2 Methoden ............................................................... 1984.1.3 Gruppen von Ereignissen ................................................ 198

4.2 Das Form-Objekt ............................................................... 1994.2.1 Format-Eigenschaften ................................................... 1994.2.2 Daten-Eigenschaften .................................................... 2064.2.3 Weitere Eigenschaften ................................................... 2064.2.4 Fenster- und Fokus-Ereignisse ........................................... 2084.2.5 Tastatur- und Maus-Ereignisse ........................................... 2104.2.6 Daten- und Filter-Ereignisse ............................................. 2124.2.7 Weitere Ereignisse ...................................................... 2144.2.8 Methoden ............................................................... 2144.2.9 Unterformulare ......................................................... 217

4.3 Steuerelemente (Controls) ....................................................... 2184.3.1 Allgemeines ............................................................ 2184.3.2 Allgemeine Eigenschaften auf einen Blick ............................... 2194.3.3 Allgemeine Ereignisse auf einen Blick ................................... 229

Page 6: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 9

4.3.4 Methoden von Steuerelementen .......................................... 2304.3.5 Das Screen-Objekt ...................................................... 231

4.4 ActiveX-Steuerelemente ........................................................ 2334.4.1 Vergleich mit den integrierten Steuerelementen ........................... 2334.4.2 StatusBar als Beispiel ................................................... 235

4.5 Praxisbeispiele .................................................................. 2394.5.1 Das Textfeld programmieren ............................................ 2394.5.2 In ungebundene Textfelder ein- und ausgeben ............................ 2414.5.3 Ein ungebundenes Kombinationsfeld füllen .............................. 2424.5.4 Ein Unterformular programmieren ....................................... 2454.5.5 Das Register-Steuerelement kennen lernen ............................... 2484.5.6 Die Statusleiste programmieren .......................................... 2524.5.7 Verwenden von Bild-Ressourcen ........................................ 2554.5.8 Programmieren des Navigationssteuerelements ........................... 257

5 Berichte ...................................................................... 2615.1 Allgemeines .................................................................... 261

5.1.1 Reportansichten ......................................................... 2615.1.2 Die OpenReport-Methode ............................................... 2625.1.3 Parameterübergabe ...................................................... 263

5.2 Wichtige Berichtseigenschaften ................................................. 2635.2.1 Formateigenschaften .................................................... 2635.2.2 Dateneigenschaften ..................................................... 2645.2.3 Grafikeigenschaften ..................................................... 2645.2.4 Linien- und Stifteigenschaften ........................................... 2685.2.5 Schrifteigenschaften ..................................................... 2695.2.6 Farb- und Mustereigenschaften .......................................... 2695.2.7 Sonstige Eigenschaften .................................................. 271

5.3 Berichtsereignisse ............................................................... 2735.3.1 Allgemeine Ereignisse .................................................. 2735.3.2 Tastatur- und Mausereignisse ............................................ 275

5.4 Berichtsmethoden ............................................................... 2765.4.1 Grafikmethoden (Übersicht) ............................................. 2765.4.2 Scale ................................................................... 2765.4.3 Line .................................................................... 2775.4.4 PSet .................................................................... 2785.4.5 Circle ................................................................... 2795.4.6 Print .................................................................... 2805.4.7 TextWidth und TextHeight .............................................. 2815.4.8 Sonstige Methoden ...................................................... 282

Page 7: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

10 Inhaltsverzeichnis

5.5 Weitere Features des Report-Objekts ............................................. 2825.5.1 Rich-Text-Felder drucken ............................................... 2825.5.2 Verlauf eines Memofeldes drucken ....................................... 2835.5.3 Eine Liste der Anlagen drucken .......................................... 2835.5.4 Berichte nachträglich filtern ............................................. 2865.5.5 Berichte als PDF-Datei exportieren ...................................... 2875.5.6 Berichte als RTF-Datei exportieren ...................................... 288

5.6 Das Printer-Objekt .............................................................. 2885.6.1 Wo finde ich das Printer-Objekt? ........................................ 2895.6.2 Die Printers-Collection .................................................. 2895.6.3 Auswahl eines Druckers ................................................. 2905.6.4 Speichern von Berichts-Optionen ........................................ 2925.6.5 Eigenschaften des Printers ............................................... 293

5.7 Direkte Druckausgabe ........................................................... 2945.8 Übersichten ..................................................................... 294

5.8.1 DrawMode-Eigenschaft ................................................. 2945.8.2 Farbkonstanten ......................................................... 295

5.9 Praxisbeispiele .................................................................. 2955.9.1 Aufruf eines Berichts mit Datenfilter ..................................... 2955.9.2 Im Report gruppieren und rechnen ....................................... 2995.9.3 Erstellen und Drucken eines Diagramms ................................. 3035.9.4 Berichte in Formularen anzeigen ......................................... 307

6 Programmieren mit Objekten ............................................ 3096.1 Objektvariablen ................................................................. 309

6.1.1 Objekttypen und Set-Anweisung ......................................... 3096.1.2 Object-Datentyp ........................................................ 3116.1.3 Form- und Report-Objekt ............................................... 3126.1.4 Control-Objekt .......................................................... 313

6.2 Formular- und Berichtsmodule .................................................. 3176.2.1 Instanzen von Formularen und Berichten ................................. 3176.2.2 Benutzerdefinierte Form-/Report-Objekte ................................ 3196.2.3 Eigenständige Klassenmodule ........................................... 320

6.3 Auflistungen .................................................................... 3246.3.1 Forms/Reports .......................................................... 3246.3.2 Controls ................................................................ 3256.3.3 Collection-Objekt ....................................................... 3276.3.4 Dictionary-Objekt ....................................................... 3296.3.5 Property und Properties ................................................. 3296.3.6 Module-Objekt und Modules-Auflistung ................................. 330

Page 8: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 11

6.3.7 Reference-Objekt und References-Auflistung ............................ 3326.4 Die Access-Objekthierarchie .................................................... 334

6.4.1 Der Objektkatalog ...................................................... 3346.4.2 Das Application-Objekt allgemein ....................................... 3356.4.3 Eigenschaften und Methoden des Application-Objekts .................... 3386.4.4 Weitere wichtige Objekte ................................................ 3436.4.5 AccessObject ........................................................... 3446.4.6 CurrentProject .......................................................... 3456.4.7 CurrentData ............................................................ 347

6.5 Übersichten ..................................................................... 3476.5.1 Konstanten der ControlType-Eigenschaft ................................. 3476.5.2 Rückgabewerte der CurrentObjectType-Funktion ......................... 348

6.6 Praxisbeispiele .................................................................. 3486.6.1 Ein Steuerelemente-Array automatisch erstellen .......................... 3486.6.2 Mit Formular-Instanzen arbeiten ......................................... 3526.6.3 Mit einer eigenständigen Klasse experimentieren ......................... 3546.6.4 Auf Objekte in Auflistungen zugreifen ................................... 3576.6.5 Properties-Auflistungen untersuchen ..................................... 360

Teil II: Datenschnittstellen 7 DAO-Programmierung ..................................................... 3657.1 Allgemeines .................................................................... 365

7.1.1 DBEngine .............................................................. 3657.1.2 Workspace-Objekt ...................................................... 3667.1.3 Database-Objekt ........................................................ 3677.1.4 Recordset-Objekt ....................................................... 3677.1.5 Verwendung der Datenbankobjekte ...................................... 368

7.2 Grundlegende Arbeitstechniken ................................................. 3687.2.1 Arbeitsumgebung festlegen .............................................. 3697.2.2 Datenbank anlegen und öffnen ........................................... 3697.2.3 Tabellen/Indizes anlegen ................................................ 3737.2.4 Tabellen einbinden ...................................................... 3787.2.5 Tabellen verknüpfen (Relationen) ........................................ 3797.2.6 Abfragen erstellen/ausführen ............................................ 3817.2.7 Öffnen von Tabellen/Abfragen ........................................... 383

7.3 Arbeiten mit Recordsets ......................................................... 3867.3.1 Eigenschaften und Methoden von Recordsets ............................ 3867.3.2 Datensätze anzeigen ..................................................... 3897.3.3 Datensätze hinzufügen/ändern ........................................... 391

Page 9: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

12 Inhaltsverzeichnis

7.3.4 Datensätze löschen ...................................................... 3937.3.5 Datensätze sortieren ..................................................... 3957.3.6 Datensätze suchen ...................................................... 3967.3.7 Datensätze filtern ....................................................... 3977.3.8 DAO in gebundenen Formularen ........................................ 3987.3.9 Auf Anlage-Felder zugreifen ............................................ 4017.3.10 Auf mehrwertige Felder zugreifen ....................................... 4047.3.11 Verlaufsverfolgung eines Memo-Felds ................................... 405

7.4 Weitere Funktionen ............................................................. 4067.4.1 Eigenschaften (Properties) ............................................... 4067.4.2 Transaktionen ........................................................... 408

7.5 Praxisbeispiele .................................................................. 4097.5.1 Eine Tabelle anlegen .................................................... 4097.5.2 Navigieren mit DAO .................................................... 4127.5.3 Den Datensatzzeiger bewegen ........................................... 4157.5.4 In Recordsets suchen .................................................... 4197.5.5 Eine Datenbank analysieren ............................................. 422

7.6 Komplexbeispiel: Telefonverzeichnis ............................................ 4257.6.1 Eingabemaske .......................................................... 4257.6.2 Anforderungen .......................................................... 4257.6.3 Programmierung ........................................................ 4267.6.4 Test und Bemerkungen .................................................. 435

8 ADO-Programmierung ..................................................... 4378.1 Ein erster Blick auf ADO ........................................................ 437

8.1.1 Kleines Einführungsbeispiel ............................................. 4388.1.2 Zur Geschichte von ADO ................................................ 4398.1.3 Hinweise zu den ADO-Bibliotheken ..................................... 4408.1.4 ADO und OLE DB ...................................................... 4418.1.1 ADO-Objektmodell ..................................................... 442

8.2 ADO-Grundoperationen ........................................................ 4448.2.1 Beziehungen zwischen den Objekten .................................... 4448.2.2 Die Verbindung zur Datenquelle ......................................... 4458.2.3 Aktionsabfragen mit dem Command-Objekt ............................. 4498.2.4 Recordsets mit Daten füllen ............................................. 451

8.3 Weitere Operationen mit Recordsets ............................................. 4568.3.1 Welche Recordset-Features werden unterstützt? .......................... 4568.3.2 Editieren von Datensätzen ............................................... 4578.3.3 Hinzufügen von Datensätzen ............................................ 4588.3.4 Löschen von Datensätzen ............................................... 458

Page 10: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 13

8.3.5 Recordsets filtern ....................................................... 4598.3.6 Ungebundene Recordsets ................................................ 4608.3.7 Recordsets abspeichern .................................................. 4618.3.8 Bewegen in Recordsets .................................................. 4618.3.9 Daten direkt einlesen .................................................... 4628.3.10 Sortieren ................................................................ 4638.3.11 Suchen ................................................................. 4648.3.12 Ereignisse auswerten .................................................... 464

8.4 Zugriff auf ADO-Auflistungen .................................................. 4668.4.1 Allgemeine Features .................................................... 4668.4.2 Property und Properties ................................................. 4678.4.3 Field und Fields ......................................................... 4688.4.4 Parameter und Parameters ............................................... 4698.4.5 Error und Errors ........................................................ 470

8.5 Übersichten ..................................................................... 4718.5.1 Connection-Objekt ...................................................... 4718.5.2 Command-Objekt ....................................................... 4728.5.3 Recordset-Objekt ....................................................... 472

8.6 Praxisbeispiele .................................................................. 4748.6.1 Mit ADO auf eine Access-Datenbank zugreifen .......................... 4748.6.2 Ein ADO-Datenklassenmodul verwenden ................................ 4768.6.3 Ein intelligentes ADO-Frontend entwickeln .............................. 479

9 Datenbankverwaltung ..................................................... 4859.1 Datenbankverwaltung mit ADOX ............................................... 485

9.1.1 Datenbanken erstellen ................................................... 4879.1.2 Tabellendefinition ....................................................... 4899.1.3 Indexdefinition .......................................................... 4939.1.4 Erstellen von Prozeduren und Sichten .................................... 4959.1.5 Tabellen verknüpfen (Relationen) ........................................ 496

9.2 Erstellen spezieller Feldtypen ................................................... 4979.2.1 Automatische Zufallswerte (GUID) ...................................... 4979.2.2 Memofeld mit Archiv-Funktion (Nur anfügen) ........................... 4999.2.3 Anlage-Feld ............................................................ 5019.2.4 Rich-Text-Feld .......................................................... 5029.2.5 Multivalue-Feld (MVF) ................................................. 5039.2.6 Berechnete Spalten ...................................................... 5089.2.7 Beschreibung von Datenbankfeldern setzen .............................. 510

9.3 Zugriffsschutz in Access-Datenbanken ........................................... 5129.3.1 Grundlagen ............................................................. 512

Page 11: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

14 Inhaltsverzeichnis

9.3.2 Sichern auf Datenbankebene (DAO) ..................................... 5149.3.3 Sichern auf Datenbankebene (ADO/ADOX) ............................. 5159.3.4 Erstellen neuer Benutzer und Gruppen (DAO) ............................ 5159.3.5 Vergabe von Rechten (DAO) ............................................ 5179.3.6 Komplettbeispiel: Nutzerbasierte Sicherheit .............................. 5199.3.7 Erstellen neuer Benutzer und Gruppen (ADOX) .......................... 5249.3.8 Vergabe von Rechten (ADOX) .......................................... 5259.3.9 Verschlüsseln von Datenbanken ......................................... 527

9.4 Multiuserzugriff ................................................................ 5309.4.1 Verwenden der DAO .................................................... 5319.4.2 Verwenden der ADO .................................................... 534

9.5 ODBC-Verbindungen ........................................................... 5359.5.1 Ein Blick auf den ODBC-Datenquellen-Administrator .................... 5359.5.2 Erstellen einer ODBC-Verbindung (DAO) ............................... 5379.5.3 Öffnen einer ODBC-Verbindung (DAO) ................................. 5389.5.4 Öffnen einer ODBC-Verbindung (ADO) ................................. 5409.5.5 Konfigurieren von ODBC-Verbindungen ................................. 541

9.6 Zugriff auf Fremdformate ....................................................... 5419.6.1 dBASE III/IV- und FoxPro-Datenbanken ................................ 5429.6.2 Textdateien (TXT/ASC/CSV) ........................................... 546

9.7 Einbinden externer Tabellen ..................................................... 5509.7.1 Verwenden der DAO .................................................... 5509.7.2 Verwenden der ADOX .................................................. 552

9.8 Exportieren von Daten .......................................................... 5549.8.1 TransferDatabase-Methode .............................................. 5549.8.2 Exportieren mit SQL-Anweisungen ...................................... 555

9.9 Replizieren von Datenbanken ................................................... 5559.10 Optimierung .................................................................... 556

9.10.1 Indizes ................................................................. 5569.10.2 Abfrage-Optimierung ................................................... 5569.10.3 Weitere Möglichkeiten .................................................. 5579.10.4 ADO/DAO/ODBC – Was ist schneller? .................................. 558

9.11 Tipps & Tricks .................................................................. 5609.11.1 Wie prüft man die ADO-Versionsnummer? ............................... 5609.11.2 Access-Datenbanken exklusiv öffnen .................................... 5609.11.3 Access-Datenbanken im Netzwerk ....................................... 5619.11.4 Alle aktiven Verbindungen zur Datenbank auflisten ....................... 5619.11.5 Das Datenbank-Kennwort ändern ........................................ 5629.11.6 Abfragen über mehrere Datenbanken .................................... 5639.11.7 Datenbanken reparieren/komprimieren ................................... 563

Page 12: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 15

10 Microsoft SQL Server ...................................................... 56510.1 Ein erster Schock ... ............................................................. 56510.2 Allgemeines .................................................................... 566

10.2.1 SQL Server LocalDB ................................................... 56710.2.2 SQL Server Express ..................................................... 56810.2.3 Unterschiede SQL Server-Varianten/Jet-Engine .......................... 56910.2.4 Client- versus Fileserver-Programmierung ............................... 57110.2.5 Installation SQL Server Express ......................................... 57310.2.6 Netzwerkzugriff für den SQL Server Express ............................. 57710.2.7 Die wichtigsten Tools von SQL Server ................................... 57910.2.8 Vordefinierte Datenbanken .............................................. 58210.2.9 Einschränkungen ........................................................ 58310.2.10 Weitere SQL Server-Funktionen im Kurzüberblick ....................... 58410.2.11 Datenbanken verwalten ................................................. 585

10.3 Transact-SQL – die Sprache des SQL Servers .................................... 58710.3.1 Schreibweise ............................................................ 58710.3.2 Kommentare ............................................................ 58810.3.3 Zeichenketten ........................................................... 58810.3.4 Variablen deklarieren/verwenden ........................................ 58910.3.5 Bedingungen mit IF/ELSE auswerten .................................... 59010.3.6 Verwenden von CASE .................................................. 59110.3.7 Verwenden von WHILE…BREAK/CONTINUE ......................... 59110.3.8 Datum und Uhrzeit in T-SQL ............................................ 59210.3.9 Verwenden von GOTO .................................................. 592

10.4 Praktisches Arbeiten mit dem SQL Server ........................................ 59310.4.1 Erstellen neuer SQL Server-Datenbanken ................................ 59310.4.2 Erzeugen und Verwalten von Tabellen ................................... 59410.4.3 Erzeugen und Verwenden von Sichten (Views) ........................... 59510.4.4 Verwenden von Gespeicherten Prozeduren ............................... 59710.4.5 Programmieren von Triggern ............................................ 60110.4.6 Erzeugen von Datenbankdiagrammen .................................... 60510.4.7 Volltextabfragen ........................................................ 60610.4.8 Datenbanken sichern und wiederherstellen ............................... 612

10.5 Fehlerbehandlung ............................................................... 61510.5.1 Das Fehlermodell des SQL Servers ...................................... 61610.5.2 Verwenden von @@ERROR ............................................ 61610.5.3 Verwenden von RAISEERROR ......................................... 61710.5.4 Fehlerbehandlung mit TRY...CATCH .................................... 61810.5.5 Fehlerbehandlung mit den ADO ......................................... 620

10.6 Datensicherheit auf dem Microsoft SQL Server .................................. 622

Page 13: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

16 Inhaltsverzeichnis

10.6.1 Überblick Sicherheitsmodell ............................................. 62310.6.2 Verwalten mit dem SQL Server Management Studio ...................... 62510.6.3 Verwalten mit T-SQL .................................................... 629

10.7 Tipps & Tricks .................................................................. 63210.7.1 Alle registrierten Microsoft SQL Server ermitteln ........................ 63210.7.2 Alle Datenbanken ermitteln ............................................. 63310.7.3 Alle Tabellen ermitteln .................................................. 63310.7.4 Eine Tabelle löschen .................................................... 63410.7.5 Anzahl der Datensätze beschränken ...................................... 63510.7.6 Platzhalterzeichen in TSQL .............................................. 63610.7.7 Leerzeichen entfernen ................................................... 63610.7.8 Teilstrings erzeugen ..................................................... 63610.7.9 Mit einer Datenbankdatei verbinden ..................................... 63710.7.10 Warum wird @@ERROR nicht korrekt verarbeitet? ...................... 63810.7.11 Die Anzahl der Datensätze bestimmen ................................... 63810.7.12 Warum sind Abfragen mit Platzhaltern so langsam? ...................... 63810.7.13 Groß-/Kleinschreibung berücksichtigen .................................. 63910.7.14 Das Ergebnis einer Stored Procedure speichern ........................... 63910.7.15 Eine Datenbank umbenennen ............................................ 63910.7.16 Eine Datenbank zwischen Servern verschieben ........................... 64010.7.17 Die Datenbankstruktur kopieren ......................................... 64110.7.18 Nach dem Löschen IDENTITY auf 0 setzen .............................. 64210.7.19 Eine Tabellenspalte umbenennen ........................................ 64210.7.20 Temporäre Tabellen unterscheiden ....................................... 64210.7.21 Daten aus verschiedenen Datenbanken anzeigen .......................... 64310.7.22 Einen SMO-Mapper realisieren .......................................... 643

10.8 Übersichten ..................................................................... 64810.8.1 Datentypen ............................................................. 64810.8.2 Unterschiede Access- und SQL Server-Datentypen ....................... 649

11 Access und Azure SQL ..................................................... 65111.1 Einführung in SQL Azure-Datenbanken .......................................... 652

11.1.1 Das Grundprinzip der "Webdatenbank" .................................. 65211.1.2 Der Azure-Server ....................................................... 65411.1.3 Die Frage nach den Kosten .............................................. 655

11.2 Einrichten des Servers .......................................................... 65611.2.1 Die zentrale Organisationsstruktur ....................................... 65711.2.2 Einen Server und eine Datenbank erstellen ............................... 65811.2.3 IP-Filter konfigurieren .................................................. 66211.2.4 Bemerkungen zum neu erstellten Account ................................ 663

Page 14: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 17

11.2.5 Die drei konzeptionellen Zugriffsmodelle ................................ 66311.3 Administrieren von Azure SQL-Datenbanken .................................... 666

11.3.1 Zugriff mit dem SQL Server Management Studio ........................ 66611.3.2 Weitere Accounts erstellen ............................................... 66811.3.3 Lokale Datenbanken migrieren .......................................... 67111.3.4 Migrieren von Access-Datenbanken ..................................... 674

11.4 Praktische Umsetzung in Access ................................................. 67611.4.1 Tabellen einbinden ...................................................... 67711.4.2 DAO- oder ADO-Zugriff – keine Frage! ................................. 68011.4.3 Unsere AzureSQL-Library .............................................. 68011.4.4 Verbindung mit ADO aufbauen .......................................... 68111.4.5 Datenbank erstellen ..................................................... 68511.4.6 Ist die Datenbank schon vorhanden? ..................................... 68611.4.7 Den aktuellen "Füllstand" abrufen ....................................... 68711.4.8 Was passiert, wenn die Datenbank zu klein wird? ......................... 69011.4.9 Eine Datenbankkopie erstellen ........................................... 69011.4.10 Tabelle(n) erstellen ...................................................... 69111.4.11 Daten exportieren ....................................................... 69211.4.12 Daten einbinden ........................................................ 69311.4.13 Daten lesen ............................................................. 69411.4.14 Daten schreiben ......................................................... 695

11.5 Abschließende Hinweise ........................................................ 69611.5.1 Synchronisieren ......................................................... 69611.5.2 Performance-Tipps ...................................................... 69711.5.3 Die Firewall per T-SQL konfigurieren .................................... 69711.5.4 Arbeiten mit sqlcmd ..................................................... 699

11.6 Fazit ........................................................................... 699

12 Zugriff auf SQLite .......................................................... 70112.1 Was eigentlich ist SQLite? ...................................................... 702

12.1.1 Vorteile ................................................................. 70212.1.2 Nachteile ............................................................... 703

12.2 Vorbereitungen ................................................................. 70312.2.1 Download/Installation des ODBC-Treibers ............................... 70412.2.2 Download/Installation SQLite for Excel .................................. 705

12.3 Datenbank-Tools ................................................................ 70612.3.1 Database .NET .......................................................... 70612.3.2 SQLite Administrator ................................................... 708

12.4 Praktische Aufgabenstellungen .................................................. 70912.4.1 Einbinden von SQLite-Tabellen per Assistent ............................ 709

Page 15: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

18 Inhaltsverzeichnis

12.4.2 Einbinden von SQLite-Tabellen per VBA-Code .......................... 71012.4.3 Datenbank per Code erstellen ............................................ 71112.4.4 Tabellen erzeugen ....................................................... 71212.4.5 Datenbankzugriff per ADO realisieren ................................... 71412.4.6 Die Bedeutung von Transaktionen bei SQLite ............................ 71512.4.7 SOUNDEX verwenden ................................................. 71612.4.8 Volltextabfragen realisieren .............................................. 717

12.5 Praxisbeispiele .................................................................. 72012.5.1 Verwenden der Volltextsuche ............................................ 72012.5.2 Implementieren der Klasse SQLiteDatabase .............................. 72512.5.3 Verwenden der Klasse SQLiteDatabase .................................. 735

12.6 Tipps & Tricks .................................................................. 73712.6.1 Für Liebhaber der Kommandozeile – Sqlite3.exe ......................... 73712.6.2 Eine SQLite-Datenbank reparieren ....................................... 73912.6.3 Eine Beispieldatenbank herunterladen ................................... 74012.6.4 Testen ob Tabelle vorhanden ist .......................................... 74012.6.5 Die Datenbank defragmentieren ......................................... 74012.6.6 Mehrere Datenbanken verknüpfen ....................................... 74112.6.7 Eine Abfrage/Tabelle kopieren ........................................... 74112.6.8 Ein Backup implementieren ............................................. 74212.6.9 Tabellen zwischen Datenbanken kopieren ................................ 74212.6.10 Ersatz für TOP .......................................................... 74212.6.11 Metadaten auswerten .................................................... 74312.6.12 Timestamp als Defaultwert verwenden ................................... 74412.6.13 Export in XML-Format ................................................. 745

12.7 Fazit ........................................................................... 745

Teil III: Weitere Technologien 13 Dateien und Verzeichnisse ................................................ 74913.1 Allgemeines .................................................................... 749

13.1.1 ANSI/ASCII/Unicode ................................................... 74913.1.2 Gemeinsamer Dateizugriff ............................................... 75013.1.3 Verwenden der File System Objects ...................................... 750

13.2 Zugriff auf das Dateisystem ..................................................... 75213.2.1 Ermitteln aller Laufwerke und deren Eigenschaften ....................... 75213.2.2 Ermitteln aller Verzeichnis-Eigenschaften ................................ 75313.2.3 Auflisten aller Unterverzeichnisse eines Folders .......................... 75413.2.4 Rekursiv alle Unterverzeichnisse auflisten ............................... 75513.2.5 Ein Verzeichnis erzeugen ................................................ 756

Page 16: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 19

13.2.6 Das Datenbankverzeichnis bestimmen ................................... 75713.2.7 Abfragen des Temp-/System/...-Verzeichnisses ........................... 75713.2.8 Prüfen, ob eine Datei existiert ........................................... 75813.2.9 Verzeichnisse/Dateien kopieren/löschen .................................. 75913.2.10 Auflisten aller Dateien eines Verzeichnisses .............................. 75913.2.11 Name, Pfad und Extension einer Datei ermitteln .......................... 76013.2.12 Einen Tempfile-Namen erzeugen ........................................ 762

13.3 Textdateien ..................................................................... 76213.3.1 Klassischer Zugriff auf Textdateien ...................................... 76313.3.2 Zugriff auf Textdateien mit den File System Objects ...................... 765

13.4 Typisierte Dateien ............................................................... 76813.4.1 Öffnen .................................................................. 76813.4.2 Lesen/Schreiben ........................................................ 768

13.5 Weitere Dateien ................................................................. 77013.5.1 Binärdateien ............................................................ 77013.5.2 INI-Dateien ............................................................. 771

13.6 Die Registrierdatenbank ......................................................... 77313.6.1 Einführung ............................................................. 77313.6.2 API/VBA-Zugriff auf die Registrierungsdatenbank ....................... 77413.6.3 API-Konstanten/Funktionen für den Registry-Zugriff ..................... 77513.6.4 Prüfen, ob ein Schlüssel existiert ......................................... 77713.6.5 Einen vorhandenen Wert auslesen ........................................ 77713.6.6 Einen Schlüssel erstellen ................................................ 77813.6.7 Einen Wert setzen bzw. ändern ........................................... 77913.6.8 Einen Schlüssel löschen ................................................. 77913.6.9 Ein Feld löschen ........................................................ 77913.6.10 Aufruf der Funktionen .................................................. 780

13.7 Dateidialoge .................................................................... 78213.7.1 Variante 1 (Office 16 Library) ........................................... 78313.7.2 Variante 2 (Windows-API) .............................................. 78513.7.3 Verzeichnisdialog (Windows-API) ....................................... 790

13.8 Übersichten ..................................................................... 79213.8.1 Dateifunktionen in Access ............................................... 79213.8.2 FSO-Eigenschaften und -Methoden ...................................... 793

13.9 Praxisbeispiele .................................................................. 79413.9.1 Auf eine Textdatei zugreifen ............................................. 79413.9.2 Dateien suchen .......................................................... 79913.9.3 Die Shellfunktionen verwenden .......................................... 80113.9.4 Einen Verzeichnisbaum in eine TreeView einlesen ........................ 806

Page 17: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

20 Inhaltsverzeichnis

14 XML in Theorie und Praxis ................................................ 80714.1 XML – etwas Theorie ........................................................... 807

14.1.1 Allgemeines ............................................................ 80714.1.2 Der XML-Grundaufbau ................................................. 81014.1.3 Wohlgeformte Dokumente .............................................. 81114.1.4 Processing Instructions (PI) .............................................. 81314.1.5 Elemente und Attribute .................................................. 81414.1.6 Verwendbare Zeichensätze .............................................. 815

14.2 XSD-Schemas .................................................................. 81714.2.1 Das Grundprinzip ....................................................... 81714.2.2 Ein XSD-Schema mit Microsoft Access erzeugen ........................ 819

14.3 XML-Verarbeitung mit dem DOM ............................................... 82314.3.1 Was ist das DOM? ...................................................... 82314.3.2 Erste Schritte ........................................................... 82414.3.3 Erzeugen von Instanzen ................................................. 82514.3.4 Laden von Dokumenten ................................................. 82614.3.5 XML-Fehlerprüfung/-Analyse ........................................... 82714.3.6 Erzeugen von XML-Dokumenten ........................................ 82914.3.7 Auslesen von XML-Dateien ............................................. 83114.3.8 Einfügen von Informationen ............................................. 83414.3.9 Attribute oder Element .................................................. 83714.3.10 Suchen in den Baumzweigen ............................................ 84014.3.11 Das Interpretieren von Leerzeichen ...................................... 843

14.4 XML-Integration in Access ...................................................... 84614.4.1 Importieren ............................................................. 84614.4.2 Exportieren ............................................................. 84914.4.3 XML-Transformation mit XSLT ......................................... 85314.4.4 Application-Objekt (ImportXML/ExportXML) ........................... 85614.4.5 ADO-Recordset ......................................................... 859

14.5 Vor- und Nachteile von XML .................................................... 86114.5.1 Grundsätzlicher Vergleich ............................................... 86214.5.2 Zeitvergleich ADO/XML ................................................ 862

14.6 Praxisbeispiele .................................................................. 86414.6.1 Speichern im UTF-8-/UTF-16-Format ................................... 86414.6.2 UTF-8-/UTF-16 aus einem ADO-Stream laden ........................... 86614.6.3 XML-Daten asynchron verarbeiten ...................................... 86814.6.4 XML-Daten in einer TreeView darstellen ................................ 87014.6.5 Navigieren zwischen einzelnen XML-Baumknoten ....................... 87314.6.6 ADO-XML-Streams nachbearbeiten ..................................... 87614.6.7 Textdaten in XML-Dokumente umwandeln .............................. 879

Page 18: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 21

15 SQL im Einsatz .............................................................. 88115.1 Einführung ..................................................................... 881

15.1.1 SQL-Dialekte ........................................................... 88215.1.2 Kategorien von SQL-Anweisungen ...................................... 882

15.2 Etwas (Datenbank-)Theorie ..................................................... 88415.2.1 Allgemeines/Begriffe ................................................... 88415.2.2 Normalisieren von Tabellen ............................................. 88915.2.3 Beziehungen zwischen den Tabellen ..................................... 89415.2.4 Verknüpfen von Tabellen ................................................ 896

15.3 Testprogramm und Beispieldatenbank ........................................... 90015.3.1 Hinweise zur Bedienung ................................................ 90015.3.2 Die Beispieldatenbank im Überblick ..................................... 90015.3.3 ADO Query ............................................................ 90115.3.4 Bemerkungen ........................................................... 902

15.4 Daten abfragen ................................................................. 90315.4.1 Abfragen mit SELECT .................................................. 90415.4.2 Alle Spalten auswählen .................................................. 90415.4.3 Auswahl der Spalten .................................................... 90515.4.4 Filtern .................................................................. 90615.4.5 Beschränken der Ergebnismenge ........................................ 91215.4.6 Eindeutige Records/doppelte Datensätze ................................. 91315.4.7 Tabellen verknüpfen .................................................... 91415.4.8 Tabellen vereinigen ..................................................... 91715.4.9 Datensätze sortieren ..................................................... 91815.4.10 Datensätze gruppieren ................................................... 91815.4.11 Unterabfragen .......................................................... 92015.4.12 Anlage-Felder mit SQL verwalten ....................................... 92415.4.13 History-Felder mit SQL abfragen ........................................ 92615.4.14 Mehrwertige Felder mit SQL abfragen ................................... 928

15.5 Daten manipulieren ............................................................. 92915.5.1 Einfügen einzelner Datensätze ........................................... 93015.5.2 Einfügen von Abfragedaten .............................................. 93115.5.3 Exportieren/Importieren von Abfragedaten ............................... 93315.5.4 Aktualisieren/Ändern ................................................... 93515.5.5 Löschen ................................................................ 936

15.6 Erweiterte SQL-Funktionen ..................................................... 93715.6.1 Berechnete/Formatierte Spalten .......................................... 93815.6.2 Berechnungsfunktionen ................................................. 94415.6.3 NULL-Werte ........................................................... 94515.6.4 Datum und Zeit in SQL-Abfragen ....................................... 947

Page 19: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

22 Inhaltsverzeichnis

15.6.5 Datentypumwandlungen ................................................. 95215.6.6 Kreuztabellenabfragen .................................................. 95315.6.7 Steuerelemente in Abfragen verwenden .................................. 95615.6.8 Globale Variablen in Abfragen verwenden ............................... 957

15.7 Datenbankverwaltung mit SQL (DDL) ........................................... 95715.7.1 Datenbanken ............................................................ 95815.7.2 Tabellen ................................................................ 95815.7.3 Indizes ................................................................. 95915.7.4 Tabellen/Indizes löschen oder verändern ................................. 96215.7.5 Sichten (Views) ......................................................... 96215.7.6 Nutzer- und Rechteverwaltung ........................................... 96415.7.7 Transaktionen ........................................................... 964

15.8 SQL in der Access-Praxis ....................................................... 96515.8.1 SQL in Abfragen ........................................................ 96515.8.2 SQL im Basic-Code ..................................................... 96615.8.3 SQL beim Oberflächenentwurf .......................................... 96815.8.4 VBA-Funktionen in SQL-Anweisungen ................................. 968

15.9 Tipps & Tricks .................................................................. 97015.9.1 Wie kann ich die Anzahl der Datensätze ermitteln? ....................... 97015.9.2 Wie nutze ich Datumsteile in SQL zur Suche? ............................ 97115.9.3 Die Groß-/Kleinschreibung berücksichtigen .............................. 97115.9.4 Warum erhalte ich zu viele Datensätze ? ................................. 97215.9.5 Doppelte Datensätze aus einer Tabelle löschen ........................... 973

15.10 Praxisbeispiele .................................................................. 97415.10.1 Ein komfortables SQL-Abfrageprogramm erstellen ....................... 97415.10.2 Datum und Zeit in SQL einbauen ........................................ 976

16 Anwendungsdesign ........................................................ 97916.1 Access-Oberflächengestaltung ................................................... 979

16.1.1 Beschriften der Kopfzeile ............................................... 98016.1.2 Informationen in der Statuszeile anzeigen ................................ 98216.1.3 Fortschrittsanzeige mit dem Progressbar realisieren ....................... 98316.1.4 Navigationsbereich konfigurieren ........................................ 98416.1.5 Access-Hauptfenster komplett ausblenden ............................... 990

16.2 Steuern der Anwendung ......................................................... 99316.2.1 Autostart mit AutoExec-Makro .......................................... 99316.2.2 Formulare automatisch starten ........................................... 99516.2.3 Warten auf das Ende .................................................... 99516.2.4 Access per VBA beenden ................................................ 99616.2.5 Den Runtime-Modus aktivieren .......................................... 996

Page 20: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 23

16.2.6 Befehlszeilen-Optionen verwenden ...................................... 99716.3 Entwickeln von Assistenten und Add-Ins ......................................... 999

16.3.1 Assistenten-Typen ...................................................... 99916.3.2 Einbinden der Assistenten in die Access-IDE ............................. 99916.3.3 Menü-Assistent (Beispiel) ............................................... 100116.3.4 Objekt-Assistent (Beispiel) .............................................. 100316.3.5 Steuerelemente-Assistent (Beispiel) ...................................... 100716.3.6 Eigenschaften-Assistent ................................................. 1010

16.4 Entwickeln/Einbinden von Managed Add-Ins .................................... 101116.4.1 Interaktion Anwendung/Add-In .......................................... 101116.4.2 Entwurf des Add-Ins .................................................... 101216.4.3 Oberfläche .............................................................. 101416.4.4 Der Quellcode des Add-Ins .............................................. 101516.4.5 Formularentwurf für das Add-In ......................................... 101716.4.6 Kompilieren und Einbinden ............................................. 101716.4.7 Testen .................................................................. 1018

16.5 Libraries unter Access ........................................................... 101916.5.1 Erstellen und Einbinden ................................................. 101916.5.2 Debugging .............................................................. 102016.5.3 Einfaches Beispiel ...................................................... 102116.5.4 Hinweise ............................................................... 1023

16.6 Praxisbeispiele .................................................................. 102416.6.1 Mehr über die aktuelle Access-Version erfahren .......................... 102416.6.2 Access neu starten/Datenbank neu laden ................................. 102516.6.3 Mit Reference-Objekten arbeiten ........................................ 102616.6.4 Benutzerdefinierte Eigenschaften einsetzen .............................. 103016.6.5 Den aktuellen Datenbanknutzer ermitteln ................................ 103416.6.6 Überlappende Fenster einstellen ......................................... 103416.6.7 Access-Optionen abrufen/setzen ......................................... 1035

17 Menüband und Backstage ................................................ 103717.1 Allgemeine Grundlagen ......................................................... 1037

17.1.1 Manuelle Konfigurationsmöglichkeiten .................................. 103817.1.2 Grundprinzip der Programmierung ....................................... 103917.1.3 Verwenden der Tabelle USysRibbons .................................... 104117.1.4 Application.LoadCustomUI als Alternative .............................. 1042

17.2 Ein kleines Testprogramm ....................................................... 104217.3 Praktische Aufgabenstellungen .................................................. 1044

17.3.1 Infos über Steuerelemente und Symbole erhalten ......................... 104417.3.2 Hauptregisterkarten ausblenden .......................................... 1046

Page 21: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

24 Inhaltsverzeichnis

17.3.3 Einzelne Registerkarten ausblenden ...................................... 104717.3.4 Einzelne Gruppen ausblenden ........................................... 104817.3.5 Registerkarten, Gruppen und Schaltflächen einfügen ..................... 104917.3.6 Ereignisbehandlung mit VBA-Code/Makros ............................. 105117.3.7 Verändern von Eigenschaften mit VBA-Callbacks ........................ 105217.3.8 Aktualisieren des Menübands per VBA-Code ............................ 105217.3.9 Kontextabhängige Registerkarten ........................................ 105317.3.10 Registerkarten per VBA aktivieren ....................................... 105417.3.11 Fehlermeldungen des Menübands anzeigen .............................. 105517.3.12 Vorhandene Funktionen des Menübands ändern .......................... 105517.3.13 Die Schnellzugriffsleiste erweitern/programmieren ....................... 1056

17.4 Übersicht der Steuerelemente .................................................... 105717.4.1 labelControl-Steuerelement .............................................. 105717.4.2 button-Steuerelement ................................................... 105717.4.3 separator-Steuerelement ................................................. 106117.4.4 toggleButton-Steuerelement ............................................. 106217.4.5 buttonGroup-Steuerelement ............................................. 106317.4.6 checkBox-Steuerelement ................................................ 106417.4.7 editBox-Steuerelement .................................................. 106517.4.8 comboBox-Steuerelement ............................................... 106617.4.9 dropDownElement-Steuerelement ....................................... 107017.4.10 gallery-Steuerelement ................................................... 107317.4.11 menu-Steuerelement .................................................... 107517.4.12 splitButton-Steuerelement ............................................... 107817.4.13 dialogBoxLauncher ..................................................... 1079

17.5 Die Backstage-Ansicht anpassen ................................................ 108117.5.1 Die Standardansicht verändern ........................................... 108217.5.2 Die drei möglichen Layouts für Registerkarten ........................... 108417.5.3 Die neuen Möglichkeiten von Gruppen .................................. 109117.5.4 Verwenden von LayoutContainern ....................................... 109317.5.5 Das Verhalten der Schaltflächen beeinflussen ............................. 109417.5.6 Mit VBA/Makros auf Ereignisse reagieren ............................... 1095

17.6 Tipps & Tricks .................................................................. 109617.6.1 Die guten alten Access 2003-Menüs anzeigen ............................ 109617.6.2 Das Office-Menü für Access 2007 anpassen .............................. 109817.6.3 XML-Daten komfortabel editieren ....................................... 109917.6.4 Arbeiten mit dem RibbonCreator ........................................ 1100

17.7 Übersichten ..................................................................... 1101

Page 22: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Inhaltsverzeichnis 25

18 Programmschnittstellen ................................................... 110318.1 Zwischenablage ................................................................. 1103

18.1.1 Kopieren/Einfügen mittels DoCmd-Objekt ............................... 110318.1.2 Ein Clipboard-Objekt programmieren .................................... 1104

18.2 API- und DLL-Einbindung ...................................................... 110718.2.1 Allgemeines ............................................................ 110718.2.2 Und was ist mit der 64-Bit Access Version? .............................. 110818.2.3 Woher bekomme ich Infos über die Win32-API? ......................... 111018.2.4 Einbinden der Deklaration ............................................... 111118.2.5 Wert oder Zeiger? ....................................................... 111318.2.6 Übergabe von Strings ................................................... 111418.2.7 Verwenden von As Any ................................................. 111518.2.8 Übergabe von Arrays .................................................... 111518.2.9 Besonderheiten mit Records ............................................. 111618.2.10 Zuordnen der Datentypen ............................................... 1118

18.3 OLE/ActiveX ................................................................... 111918.3.1 Überblick ............................................................... 111918.3.2 OLE .................................................................... 112018.3.3 Übersicht zum Objektfeld-Steuerelement ................................ 112118.3.4 Programmieren mit dem Objektfeld ...................................... 112418.3.5 ActiveX-Code-Komponenten (OLE-Automation) ........................ 112718.3.6 Programmieren mit ActiveX-Code-Komponenten ........................ 1128

18.4 DDE ........................................................................... 113018.4.1 Funktionsprinzip ........................................................ 113018.4.2 Verwenden von Steuerelementen ........................................ 113118.4.3 VBA-Programmierung .................................................. 1132

18.5 Scanner-Unterstützung per WIA ................................................. 113418.5.1 Was kann WIA? ........................................................ 113418.5.2 Installation/Vorbereitung ................................................ 113418.5.3 Einstieg mit kleiner Beispielanwendung .................................. 113518.5.4 Reagieren auf das Verbinden/Trennen von Geräten ....................... 113618.5.5 Ermitteln der verfügbaren Geräte ........................................ 113718.5.6 Anzeige der Geräteeigenschaften ........................................ 113718.5.7 Ein Bild einlesen ........................................................ 113918.5.8 Bild(er) drucken (Assistent) ............................................. 114018.5.9 Den Scanner-Assistent aufrufen ......................................... 114118.5.10 Grafikbearbeitung ....................................................... 1142

18.6 Zugriff auf Excel-Arbeitsmappen ................................................ 114418.6.1 Zugriffsmöglichkeiten ................................................... 114418.6.2 TransferSpreadsheet ..................................................... 1145

Page 23: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

26 Inhaltsverzeichnis

18.6.3 Import/Export per DAO ................................................. 114918.6.4 Daten auslesen .......................................................... 115318.6.5 Zugriff auf Tabellenbereiche ............................................. 115518.6.6 OLE-Automation ....................................................... 1156

18.7 Praxisbeispiele .................................................................. 115918.7.1 Eine externe Anwendung starten ......................................... 115918.7.2 Informationen über das aktuelle System ermitteln ........................ 116118.7.3 Das aktuelle Betriebssystem ermitteln .................................... 116418.7.4 Den Windows-Lizenznehmer ermitteln .................................. 116718.7.5 Zeitmessungen in Access durchführen ................................... 116918.7.6 Microsoft Word über ActiveX steuern .................................... 117318.7.7 Microsoft Excel über ActiveX steuern ................................... 1177

Index ......................................................................... 1179

Page 24: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Vorwort

Vorwort

Microsoft Access ist weit mehr als nur eine komfortable Datenbankverwaltung, denn dem fort-geschrittenen Anwender steht darüber hinaus eine vollständige und vor allem preiswerte Entwick-lungsumgebung für individuell geprägte Datenbankanwendungen zur Verfügung. Zusammen mitder objekt- und ereignisorientierten Programmiertechnik bilden VBA, SQL, DAO/ADO, Makrosund XML ein mächtiges Werkzeug, um leistungsfähige Datenbank-Applikationen mit bessererPerformance und auf beachtlich höherem Niveau zu erstellen.

Zum Buchinhalt

HINWEIS: Dieses Buch bietet Ihnen nicht nur eine fundierte Einführung in die Programmierungvon Datenbanken mit Access 2016, sondern ist gleichermaßen auch für die Versionen2010 und 2013 geeignet.

Die Autoren haben bei der Zusammenstellung des Inhalts weniger aus den zu Access 2016 mitge-lieferten Dokumentationen, sondern vor allem aus eigenen Quellen und langjährigen praktischenErfahrungen geschöpft:

■ Lehrgänge für Datenbankprogrammierer

■ Vorlesungen über Datenbankprogrammierung an Fachhochschulen

■ und (last, but not least) das zahlreiche Feedback unserer Leser zu unseren Vorgängertiteln

Mit VBA (Visual Basic for Applications) stoßen Sie das Tor zur Windows-Programmierung weitauf und greifen direkt auf die mächtige Access-Bibliothek, die DAO-/ADO-Datenzugriffsobjekteoder auf das Windows-API (Application Programming Interface) zu. Verständlicherweise ist es imRahmen dieses Buches unmöglich, auf alle Funktionen sowie auf alle Objekte und Sprachelementeder einzelnen Bibliotheken einzugehen. Dies ist Sache der Befehlsreferenz, auf die Sie am bequem-sten über die integrierte Online-Hilfedatei zugreifen können. Ziel des Buches soll es sein, einenGesamtüberblick zu geben und praktische Konzepte zu vermitteln.

Page 25: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

28 Vorwort

In den insgesamt 18 Kapiteln finden Sie:

■ Ausführliches Know-how über die objekt- und ereignisorientierte Gestaltung der Benutzer-schnittstelle von Microsoft Access

■ Eine gestraffte Einführung in die Programmierung von Makros

■ Eine umfassende Einführung in VBA, SQL und XML mit einer übersichtlichen und auf dasWesentliche reduzierten Sprachbeschreibung

■ Eine gestraffte Einführung in den Datenbankzugriff (Jet, Microsoft SQL Server, Azure SQL)unter Verwendung von DAO/ADO

■ Viele Kapitel verfügen über einen Übersichtsteil, in dem wichtige Informationen (z.B. rele-vante Eigenschaften, Methoden und Ereignisse von zentralen Objekten) griffbereit zur Ver-fügung stehen

■ Zahlreiche Praxisbeispiele am Ende der Kapitel dienen der Vertiefung der vermittelten theore-tischen Grundlagen.

BegleitdateienDen Quellcode dieses Buchs können Sie sich unter folgender Adresse herunterladen:

LINK: www.doko-buch.de

Für Einsteiger einige Hinweise, die wir aufgrund von Erfahrungen mit unseren Vorgängertitelndiesmal nicht vergessen wollen:

■ Sie sollten natürlich vorher Microsoft Access 2016/2013/2010 auf Ihrem PC installiert haben.

■ Sollte doch einmal eine Datenbank/Datei beim Testen der Beispiele nicht gefunden werden,müssen Sie im betreffenden Modul die Pfadangaben anpassen.

■ Falls einmal ein Beispiel nicht funktionieren sollte, lesen Sie die beigefügte Readme-Datei.

■ Zumindest für das Kapitel 10 ist die Installation des Microsoft SQL Server ab Version 2008bzw. der entsprechenden Express Version erforderlich. Beachten Sie die erforderlichen Sicher-heitseinstellungen für den Zugriff.

SicherheitseinstellungenIm Zeitalter wachsender Internetkriminalität müssen Sie sich daran gewöhnen, dass zum SchutzIhres Computers reichlich Sicherheitshürden aufgebaut wurden: Access-Sicherheit (VBA), System-sicherheit (Windows 7/8/10), SQL Server-Sicherheit, .NET-Sicherheit.

Das führt für Sie als VBA-Programmierer zunächst zu folgender Konsequenz:

HINWEIS: Aufgrund der restriktiven Sicherheitsanforderungen von Access 2016 wird es Ihnenin der Regel nicht gelingen, ohne entsprechende Anpassungen der Entwicklungs-umgebung, ihren eigenen Code bzw. die zu diesem Buch mitgelieferten Beispielezum Laufen zu bringen!

Page 26: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Vorwort 29

Auch unter Access 2016 wird VBA-Code standardmäßig als "unsicherer Code" eingestuft. Fallsdas Formular den Code nicht ausführt und stattdessen unterhalb des Menübands eine Sicherheits-warnung zeigt, klicken Sie auf die Inhalt aktivieren-Schaltfläche.

Um diese lästigen Sicherheitswarnungen generell zu verhindern, sollten Sie (zumindest für dieDauer der Programmentwicklung) im Sicherheitscenter Ihr Datenbankverzeichnis als Vertrauens-würdigen Speicherort hinzufügen.

HINWEIS: Eine detaillierte Anleitung, wie Sie mit diesem "heißen Eisen" am besten umgehen,finden Sie im Abschnitt "Sicherheitseinstellungen" des Kapitels 1 (Seite 43).

Ein gutgemeinter Ratschlag an EinsteigerProgrammieren lernt man nur durch Beispiele! Dies ist eine knallharte Wahrheit, um die sich einezu stark akademisch geprägte Leserschaft gern herummogeln möchte. Wie alle unsere anderen Pro-grammier-Bücher ist deshalb auch dieses Buch kein Lehrbuch, das Sie nach dem Motto "Jetztlernen wir Microsoft Access" linear von vorn nach hinten durcharbeiten sollen. Sehr schnell wirdIhnen dabei unterwegs die Luft ausgehen und Sie verlieren die Lust. Falls Sie es dennoch bis zumEnde schaffen, sind Sie dennoch nicht in der Lage, eine praxistaugliche Datenbankapplikation zuerstellen.

Wir empfehlen hingegen dem Einsteiger, sich zunächst nur auf einige ausgewählte Kapitel zukonzentrieren und parallel zum Studium des Buchs und tatkräftiger Einbeziehung der Online-Hilfeein privates Datenbankprojekt in Angriff zu nehmen, wie zum Beispiel die Verwaltung der eigenenBücher- oder CD-Sammlung. Der Lerneffekt, der aus selbst begangenen und selbst behobenenFehlern resultiert, ist ein ungeheurer!

Motiviert durch kleine Erfolgserlebnisse und Aha-Effekte werden Sie Ihr Projekt und damit IhrWissen schrittweise vergrößern und verfeinern und sich nach dem Prinzip "soviel wie nötig" nurauf die Kapitel konzentrieren, die Sie zur Lösung Ihrer aktuellen Probleme wirklich benötigen.

Nobody is perfectSie werden – trotz der 1200 Seiten – in diesem Buch nicht alles finden, was Access zu bieten hat.Manches ist sicher in einem anderen Spezialtitel noch besser oder ausführlicher beschrieben. AberSie halten mit unserem Buch einen optimalen und überschaubaren Breitband-Mix in den Händen,der sowohl vertikal vom Einsteiger bis zum Profi als auch horizontal von den einfachen Sprachele-menten bis hin zu komplexen Anwendungen jedem etwas bietet, ohne dabei den Blick auf dasWesentliche zu verlieren.

Wir hoffen, dass wir Ihnen mit diesem Buch einen nützlichen Begleiter bei der Access-Programmierung zur Seite gestellt haben, der es verdient, seinen Platz nicht im Regal, sonderngriffbereit neben dem Computer einzunehmen.

Walter Doberenz und Thomas Gewinnus Wintersdorf/Frankfurt/O., im April 2016

Page 27: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

5 Berichte

Berichte

Der Bericht (Report) ist neben dem Formular (Form) die wichtigste visuelle Benutzerschnittstelleunter Access. Bei den zur Verfügung stehenden Eigenschaften, Ereignissen und Methoden gibt esviele Gemeinsamkeiten mit dem Form-Objekt (siehe Kapitel 4).

Bereits mit Access 2007 wurden die Berichte um eine Reihe neuer Möglichkeiten bei der Interak-tion mit dem Anwender (Maus, Tastatur) erweitert. Möglich wurde dies durch zwei neue Ansichten(Berichtsansicht, Layoutansicht), deren Funktionalität in Access 2010 etwas ergänzt wurde.

Außerdem verfügt das Report-Objekt (im Gegensatz zum Formular) über ein recht umfangreichesArsenal an Grafikeigenschaften und -methoden, die dem Programmierer eine Vielzahl vonoptischen Gestaltungsmöglichkeiten bieten.

5.1 AllgemeinesBevor wir uns den Eigenschaften, Methoden und Ereignissen des Report-Objekts zuwenden,wollen wir uns zunächst allgemeineren Fragen widmen, die mit dem Öffnen eines Berichts zusam-menhängen.

5.1.1 ReportansichtenÖffnen Sie einen Bericht durch Doppelklick auf seinen Namen im Navigationsbereich, so wirdstandardmäßig die Berichtsansicht angezeigt (diese Einstellung kann mittels DefaultView-Eigen-schaft geändert werden).

■ In der Berichtsansicht können Sie z.B. Filter anwenden, Daten kopieren oder auf Steuerele-mente oder Hyperlinks klicken

■ In der Layoutansicht können Sie das Ergebnis am Format und an weiteren Einstellungen sofortim Kontext mit den Daten betrachten, Sie können z.B. Spalten verschieben, ihre Größe verän-dern oder neue Felder aus der Feldliste hinzufügen

■ Um einen Bericht von Grund auf neu zu erstellen verwenden Sie die Entwurfsansicht

Kapitel 5

Page 28: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

262 Kapitel 5: Berichte

■ Mit Hilfe der Seitenansicht können Sie vor dem Drucken überprüfen, wie das Ergebnis auf demPapier aussehen wird

5.1.2 Die OpenReport-MethodeZum Öffnen eines Reports verwendet man die OpenReport-Methode des DoCmd-Objekts (ver-gleichbar mit der OpenForm-Methode für Formulare).

Die Syntax zeigt, dass außer dem Berichtsnamen alle weiteren Argumente optional sind:

DoCmd.OpenReport(ReportName, [View], [FilterName], [WhereCondition], [WindowMode], [OpenArgs])

■ ReportNameDer Name des Berichts.

■ ViewEine AcView-Konstante, die die Ansicht bestimmt, in welcher der Report geöffnet wird .

■ FilterNameNamen einer gültigen Abfrage in der aktuellen Datenbank.

■ WhereConditionEine gültige SQL-WHERE-Bedingung (ohne WHERE).

■ WindowModeEine AcWindowMode-Konstante, welche den Modus angibt, in welcher das Formular geöffnetwird (acWindowNormal, acHidden, acIcon, acDialog).

■ OpenArgsBestimmt die OpenArgs-Eigenschaft, mit welcher Parameter an den Report übergeben werdenkönnen.

Die AcView-Konstanten:

Konstante Wert ErklärungacViewNormal 0 Druckansicht (Standard)acViewDesign 1 EntwurfsansichtacViewPreview 2 Seitenansicht (Berichtsvorschau)acViewPivotTable 3 PivotTable-AnsichtacViewPivotChart 4 PivotChart-AnsichtacViewReport 5 BerichtsansichtacViewLayout 6 Layoutansicht

BEISPIEL: Der Bericht Mitarbeiter wird geöffnet, alle Mitarbeiter mit dem Namen "Müller"werden angezeigt.

DoCmd.OpenReport "Mitarbeiter", , , "Nachname = 'Müller'"

Page 29: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

263

5.1.3 ParameterübergabeDas OpenArgs-Argument der OpenReport-Methode kann für die Übergabe zusätzlicherInformationen an den Bericht genutzt werden.

BEISPIEL: Zusätzlich zur WHERE-Bedingung wird ein Datum, welches in einem Textfeldsteht, per OpenArgs an einen Bericht übergeben.

Dim whereCond As StringwhereCond = "Anzahl > 100 AND Auslaufartikel = True" ' WHERE-Bedingung definierenDoCmd.OpenReport "Bericht1", acViewPreview, , whereCond, , Text1.Value ' OpenArgs = Text1.Value

Anzeige des Datums im Bericht:

Private Sub Report_Open(Cancel As Integer) Bezeichnungsfeld0.Caption = "Geräteliste vom " & Me.OpenArgs Me.FilterOn = TrueEnd Sub

HINWEIS: Eine komplette Anwendung, die die verschiedenen Ansichten eines Reports demons-triert, finden Sie im Praxisbeispiel "Aufruf eines Berichts mit Datenfilter" (Seite295).

5.2 Wichtige BerichtseigenschaftenBei der folgenden knappen Zusammenstellung der Eigenschaften, Ereignisse und Methoden wer-den nur diejenigen näher erläutert, die neu gegenüber dem Form-Objekt (siehe Kapitel 4) sind bzw.die sich in ihrer Funktion wesentlich unterscheiden.

5.2.1 FormateigenschaftenDiese Eigenschaften bestimmen das "Outfit" eines Berichts und entsprechen größtenteils denen desForm-Objekts.

Eigenschaft Deutscher Bezeichner

Standard Erläuterung

AllowLayoutView Layoutansicht zulassen

True erlaubt/verbietet Öffnen in Layoutansicht

AllowReportView Berichtsansicht zulassen

True erlaubt/verbietet Öffnen in Berichtsansicht

Caption Beschriftung Bericht Text in TitelleisteDefaultView Standardansicht 0 0=Seitenansicht, 1=BerichtsansichtPageHeader,PageFooter

Seitenkopf,Seitenfuß

0 Der Seitenkopf/-fuß wird auf allen Seiten eines Berichts gedruckt (1=außer Berichtskopf, 2=außer Berichtsfuß, außer Berichtskopf/-fuß).

5.2 Wichtige Berichtseigenschaften

Page 30: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

264 Kapitel 5: Berichte

Eigenschaft Deutscher Bezeichner

Standard Erläuterung

GrpKeepTogether Gruppe zu-sammenhalten

1 Gruppen werden pro Spalte zusammengehalten (0=pro Seite)

GridX, GridY Raster X, Raster Y 10 Horizontale bzw. vertikale Einheiten des Gitter-netzes (Entwurfsansicht)

Height Höhe Gesamthöhe aller Bereiche LayoutForPrint Drucklayout False Verwenden von Druckerschriftarten (True) oder

Bildschirmschriftarten (False)Width Breite Breite des DetailbereichsPicture Bild (keines) Pfad/Dateinamen der anzuzeigenden BitmapPictureAlignment Bildausrichtung Ort, wo die Hintergrundbitmap erscheinen soll

(siehe Form-Objekt)PictureSizeMode Bildgrößenmodus Darstellung des Hintergrundbildes (siehe Form-

Objekt)PictureTiling Bild nebeneinander Bilder nebeneinander anordnenPictureType Bildtyp 0 Bild wird als eingebettetes (0) oder verknüpftes (1)

Objekt gespeichertPicturePages Bildseiten 0 Seite(n), auf welcher ein Bild angezeigt werden

soll (alle=0, erste=1, 2=keine)

5.2.2 DateneigenschaftenDateneigenschaften bilden eine Untermenge der entsprechenden Eigenschaften des Form-Objekts.

Eigenschaft Deutscher Bezeichner

Standard Erläuterung

RecordLocks Datensätze sperren 0 siehe Form-ObjektRecordSource Datenherkunft siehe Form-ObjektFilter Filter siehe Form-ObjektFilterOn Filter aktiv False siehe Form-ObjektFilterOnLoad Beim Laden filtern False siehe Form-ObjektOrderBy Sortiert nach siehe Form-ObjektOrderByOn Sortierung aktiv True siehe Form-ObjektOrderOnLoad Beim Laden

sortierenTrue siehe Form-Objekt

5.2.3 GrafikeigenschaftenEigenschaften (Properties) dieser Kategorie stehen im Zusammenhang mit der Ausführung vonGrafikmethoden. Für das den Grafikoperationen zugrunde liegende Koordinatensystem sindfolgende Eigenschaften maßgebend:

Page 31: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

265

Eigenschaft Standard-wert

Erläuterung

ScaleMode 1 Maßeinheit für Koordinatenangaben (Twips)ScaleWidth, ScaleHeight

Anzahl der Einheiten für horizontale oder vertikale Innenab-messungen der Seite

ScaleLeft, ScaleTop 0, 0 Koordinaten für linke obere Ecke einer SeiteCurrentX, CurrentY 0, 0 Festlegung der aktuellen Koordinaten für Grafikmethoden

ScaleModeDurch Ändern der ScaleMode-Eigenschaft können Sie sich für eine andere Maßeinheit als diestandardmäßig angebotenen Twips entscheiden:

Wert Bezeichnung Erläuterung0 User Nutzerdefiniert, siehe ScaleWidth, ScaleHeight1 Twips Standardeinstellung: 1.440 Twips = 1 Inch (Zoll) 2 Point 1 Point = 0,353 mm; 72 Point = 1 Inch 3 Pixel Entspricht Bildschirmauflösung4 Character 1 Zeichenhöhe = 1/6 Inch; 1 Zeichenbreite = 1/12 Inch 5 Inch 1 Inch (Zoll) = 2,54 cm6 Millimeter 1 mm = 56,7 Twips7 Zentimeter 1 cm = 567 Twips

ScaleLeft und ScaleTop, ScaleWidth und ScaleHeightMit Hilfe dieser Eigenschaften lässt sich auf der Berichts-Oberfläche ein vollständiges Koordi-natensystem mit positiven und negativen Koordinaten einrichten. Standardmäßig verläuft die y-Koordinate von oben nach unten. Durch geeignete Skalierung können Sie aber auch die gewohnte,von unten nach oben verlaufende y-Achse einstellen.

BEISPIEL: Die Anweisungen:

ScaleWidth = 140ScaleHeight = 130ScaleLeft = – 10ScaleTop = – 120

definieren das in der folgenden Abbildung gezeigte Koordinatensystem.

1

120

-10

0

5.2 Wichtige Berichtseigenschaften

Page 32: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

266 Kapitel 5: Berichte

Left, Top, Width und HeightDie folgende Abbildung zeigt die Verhältnisse für das Page-Ereignis.

Hier entsprechen Left und Top dem linken und dem oberen Randabstand, wie er im Dialogfeld zumMenübefehl Seite einrichten/Seitenlayout/Seite einrichten festgelegt ist. Width und Height beziehensich auf die Gesamtabmessungen des vom Berichts- und Seitenkopf, Detailbereich und Seiten- undBerichtsfuß definierten Gebietes, wie es beim Entwurf aufgezoomt werden kann.

Gesamtbreite = 21cm (A4)

Ges

amth

öhe

= 29

,7cm

(A4)

Detailbereich

Seitenfuß

Berichtsfuß

Berichtskopf

Seitenkopf

Top = 2,5 cm(Oben)

Scal

eHei

ght

Left= 2,5 cm(Links)

5cm (Rechts)

5 cm (Unten)

ScaleWidth

Width

ScaleLeftScaleTop

Heig

ht

verfügbarer Innenbereich der A4-Seite

Gesamtabmessungen der A4-Seite

Page 33: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

267

HINWEIS: Verwechseln Sie ScaleLeft, ScaleTop, ScaleHeight und ScaleWidth nicht mit denEigenschaften Left, Top, Height und Width!

Die Scale-Eigenschaften beziehen sich ausschließlich auf das innere Koordinatensystem des druck-baren Innenbereichs der Berichtsseite und auf die mit ScaleMode festgelegte Maßeinheit. Hingegenist die Bedeutung von Left, Top, Width und Height davon abhängig, ob sie im Page-Ereignis desReport-Objekts oder im Print- bzw. Format-Ereignis eines seiner Bereiche (Detailbereich, Seiten-kopf/-fuß, Berichtskopf/-fuß) stehen.

HINWEIS: Left, Top, Width und Height werden immer in Twips interpretiert, sind also unab-hängig von der ScaleMode-Einstellung!

BEISPIEL: Der folgende Event-Handler liefert die kommentierten Ergebnisse, wenn die Seiten-ränder des Berichts durchgängig auf 2,5 cm eingestellt wurden (A4-Format) und Kopf-, Fuß- undDetailbereich die beim Entwurf festgelegten Abmessungen haben.

Private Sub Report_Page() ScaleMode = 7 ' Zentimeter Print Left / 567 ' linker Rand = 2,5 cm Print Top / 567 ' oberer Rand = 2,5 cm Print Height / 567 ' Gesamthöhe Kopf-/Fuß-/Detailbereich = 2 cm Print Width / 567 ' Breite Detailbereich = 10 cm Print ScaleLeft ' X-Verschiebung des Koordinatensystems = 0 Print ScaleTop ' Y- " " " = 0 Print ScaleHeight ' Höhe des druckbaren Bereichs = 24,7 cm Print ScaleWidth ' Breite des druckbaren Bereichs = 16 cmEnd Sub

Sie können die Korrektheit überprüfen, indem Sie zum Beispiel zu ScaleWidth die linke und dierechte Randbreite addieren. Als Ergebnis erhalten Sie im vorliegenden Fall 21 cm (DIN A4-Breite).

HINWEIS: Wenn Sie nicht innerhalb des Report_Page-, sondern innerhalb des Format- bzw.Print-Events zeichnen wollen, bezieht sich Height immer nur auf die Höhe des ent-sprechenden Bereichs (Detailbereich, Berichtskopf etc.), und der Koordinaten-ursprung (0,0) liegt in der linken oberen Ecke des Bereichs.

Bemerkungen■ Statt der Eigenschaften ScaleHeight, ScaleWidth, ScaleLeft und ScaleTop könnten Sie auch die

Scale-Methode verwenden. Allerdings eignet sich diese nur zum Zuweisen, nicht aber zumLesen der Abmessungen eines Koordinatensystems.

■ Wenn Sie für ScaleMode einen Wert größer als 0 einstellen, werden die Eigenschaften Scale-Height und ScaleWidth in die neue Maßeinheit geändert. Für ScaleLeft und ScaleTop wird auto-matisch der Wert 0 eingestellt. Darüber hinaus ändern sich auch die Einstellungen der Eigen-schaften CurrentX und CurrentY.

5.2 Wichtige Berichtseigenschaften

Page 34: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

268 Kapitel 5: Berichte

CurrentX und CurrentYMit diesen Eigenschaften stellen Sie die aktuelle Druckposition für Grafikmethoden ein, wie es dasfolgende Beispiel zeigt.

BEISPIEL: Etwa in die Mitte der untersten Zeile eines A4-Blattes wird der Text "Hallo" ausge-druckt.

Private Sub Report_Page() Me.ScaleMode = 7 ' Zentimeter CurrentX = 8 CurrentY = 24 Print "Hallo"End Sub

HINWEIS: Beachten Sie, dass sich die aktuelle Druckposition (CurrentX/CurrentY) nachAbschluss einer Grafikoperation ebenfalls verschoben hat.

5.2.4 Linien- und StifteigenschaftenDamit legen Sie die Art der Linien fest, mit denen die Grafikmethoden Line, Circle oder PSetzeichnen.

Eigenschaft Bezeichnung Standard ErläuterungDrawWidth Linienbreite 1 Stärke der gezogenen LinienDrawStyle Linientyp 0 Nur für DrawWidth = 1DrawMode Zeichnungsmodus 13 Art der Verknüpfung mit dem Hintergrund

(CopyPen)

DrawWidth und DrawStyleDrawWidth gibt die Breite einer Linie in Pixel an. Die Voreinstellung ist 1, was einer Breite von 1Pixel entspricht. Ist der Wert größer als 1, erzeugen die Einstellungen 1 bis 4 für DrawStyle einedurchgezogene Linie. Wenn Sie für die DrawWidth den Wert 1 wählen, können Sie durch Zu-weisen von DrawStyle die in der folgenden Übersicht enthaltenen Linienarten für die MethodenLine und Circle erhalten:

Page 35: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

269

DrawModeMit dieser Eigenschaft (1...16) können Sie festlegen, ob und wie sich die für Grafikmethoden ver-wendete Farbe mit der Hintergrundfarbe des Berichts zur resultierenden Linienfarbe kombiniert.Standardmäßig ist der Wert 13 eingestellt (CopyPen), d.h., die Stiftfarbe entspricht der ForeColor-Property. Eine Beschreibung der übrigen Einstellungen finden Sie im Übersichtsteil dieses Kapitels(Seite 294).

5.2.5 SchrifteigenschaftenDiese Eigenschaften beziehen sich auf die Print-Methode.

Eigenschaft Bezeichnung Standardwert ErläuterungFontBold Fettschrift False Nicht fettFontItalic Kursivschrift False Nicht kursivFontName Schriftart Abhängig von SystemschriftartenFontSize Schriftgröße 8 1 Punkt = 0,0353cm (1/72 Zoll)FontStrikeThru Durchgestrichen False Nicht durchgestrichenFontUnderline Unterstrichen False Nicht unterstrichen

5.2.6 Farb- und MustereigenschaftenFür die Ausgabe von Farben und Mustern sind folgende Eigenschaften von Bedeutung:

Eigenschaft Bezeichnung Standard BemerkungForeColor Textfarbe Schwarz Auch Linien- bzw. Rahmenfarbe für Rechtecke

und KreiseFillColor Füllfarbe Schwarz Füllfarbe für Rechtecke und KreiseFillStyle Füllmuster Transparent Füllmuster für Rechtecke und KreiseBackColor Hintergrundfarbe Weiß &HFFFFFF

ForeColor und BackColorDie Eigenschaft ForeColor gibt die Farbe an, welche die Methoden Print, Line und Circle für dieAusgabe verwenden. Wenn Sie einen Farbwert in einer Variablen speichern wollen, brauchen Sieden Datentyp Long.

BEISPIEL: Die folgende Sequenz druckt "Hallo" in roter Schrift:

Dim rot As Longrot = vbRed Me.ForeColor = rotMe.Print "Hallo"

Die Eigenschaft BackColor können Sie auf bestimmte Bereiche des Berichts anwenden.

5.2 Wichtige Berichtseigenschaften

Page 36: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

270 Kapitel 5: Berichte

BEISPIEL: Die folgende Sequenz färbt den Detailbereich gelb.

Private Sub Report_Open(Cancel As Integer) Me.Section(0).BackColor = QBColor(14)End Sub

FillColor und FillStyle Die FillColor-Eigenschaft wird nur berücksichtigt, wenn die FillStyle-Property nicht transparent ist(also ungleich der Voreinstellung 1!). Die Farbe des Füllmusters hängt von FillColor ab.

Die möglichen Werte für FillStyle entnehmen Sie bitte der Abbildung.

QBColor- und RGB-FunktionInsgesamt 16 Grundfarben lassen sich mit der QBColor-Funktion erzeugen.

Code Farbe Code Farbe Code Farbe Code Farbe0 Schwarz 4 Rot 8 Dunkelgrau 12 Hellrot1 Blau 5 Magenta 9 Hellblau 13 Hellmagenta2 Grün 6 Ocker 10 Hellgrün 14 Hellgelb3 Zyan 7 Hellgrau 11 Hellzyan 15 Weiß

BEISPIEL: Die Hintergrundfarbe eines Bildfeldes erhält einen zufälligen Wert:

Bild1.BackColor = QBColor(Rnd * 15)

Wesentlich feinere Farbabstufungen lassen sich mit der RGB-Funktion erreichen, mit welcher Sieaus den drei Grundfarben Rot, Grün und Blau eine beliebige Farbe mischen können.

farbe = RGB (rot, grün, gelb)

Die Argumente rot, grün, blau können Integer-Werte zwischen 0 und 255 annehmen.

Page 37: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

271

Die folgende Tabelle enthält einige Standardfarben mit den zugehörigen Rot-, Grün- und Blau-Anteilen:

Farbe Rot Grün BlauSchwarz 0 0 0Blau 0 0 255Grün 0 255 0Zyan 0 255 255Rot 255 0 0Magenta 255 0 255Gelb 55 255 0Weiß 255 255 255

BEISPIEL: Verwendung von RGB:

rot = RGB(255,0,0)schwarz = RGB(0,0,0)

FarbkonstantenFür eine Vielzahl von Farben können auch die in VBA integrierten Farbkonstanten wie vbRed,vbWhite etc. Verwendung finden.

BEISPIEL: Eine rote Stiftfarbe wird eingestellt:

Me.ForeColor = vbRed

HINWEIS: Eine Zusammenstellung wichtiger Farbkonstanten finden Sie im Übersichtsteil desKapitels (Seite 294).

5.2.7 Sonstige EigenschaftenIm folgenden Sammelsurium treffen Sie hauptsächlich solche Eigenschaften an, die es in äquiva-lenter Bedeutung bereits beim Formular gibt (siehe Kapitel 4).

Eigenschaft Bezeichnung ErläuterungDateGrouping Datumsgruppierung Datumsangaben (0 = amerikanisch,

1 = deutsch)FastLaserPrinting Schneller Laserdruck Siehe Form-ObjektHelpFile Hilfedatei Siehe Form-ObjektHelpContextID Hilfekontext Siehe Form-ObjektSection(n) Bereich Siehe Erläuterung untenTag Marke Siehe Form-Objekt

5.2 Wichtige Berichtseigenschaften

Page 38: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

272 Kapitel 5: Berichte

SectionIn Analogie zum Form-Objekt werden die einzelnen Bereiche eines Berichts durch die Section-Eigenschaft (schreibgeschützt) des Report-Objekts dargestellt.

Section kann auch als Objekt (quasi als Control) betrachtet werden. Dies ist kein Widerspruch,denn Eigenschaften können bekanntlich wiederum Objekte sein.

Der Index der Section-Eigenschaft ist ein lnteger-Wert, der einen bestimmten Bereich bezeichnet:

Index Konstante Beschreibung0 acDetail Detailbereich1 acHeader Berichtskopfbereich2 acFooter Berichtsfußbereich3 acPageHeader Seitenkopfbereich4 acPageFooter Seitenfußbereich5 acGroupLevel1Header Gruppenebene 1 Kopfbereich6 acGroupLevel1Footer Gruppenebene 1 Fußbereich7 acGroupLevel2Header Gruppenebene 2 Kopfbereich8 acGroupLevel2Footer Gruppenebene 2 Fußbereich

Section hat wiederum zahlreiche Eigenschaften (BackColor, AlternateBackColor, Visible, Display-When etc.), die man sich am besten anhand von Beispielen verdeutlicht:

BEISPIEL: Der Fußbereich eines Berichts (oder Formulars) wird ausgeblendet:

Me.Section(acFooter).Visible = False

BEISPIEL: Die Anweisung:

Me.Section(acDetail).AlternateBackColor = vbYellow

stellt alternierende Zeilenfarbe für den Detailbereich des Berichts (oder Formulars) ein.

HINWEIS: Auch für Steuerelemente können Sie die Section-Eigenschaft verwenden, um zuermitteln, in welchem Bereich eines Formulars oder Berichts sich das Steuerelementbefindet.

BEISPIEL: Die Variable i wird auf den Wert 2 gesetzt, falls sich das Textfeld Text30 imBerichtsfußbereich (oder Formularfußbereich) befindet.

Dim i As Integeri = Me!Text30.Section

Page 39: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

273

5.3 BerichtsereignisseObwohl das eigentliche Medium eines Berichts das Papier und nicht der Bildschirm ist, gibt esbezüglich der Anzahl der Ereignisse (Events) kaum noch Unterschiede zwischen einem Report undeinem Formular1.

5.3.1 Allgemeine EreignisseDie folgende Tabelle zeigt wichtige Report-Ereignisse:

Ereignisroutine (Event-Handler) Ereigniseigenschaft (deutsch)Open(Cancel As Integer) Beim ÖffnenClose() Beim SchließenActivate() Bei AktivierungDeactivate() Bei DeaktivierungNoData(Cancel As Integer) Bei Ohne DatenPage() Bei SeiteError(DataErr As Integer, Response As Integer) Bei FehlerApplyFilter Bei angewendetem FilterFilter Bei FilterLoad Bei LadenUnload Bei EntladenGotFocus Bei FokuserhaltLostFocus Bei FokusverlustResize Bei GrößenänderungTimer Bei Zeitgeber

Detailbereich, Kopf- und Fußzeile für die Seite bzw. für einen Bericht haben andere Ereignisse:

Ereignisroutine (Event-Handler) Ereigniseigenschaft (deutsch)Retreat() Bei Rücknahme (nur Detailbereich und Berichtskopf/-

fuß)Print(Cancel As Integer, PrintCount As Integer) Beim DruckenFormat(Cancel As Integer, FormatCount As _Integer)

Beim Formatieren

Paint Beim Anzeigen

1 Das betrifft vor allem die Preview- und die Layout-Ansicht des Reports.

5.3 Berichtsereignisse

Page 40: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

274 Kapitel 5: Berichte

Open, Close, Activate, Deactivate, ErrorDiese Ereignisse sind äquivalent zu den gleichnamigen Formular-Ereignissen. Dies betrifft auchdie Reihenfolge, in der sie auftreten (siehe Kapitel 4).

Page, NoData, Print, FormatDas Page-Ereignis wird ausgelöst, nachdem Access die Seite eines Berichts zum Drucken forma-tiert hat, jedoch bevor die Seite gedruckt wird. Dieses Ereignis wird verwendet, um einen Rahmenfür die Seite zu erstellen oder um der Seite andere grafische Elemente hinzuzufügen.

Das NoData-Ereignis wird vor dem erstmaligen Auftreten des Page-Events ausgelöst. Es tritt ein,nachdem Microsoft Access einen Bericht zum Drucken formatiert hat, der keine Daten enthält(leere Datensatzgruppe), aber bevor der Bericht gedruckt wird. Man verwendet dieses Ereignis umzu verhindern, dass ein leerer Bericht gedruckt wird.

Das Print-Ereignis tritt auf, wenn Daten in einem Berichtsbereich zum Drucken formatiert werden,jedoch bevor der Bereich gedruckt wird. Bei Detailbereichen wird Print für jeden Datensatz imBereich ausgelöst, unmittelbar bevor die Daten gedruckt werden. In Gruppenköpfen/-füßen trittPrint bei jeder neuen Gruppe auf. Hier könnten Sie z.B. Seitensummen berechnen, die in die Kopf-oder Fußzeile gedruckt werden.

Das Format-Ereignis wird ausgelöst, wenn Access die Daten ermittelt, die in einen Berichtsbereichgehören, jedoch bevor der Bereich für die Vorschau oder für das Drucken formatiert wird. DasFormat-Ereignis verwenden Sie auch bei Änderungen, die das Seitenlayout betreffen, wie z.B. dasEin-/Ausblenden von Steuerelementen oder wenn Sie auf Daten aus Bereichen zugreifen müssen,die nicht gedruckt werden (z.B. wenn Sie eine fortlaufende Summe berechnen, aber nur einzelneSeiten des Berichts drucken wollen).

BEISPIEL: Das aktuelle Datum wird fett formatiert an den durch CurrentX und CurrentY fest-gelegten Koordinaten ausgegeben:

Sub ReportHeader0_Print (Cancel As Integer, PrintCount As Integer) Me.FontBold = True Me.Print Date() End Sub

BEISPIEL: In der Ereignisprozedur Detailbereich_Print wird die Farbe des Rechteck-Hinter-grundes nach jeder ausgedruckten Zeile geändert:

Dim frb As Boolean

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer) If frb Then Rechteck.BackColor = vbYellow Else Rechteck.BackColor = vbWhite End If frb = Not frbEnd Sub

Page 41: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

275

5.3.2 Tastatur- und MausereignisseDie meisten der im Folgenden aufgelisteten Ereignisse des Report-Objekts treffen nur für dieBerichtsansicht (manchmal auch Layoutansicht) zu.

Ereignisroutine (Event-Handler) Ereigniseigenschaft (deutsch)KeyDown(KeyCode As Integer, Shift As Integer) Bei Taste AbKeyPress(KeyAscii As Integer) Bei TasteKeyUp(KeyCode As Integer, Shift As Integer) Bei Taste AufMouseDown Bei Maustaste AbClick Beim KlickenDblClick Beim DoppelklickenMouseMove Bei MausbewegungMouseUp Bei Maustaste AufMouseWheel Bei Mausrad

BEISPIEL: Um das Click-Ereignis zu demonstrieren, lassen wir uns mit Assistentenhilfe einenBericht für die Artikel-Tabelle der Nordwind-Datenbank generieren und fügen in den Detailbe-reich ganz rechts eine Befehlsschaltfläche Befehl1 ein (damit diese Schaltfläche nicht mit ausge-druckt wird, setzen wir deren Anzeigen-Eigenschaft auf Nur am Bildschirm). Der Click-Event-handler unterscheidet sich nicht von dem eines Formulars:

Private Sub Befehl1_Click() DoCmd.OpenForm "Artikeldetails", acNormal, , "Artikelnr=" & [ArtikelNr], , acDialogEnd Sub

Nach Öffnen des Berichts genügt ein Klick auf eine bestimmte Schaltfläche, um das DialogfeldArtikeldetails zu öffnen.

5.3 Berichtsereignisse

Page 42: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

276 Kapitel 5: Berichte

5.4 BerichtsmethodenEin wesentlicher Unterschied zwischen Report und Formular ist, dass man auf die Oberfläche einesReports auch zeichnen kann. Der überwiegende Teil der Methoden eines Reports sind deshalbGrafikmethoden.

5.4.1 Grafikmethoden (Übersicht)Die im Folgenden erörterten Grafikmethoden werden grundsätzlich nur im Page-Ereignis desReports bzw. im Print- bzw. Format-Ereignis eines seiner Bereiche ausgeführt.

Methode ErklärungPrint Ausgabeliste Druckt TextLine [[Step](x1, y1)] – [Step](x2, y2)[, [Farbe][, B[F]]] Zeichnet Linie oder RechteckPSet [Step](x, y)[, Farbe] Setzt einen PunktCircle [Step](x, y), Radius[, [Farbe][, [Startwert][, [Endwert][, Seitenverhältnis]]]]

Zeichnet Kreis oder Kreissegment

TextHeight(Zeichenfolge)/TextWidth(Zeichenfolge) Gibt Höhe/Breite einer Textzeichenfolge zurück

Scale [(x1, y1) – (x2, y2)] Definiert Koordinatensystem

5.4.2 ScaleMit dieser Methode können Sie die umständliche Definition eines Koordinatensystems mit denEigenschaften ScaleLeft, ScaleTop, ScaleWidth und ScaleHeight vermeiden.

Syntax:

Scale [(x1, y1) – (x2, y2)]

Argumente im Einzelnen:

x1, y1 linke obere Ecke des Koordinatensystems x2, y2 rechte untere Ecke des Koordinatensystems

BEISPIEL: Die Anweisung:

Scale (-10, 120)-(130, -10)

führt zum gleichen Koordinatensystem:

ScaleWidth = 140ScaleHeight = 130ScaleLeft = – 10ScaleTop = 120

HINWEIS: Die Scale-Methode ohne Argumente setzt das Koordinatensystem auf die MaßeinheitTwips (Standard)!

Page 43: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

277

5.4.3 LineDiese Methode zieht eine gerade Linie.

Syntax:

Line [[Step1](x1, y1)] – [Step2](x2, y2)[, [Farbe][, B[F]]]

Die Argumente in der umfangreichen Parameterliste haben folgende Bedeutung:

Step1 Der Parameter gibt an, dass die Koordinaten des Anfangspunkts relativ zur aktuellenGrafikposition liegen, die durch CurrentX und CurrentY festgelegt ist.

x1, y1 Dies sind Single-Werte, welche die Koordinaten des Anfangspunktes der Linie oderder linken oberen Ecke des Rechtecks bezeichnen. Die Eigenschaften ScaleMode,ScaleLeft, ScaleTop, ScaleHeight und ScaleWidth legen die verwendete Maßeinheitfest. Werden x1,y1 nicht angegeben, so beginnt die Linie an der von CurrentX Cur-rentY definierten Position.

Step2 Gibt an, dass die Endpunktkoordinaten relativ zu x1,y1 liegen.

x2, y2 Dies sind Single-Werte für die Endpunktkoordinaten der zu zeichnenden Linie. farbe Legt die Farbe für die zu zeichnende Linie fest (Long-Wert). Wenn dieses Argument

fehlt, wird die ForeColor-Eigenschaft verwendet. Sie können für dieses Argumentauch direkt die Funktionen RGB oder QBColor einsetzen.

B Bewirkt, dass ein Rechteck gezeichnet wird. Die angegebenen Koordinaten bestim-men dabei die linke obere und die rechte untere Ecke des Rechtecks.

F Kann nur zusammen mit der Option B verwendet werden und gibt an, dass dasRechteck mit der Zeichenfarbe ausgefüllt werden soll. Bei B ohne F wird das Recht-eck mit der Farbe und dem Muster ausgefüllt, die durch die Eigenschaften FillColorund FillStyle festgelegt sind.

BEISPIEL: Der folgende Code im Print-Ereignis des Seitenkopfes erzeugt dort ein neues Koor-dinatensystem (200 breit, 100 hoch, positiv verlaufende x- und y-Achse). Der Seitenkopf wirdumrahmt und ein Dreieck in die Mitte gezeichnet.

Private Sub Seitenkopf_Print(Cancel As Integer, PrintCount As Integer) Scale (0, 100)-(200, 0) ' neues Koordinatensystem Line (0, 100)-(200, 0), , B ' umrahmendes Rechteck CurrentX = 100: CurrentY = 75 ' obere Dreieckspitze Line -Step(50, -50) ' rechte Dreieckkante Line -Step(-100, 0) ' untere Dreickkante Line -Step(50, 50) ' linke DreieckkanteEnd Sub

5.4 Berichtsmethoden

Page 44: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

278 Kapitel 5: Berichte

Scale (0, 100) - (200, 0) CurrentX = 100: CurrentY = 75

Line -Step (50, -50)

Scale (0, 100) - (200, 0)

Line -Step (-100, 0)

Line -Step (50, 50)

BEISPIEL: Die Anweisung:

Line (0, 100)-(200, 0), QBColor(12), BF

würde ein rot ausgefülltes umrahmendes Rechteck erzeugen.

5.4.4 PSetDamit setzen Sie einen einzelnen Punkt.

Syntax:

PSet [Step](x, y)[, Farbe]

Die Argumentliste entspricht im Prinzip der (verkürzten) Line-Methode.

BEISPIEL: Umständlich, aber lehrreich: Längs der horizontalen Achse eines Berichts wird mitPSet eine rote Linie gezeichnet.

Dim mitte As Single, i As Integer Me.ScaleMode = 3 ' Maßeinheit: Pixel mitte = Me.ScaleHeight / 2 ' Mittelachse For = 1 To Me.ScaleWidth Me.PSet(i, mitte), QBColor(12) Next i

Bemerkungen■ Die Größe eines Punktes hängt von der Eigenschaft DrawWidth ab. Die Art, wie er gezeichnet

wird, ist abhängig von den Eigenschaften DrawMode und DrawStyle.

■ Für das Löschen eines Pixels verwenden Sie die Farbe Weiß (&HFFFFFF).

Page 45: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

279

5.4.5 CircleDamit zeichnen Sie einen Kreis, eine Ellipse oder einen Bogen auf einem Report-Objekt.

Syntax:

Circle [Step](x, y), Radius[, [Farbe][, [Startwert][, [Endwert][, Seitenverhältnis]]]]

Die Bedeutung der Argumente im Einzelnen:

Step Gibt an, dass der Mittelpunkt relativ zu den aktuellen Koordinaten liegt

x, y Definiert die Koordinaten des Mittelpunktes (Single-Werte) radius Radius (Single-Wert)farbe Parameter, der die Farbe der Kreislinie angibt (Long-Wert). Fehlt dieses Argu-

ment, so wird ForeColor genommen.startwert, endwert

Für einen Kreis- oder Ellipsenbogen geben Start- und Endwert die Anfangs- unddie Endposition des Bogens an (in Radiant). Standardmäßiger Startwert ist 0Radiant, standardmäßiger Endwert ist 2 Pi Radiant (Vollkreis).

seitenverhältnis Das Seitenverhältnis der Ellipse, Standardwert ist 1.0 ( Kreis).

Bemerkungen■ Um den Start- bzw. Endwert in Grad angeben zu können, muss jeweils mit Pi/180 multipliziert

werden.

Const Pi = 3.1416Dim rad As Single, grad As Single...rad = grad * Pi / 180

■ Die Winkelangaben zählen immer entgegen der Uhrzeigerrichtung.

Startwinkel positiv /Endwinkel positiv

Startwinkel positiv /Endwinkel negativ

■ Sind Start- bzw. Endwert negativ, so wird der jeweilige Radius mit eingezeichnet (Tortenstück).

■ Nach Beendigung der Circle-Methode sind CurrentX und CurrentY auf die Mittelpunktskoordi-naten eingestellt.

■ Linienart und -breite, Füllfarbe und Füllmuster sind abhängig von den Eigenschaften Draw-Mode, DrawStyle, DrawWidth, FillColor und FillStyle.

5.4 Berichtsmethoden

Page 46: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

280 Kapitel 5: Berichte

BEISPIEL: Ein Tortendiagramm soll genau in der Mitte einer Berichtsseite erzeugt werden.

Im ersten Schritt zeichnen wir einen (leeren) Vollkreis:

Const Pi = 3.14159Dim mitteX As Single, mitteY As Single, radius As SinglemitteX = Me.ScaleWidth / 2mitteY = Me.ScaleHeight / 2radius = Me.ScaleHeight / 4Me.Circle (mitteX, mitteY), radius

Im nächsten Schritt wird die gelb gefüllte "Dreivierteltorte" erzeugt. Dazu müssen Start- undEndwinkel negative Vorzeichen haben.

Dim start As Single, ende As Singlestart = -0.00000001ende = -3 * Pi / 2 ' 270 GradMe.FillColor = QBColor(14) ' gelbMe.FillStyle = 0 ' solide FüllungMe.Circle (mitteX, mitteY), radius, , start, ende

Wenn wir diesen Code in das Page-Event des Reports einbauen, erscheint das Kreisdiagrammsehr groß (Durchmesser entspricht der Hälfte der Seitenhöhe, ohne Ränder). Wir können den glei-chen Code aber auch in das Print-Event des Detailbereichs einsetzen. Dann beziehen sich dieScale-Eigenschaften auf die von uns eingestellte Höhe und Breite des Detailbereichs, das Kreis-diagramm wird erheblich kleiner ausfallen.

5.4.6 PrintAuch die Textausgabe zählt unter Windows mit zu den Grafikmethoden! Die Print-Methode gibteine Zeichenkette (String) oder auch nur den Wert von Variablen bzw. Funktionen auf einemReport-Objekt (oder im Direkt-Fenster) aus. Dabei werden die aktuelle Farbe (ForeColor) undSchriftart (Font-Eigenschaften) verwendet.

Page 47: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

281

Syntax:

Print {Spc(n) | Tab(n)} ausdruck zeichPos

Die Argumente:

Spc(n) Wird optional verwendet, um n Leerzeichen auszugeben.Tab(n) Wird optional verwendet, um die Druckposition zur n-ten Spaltennummer zu

bewegen. Tab ohne Argumente verschiebt die Druckposition zum Anfang desnächsten Ausgabebereichs.

ausdruck Wird optional ausgedruckt (numerischer Ausdruck oder String)zeichPos Legt die Druckposition für das nächste Zeichen fest. Mehrere Ausdrücke können

miteinem Semikolon bzw. einem Leerzeichen getrennt werden.

BEISPIEL: Die folgenden zwei Programmzeilen liefern ähnliche (aber nicht identische) Ergeb-nisse.

Print "Hallo"; Tab(50); "Hallo"

Print "Hallo"; Space(50); "Hallo"

5.4.7 TextWidth und TextHeightBeide Methoden geben die Breite bzw. Höhe einer Textzeichenfolge zurück.

Syntax:

TextHeight(Zeichenfolge)

bzw.

TextWidth(Zeichenfolge)

Mit TextWidth/TextHeight werden die horizontale bzw. vertikale Ausdehnung einer Textzeichen-folge in der mit Scale festgelegten Maßeinteilung ermittelt, wenn der Bericht formatiert undgedruckt wird. Das Ergebnis ist abhängig von den Schriftarteigenschaften (FontName, FontSizeetc.). Sind Wagenrücklaufzeichen enthalten, so ermittelt TextWidth die Breite der längsten Zeile(vom Zeilenanfang bis zum Wagenrücklaufzeichen). TextHeight gibt in diesem Fall die kumulierteHöhe der Zeilen zurück, inklusive des normalen Abstandes über und unter jeder Zeile.

Sie können die von den Methoden TextWidth und TextHeight zurückgegebenen Werte verwenden,um den erforderlichen Platz für mehrere Textzeilen innerhalb eines Berichts zu berechnen.

BEISPIEL: Der Event-Handler druckt die Überschrift eines Berichtes 20 Pixel unterhalb desoberen Randes zentriert aus:

Private Sub Report_Page() Dim schrift As String schrift = "Produktbericht" Me.ScaleMode = 3 ' Pixel

5.4 Berichtsmethoden

Page 48: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

282 Kapitel 5: Berichte

Me.FontSize = 24 CurrentY = 20 CurrentX = (Me.ScaleWidth – Me.TextWidth(schrift)) / 2 Me.Print schriftEnd Sub

5.4.8 Sonstige MethodenAndere Report-Methoden als die für Grafikausgaben sind sehr spärlich, erwähnenswert sindeigentlich nur Requery (Datenaktualisierung in einem Unterbericht) und SetTabOrder (Tabula-torenreihenfolge im Detailbereich).

5.5 Weitere Features des Report-ObjektsIm Folgenden wollen wir Ihnen einige speziellere Features vorstellen, wie sie im Wesentlichen erstab Access 2007 eingeführt wurden.

5.5.1 Rich-Text-Felder druckenBekanntlich kann man jetzt auch HTML-Steuerzeichen für die Formatierung von Text- bzw.Memofeldern verwenden. Setzen Sie dazu die TextFormat-Eigenschaft auf Rich-Text. Zusätzlichkann man die Vergrößerbar-Eigenschaft (CanGrow) auf True setzen.

Sollten Sie die TextFormat-Eigenschaft auf Nur-Text gestellt haben, wird Ihnen der entsprechendeHTML-Code des Datenfeldes angezeigt:

Page 49: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

283

5.5.2 Verlauf eines Memofeldes druckenHaben Sie die "Nur anfügen"-Eigenschaft eines Memofeldes aktiviert, werden alle Änderungen andiesem Feld mit Datumsstempel dokumentiert. Da dies kein reiner Selbstzweck ist, wollen Sie denVerlauf (bzw. die Historie) zusammen mit dem aktuellen Inhalt ausdrucken.

Hier hilft Ihnen die Application.ColumnHistory-Methode weiter:

ColumnHistory(Tabellenname, SpaltenName, Suchstring)

Tabellenname und Spaltenname dürften selbsterklärend sein, der Suchstring entspricht einer SQLWHERE-Klausel (ohne WHERE) bzw. dem Suchstring bei einem Find. Hier können Sie also denPrimärschlüssel zur Suche einsetzen.

Entwerfen Sie wie gewohnt den Bericht, fügen Sie ein zusätzliches Textfeld ein und legen Sie des-sen Steuerelementinhalt wie folgt fest:

=ColumnHistory([Datensatzquelle];"Bemerkung";"[ID]=" & Nz([ID];0))

Starten Sie den Bericht in der Druckvorschau und schnüffeln Sie in der "Vergangenheit" herum:

5.5.3 Eine Liste der Anlagen druckenSeit Access 2007 besteht die Möglichkeit, Bilder, Dokumente etc. als Anlage in einer Tabelle zuspeichern. Da Sie auch mehrere Anlagen pro Feld verwalten können, ist es sicher interessant, dieListe der enthaltenen Anlagen zu ermitteln.

Variante 1 (Gruppierung)Den Zugriff auf den Inhalt des Anlagefeldes erhalten Sie über ein geschachteltes Recordset (quasidie Detaildatensätze). Dieses wird auch in der Liste der verfügbaren Datenfelder angezeigt undkann für die Gestaltung des Reports genutzt werden (siehe folgende Abbildung).

Ziehen Sie einfach das Feld FileName in den Detailbereich des Berichts und Sie erhalten eine Listealler Anlagen. Allerdings wird in diesem Fall der übergeordnete Datensatz mehrfach aufgelistet.

5.5 Weitere Features des Report-Objekts

Page 50: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

284 Kapitel 5: Berichte

Um dies zu verhindern, gruppieren Sie die Daten einfach nach der ID des übergeordneten Daten-satzes bzw. eines anderen Feldes.

Der resultierende Bericht:

Page 51: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

285

Variante 2 (VBA)Wollen oder können Sie die Daten nicht gruppieren, bleibt Ihnen noch der Weg über ein zusätz-liches Recordset. Mit diesem können Sie direkt auf die einzelnen Einträge des Anlage-Feldeszugreifen, wie es das folgende kleine Beispiel beschreibt.

BEISPIEL: Auslesen der Anlage-Feld-Details

Option Explicit

Ein extra Recordset definieren:

Private rst As Recordset

Das Recordset wird mit dem Öffnen des Reports initialisiert (gleiche Daten wie der Report):

Private Sub Report_Open(Cancel As Integer) Set rst = CurrentDb().OpenRecordset("Anlagen", dbOpenTable) rst.Index = "PrimaryKey"End Sub

Mit der folgenden Funktion wird zunächst der passende Datensatz gesucht und anschließend einRecordset für die Detaildaten (Anlagefeld) erzeugt.

Private Function GetAnlagen() As String Dim rsta As Recordset Dim s As String Dim i As Integer s = "" rst.Seek "=", Id.value Set rsta = rst.Fields("MeineAnlagen").value

Mit diesem Recordset können Sie die einzelnen Anlagen abarbeiten (wir erzeugen eine Textliste):

Do While Not rsta.EOF s = s & Format(i, "00 : ") & rsta!filename & vbCrLf rsta.MoveNext i = i + 1 Loop rsta.Close Set rsta = Nothing GetAnlagen = sEnd Function

Alles was nun noch bleibt, ist das Zuweisen der obigen Funktion als Steuerelementinhalt einesTextfeldes:

=GetAnlagen()

5.5 Weitere Features des Report-Objekts

Page 52: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

286 Kapitel 5: Berichte

Die folgende Abbildung zeigt das Endergebnis:

5.5.4 Berichte nachträglich filternNachdem Sie einen Bericht entworfen haben, können Sie die getroffene Auswahl der Datensätzeändern bzw. weiter einschränken.

Variante 1 (IDE)Mit der Version 2007 wurden auch erweiterte Filteroptionen in der Layout- bzw. der Berichts-ansicht implementiert, die Sie unter anderem über die Kontextmenüs der einzelnen Datenfeldererreichen.Wählen Sie beispielsweise den Filter "Ist gleich Getränke" wird dieser sofort auf die aktuelleAnsicht angewendet. Auf diese Weise können Sie einzelnen Spalten neue Filter hinzufügen bzw.diese über den entsprechenden Menüpunkt "Filter löschen aus [Spaltenname]" auch wieder deak-tivieren.

Page 53: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

287

Variante 2 (VBA)Dass derartige Filter auch aus VBA-Sicht problemlos realisierbar sind, dürfte nach einem Blick indie Eigenschaften des Berichts schnell klar werden:

Es wird lediglich der Filter-Eigenschaft ein entsprechender Ausdruck zugewiesen, was wir auchaus dem Programm heraus realisieren können.

BEISPIEL: Filtern von Daten über eine Schaltfläche im Berichtskopf

Private Sub Befehl24_Click() Me.Filter = "([Lookup_LieferantenNr].[Firma]=""Exotic Liquids"")" Me.FilterOn = TrueEnd Sub

Bemerkungen■ Möchten Sie dieses Feature den Nutzern Ihrer Berichte vorenthalten, was bei vordefinierten

Reports durchaus sinnvoll ist, können Sie die Berichtseigenschaft "Filter zulassen" auf Falsesetzen.

■ Setzen Sie die Eigenschaft "Beim Laden filtern" auf False, andernfalls kann es schnell passie-ren, dass ein bereits vergessener Filter noch aktiv ist.

5.5.5 Berichte als PDF-Datei exportierenAccess bietet auch eine integrierte Funktionalität für den PDF-Export. Über das Menüband(Externe Daten/Exportieren/PDF oder XPS) steht Ihnen die gewünschte Funktion zur Verfügung.

5.5 Weitere Features des Report-Objekts

Page 54: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

288 Kapitel 5: Berichte

Alternativ können Sie den Export jedoch auch per Visual Basic-Code auslösen:

BEISPIEL: Export im PDF-Format

Sub ExportAlsPDF() DoCmd.OutputTo acOutputReport, "Berichte nachträglich filtern", acFormatPDF, "c:\Test.pdf", _ TrueEnd Sub

Nach dem Export wird, wenn vorhanden, der Acrobat-Reader aufgerufen:

5.5.6 Berichte als RTF-Datei exportierenGleich einen Dämpfer vorweg: Dieses Feature funktioniert nur rudimentär, viele Formatierungenwerden in der exportierten RTF-Datei nicht oder nur unvollständig wiedergegeben.

BEISPIEL: Export des Reports Artikel in das RTF-Format

Sub ExportAlsWord DoCmd.OutputTo acOutputReport, "Artikel", acFormatRTF, "c:\Test.rtf", TrueEnd Sub

Neben Objekttyp, Objektname, Format und Dateiname (optional; alternativ fragt Access nach demDateinamen) können Sie auch gleich die verknüpfte Anwendung starten lassen (in diesem FallMicrosoft Word).

5.6 Das Printer-ObjektAuch Access-Programmierer können auf das Printer-Objekt bzw. die Printers-Collection zu-greifen. Doch da gibt es einige Einschränkungen:

■ Das Printer-Objekt dient nur zur Konfiguration bzw. zur Abfrage der Drucker-Einstellungen

■ Das Printer-Objekt stellt keinen DC (Gerätekontext) zur Verfügung, damit sind alle Wege zumdirekten API-Zugriff verbaut

Page 55: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

289

■ Das Printer-Objekt verfügt über keinerlei Methoden, diese sind dem übergeordneten Objekt(Bericht) zugeordnet

Lassen Sie sich aber von diesen Einschränkungen nicht beeindrucken. Allein die Möglichkeiten zurDruckerauswahl und Konfiguration sind schon mehr als nur einen Blick wert.

5.6.1 Wo finde ich das Printer-Objekt?Auf ein Printer-Objekt können Sie über

■ das Application-Objekt,

■ die Application.Printers-Collection,

■ das Report-Objekt oder

■ das Form-Objekt

zugreifen. In allen Fällen handelt es sich zunächst um den aktuell als Standard eingerichteten Sys-temdrucker. Ändern Sie die Einstellungen des Druckers über Application.Printer, ändern sich dieDruckeinstellungen für die gesamte Anwendung. Anders bei Report.Printer und Form.Printer. Hierändern sich nur die Optionen für das gerade ausgewählte Objekt.

HINWEIS: Ist auf Ihrem System kein Drucker installiert bzw. eingerichtet, kommt es zum Lauf-zeitfehler 2205, sobald Sie auf eines der Printer-Objekte zugreifen. BerücksichtigenSie dies mit einer entsprechenden Fehlerbehandlung.

5.6.2 Die Printers-CollectionWie bereits erwähnt, stellt das Application-Objekt Ihnen eine Liste (Collection) aller verfügbarerDrucker zur Verfügung. Diese Printers-Collection können Sie zum einen zur Anzeige der jeweili-gen Druckereigenschaften nutzen, zum anderen besteht auch die Möglichkeit, einen neuen Druckerauszuwählen.

0 1 2Printers()

Printer

Einige Beispiele werden für Klarheit sorgen.

5.6 Das Printer-Objekt

Page 56: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

290 Kapitel 5: Berichte

BEISPIEL: Anzeige des aktuellen Druckers im Direktfenster

Sub Test() Debug.Print Application.Printer.DeviceNameEnd Sub

BEISPIEL: Anzeige aller installierten Drucker im Direktfenster

Sub AllPrinters() Dim prn As Printer For Each prn In Application.Printers Debug.Print prn.DeviceName NextEnd Sub

Auf die einzelnen Elemente der Printers-Collection können Sie über die folgenden Variantenzugreifen:

Printers!<Gerätename>Printers("Gerätename")Printers(Index)

HINWEIS: Beachten Sie, dass die Groß-/Kleinschreibung des Gerätenamens von Bedeutung ist.Greifen Sie über den Index auf einen Drucker zu, beginnt die Liste bei 0 (null).

5.6.3 Auswahl eines DruckersMöchten Sie einen neuen Drucker auswählen, genügt es, wenn Sie dem jeweiligen Printer-Objektein neues Element aus der Printers-Collection zuweisen.

BEISPIEL: Zuweisen eines neuen Druckers

Set Application.Printer = Application.Printers(2)

Allerdings werden Sie wohl in den seltensten Fällen von dieser simplen Methode Gebrauchmachen können. Meist ist es so, dass Sie dem Nutzer die Auswahl des Druckers überlassenwollen/müssen.

BEISPIEL: Auswahl eines Druckers über eine Dialogbox

Mit dem Laden des Formulars füllen wir ein Kombinationsfeld mit den Namen der installiertenDrucker:

Page 57: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

291

Private Sub Form_Load() Dim prn As Printer For Each prn In Application.Printers Kombinationsfeld1.AddItem prn.DeviceName Next

Der aktuell gewählte Drucker wird im Kombinationsfeld angezeigt:

Kombinationsfeld1.Value = Application.Printer.DeviceNameEnd Sub

Wählt der Nutzer einen Drucker aus, überschreiben wir das Printer-Objekt mit dem neuenObjekt. Gleichzeitig zeigen wir ein Dialogfeld mit dem neuen Namen an:

Private Sub Kombinationsfeld1_Change() Set Application.Printer = Application.Printers(Kombinationsfeld1.Value) MsgBox "Aktueller Drucker: " & Application.Printer.DeviceNameEnd Sub

Der Klick auf die Schaltfläche Drucken gibt den Bericht Bericht1 auf dem gewählten Druckeraus:

Private Sub Button1_Click() DoCmd.Close acForm, Me.Name DoCmd.OpenReport "Bericht1"End Sub

Das zugehörige Formular zeigt die folgende Abbildung:

HINWEIS: Beachten Sie, dass der Drucker vor dem Aufruf eines Berichts ausgewählt werdenmuss. Weiterhin dürfen Printer-Eigenschaften nicht aus dem Bericht heraus geändertwerden (Ereignismethoden), sondern nur über ein aufrufendes Formular bzw. eineaufrufende Prozedur.

BEISPIEL: Die folgende Anweisung ist nicht zulässig und führt zu einem Laufzeitfehler.

Private Sub Report_Open(Cancel As Integer)Set Me.Printer = Application.Printers(2) ' -> Fehler

...

5.6 Das Printer-Objekt

Page 58: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

292 Kapitel 5: Berichte

HINWEIS: Die Einstellungen über Application.Printer gehen mit dem Beenden der Access-Anwendung verloren, d.h., Sie müssen diese eventuell in der Registry sichern undbeim Neustart wiederherstellen.

5.6.4 Speichern von Berichts-OptionenIm Gegensatz zum Application.Printer-Objekt ist es bei Formularen und Berichten möglich, diegeänderten Druck-Einstellungen zu sichern. Beim erneuten Aufruf stehen die alten Optionen auto-matisch wieder zur Verfügung.

Zwei Weg bieten sich an:

■ Einstellen der Optionen über den Dialog Seite einrichten

■ Ändern der Report.Printer-Eigenschaften und Sichern des Berichts

Die zweite Variante ist mit relativ geringem Aufwand aus dem Quellcode heraus realisierbar.

BEISPIEL: Ändern der Seitenausrichtung auf "Querformat" und Auswahl des Fax-Druckers

Dim rep As Report

DoCmd.OpenReport "Report1", acViewDesign, , , acHiddenSet rep = Reports("Report1")rep.Printer = Application.Printers(2)rep.Printer.orientation = acPRORLandscapeDoCmd.Close acReport, "Report1", acSaveYes ' Sichern der Optionen

Ändern Sie mit einer der beschriebenen Methoden die Druck-Optionen, legt Access automatischeine spezielle Datenstruktur an, in der die Printer-Eigenschaften gesichert werden.

Sie können im späteren Programmverlauf über die Abfrage der UseDefaultPrinter-Eigenschaft(True/ False) testen, ob spezielle Optionen für ein Bericht/Formular vorhanden sind.

BEISPIEL: Ändern der Report-Einstellungen, wenn noch keine Optionen festgelegt wurden

Dim rep As ReportDoCmd.OpenReport "Report1", acViewDesign, , , acHiddenSet rep = Reports("Report1")If rep.UseDefaultPrinter Then rep.Printer = Application.Printers(2) ...

Damit dürften Sie die wichtigsten Möglichkeiten in Bezug auf das Printer-Objekt in Accesskennen gelernt haben. Was bleibt, ist eine Zusammenfassung der Printer-Eigenschaften.

Page 59: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

293

5.6.5 Eigenschaften des PrintersDie folgende Tabelle zeigt die wichtigsten Eigenschaften und deren Bedeutung.

Eigenschaft Beschreibung/HinweiseColorMode acPRCMMonochrome = monochrome Druckausgabe (Graustufen), acPRCMColor =

farbige DruckausgabeCopies Die Anzahl der Kopien (Lesen/Schreiben)DeviceName, DriverName,Port

... Informationen über den aktuellen DruckerBeispiel: Linotronic, winspool, LPT1

Duplex ... legt fest, ob und wie eine Seite beidseitig bedruckt wirdOrientation Ausrichtung der Seite (acPRORLandscape = Querformat, acPRORPortrait = Hoch-

format)PaperBin Bestimmt, woher das Papier für den Druck kommt:

acPRBNAuto, acPRBNCassette, acPRBNEnvelope, acPRBNEnvManual, acPRBN-FormSource, acPRBNLargeCapacity, acPRBNLargeFmt, acPRBNLower, acPRBN-Manual, acPRBNMiddle, acPRBNSmallFmt, acPRBNTractor, acPRBNUpper

PaperSize Die Papier- bzw. Seitengröße, z.B.acPRPSA3 = DIN A3, 297 x 420 mmacPRPSA4 = DIN A4, 210 x 297 mm acPRPSA4Small = DIN A4 klein, 210 x 297 mmacPRPSA5 = DIN A5, 148 x 210 mm

PrintQuality Die Druckqualität:acPRPQDraft = EntwurfsauflösungacPRPQLow = Geringe AuflösungacPRPQMedium = Mittlere AuflösungacPRPQHigh = Hohe AuflösungDer Rückgabewert ist die Auflösung in DPI (Dots Per Inch)

Neben den oben aufgeführten Eigenschaften, die Sie zum Beispiel über das Application.Printer-Objekt abrufen und setzen können, gibt es auch eine Reihe von Eigenschaften, die Report-spezi-fisch sind:

Eigenschaft BeschreibungBottomMargin Der untere Seitenrand in Twips (567 Twips = 1 cm) ColumnSpacing Spaltenabstand (Fehler in der Online-Hilfe)DataOnly Ist dieser Wert True, werden nur die eigentlichen Daten, nicht die Oberflächen-

elemente der Datenblattansicht gedrucktDefaultSize, ItemSize-Height,ItemSizeWidth

Ist dieser Wert False, werden die Werte ItemSizeHeight und ItemSizeWidth für die Bestimmung der Größe des Detailabschnitts herangezogen, andernfalls werden die Werte ignoriert

ItemsAcross Die Anzahl der Spalten pro SeiteItemLayout Legt die Druckrichtung bei mehrspaltigen Reports festLeftMargin Der linke Seitenrand in Twips

5.6 Das Printer-Objekt

Page 60: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

294 Kapitel 5: Berichte

Eigenschaft BeschreibungRightMargin Der rechte Seitenrand in TwipsRowSpacing Zeilenabstand (Fehler in der Online-Hilfe)TopMargin Der obere Seitenrand in Twips

5.7 Direkte DruckausgabeErinnern Sie sich noch an die Möglichkeiten der Druckerausgabe unter DOS? Wenn ja, dann dürf-ten Ihnen die folgenden Zeilen recht bekannt vorkommen.

Open "LPT1" For output As #1Print #1 ,"bla bla ..." ' Ausgabe TextPrint #1 , Chr(12) ' neue SeiteClose #1 ' Ausgabe schließen

Die gleiche Vorgehensweise ist auch unter Windows bzw. Access möglich, sollte jedoch weit-gehend vermieden werden. Zum einen "verschenken" Sie die Möglichkeiten, die der jeweiligeDruckertreiber bietet, zum anderen machen Sie Ihr Programm wieder hardwareabhängig. Dies ins-besondere wenn es darum geht, bestimmte Zeichensätze auszuwählen oder bestimmte Schriftattri-bute (Kursiv, Fett etc.) zu aktivieren. Zwangsläufig werden Sie sich wieder mit den bekannten (undberüchtigten) ESCAPE-Seqenzen beschäftigen müssen. Die Folge: Ihr Programm läuft mit demDrucker des Herstellers A, aber nicht mehr mit einem Drucker des Herstellers B. Warum danndieser Aufwand? Die Antwort findet sich wie so oft in den praktischen Gegebenheiten. Beispiels-weise werden noch vielfach sehr spezielle Formular-Drucker eingesetzt, für die es keine sinnvollenWindows-Treiber gibt.

5.8 Übersichten

5.8.1 DrawMode-Eigenschaft

Code Erläuterung1 Schwarzer Stift2 Inverse Einstellung 15 (NotMergePen)3 Kombination der Hintergrundfarbe mit der inversen Stiftfarbe (MaskNotPen)4 Inverse Einstellung 13 ( NotCopyPen)5 Kombination der Stift- mit der inversen Hintergrundfarbe (MaskPenNot)6 Invertieren der Hintergrundfarbe (Invert)7 XOR-Kombination der Stift- und der Hintergrundfarbe (XorPen)8 Inverse Einstellung zu 9 (NotMaskPen)9 Kombination der Stift- und der Hintergrundfarbe (MaskPen)10 Inverse Einstellung zu 7 (NotXorPen)

Page 61: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

295

Code Erläuterung11 Keine Operation (NOP)12 Kombination der Hintergrund- mit der inversen Stiftfarbe (MergeNotPen)13 Voreinstellung, die Stiftfarbe entspricht der ForeColor-Property (CopyPen)14 Kombination der Stiftfarbe und der inversen Hintergrundfarbe (MergePenNot)15 Kombination der Stiftfarbe und der Hintergrundfarbe (MergePen)16 Weißer Stift

5.8.2 Farbkonstanten

Konstante Wert BeschreibungvbBlack &H0 SchwarzvbRed &HFF RotvbGreen &HFF00 GrünvbYellow &HFFFF GelbvbBlue &HFF0000 BlauvbMagenta &HFF00FF MagentavbCyan &HFFFF00 ZyanvbWhite &HFFFFFF Weiß

5.9 Praxisbeispiele

5.9.1 Aufruf eines Berichts mit Datenfilter Report-Objekt: FilterOn-Eigenschaft, Berichts-Ansicht, Layout-Ansicht, Zeilen nummerieren;DoCmd-Objekt: OpenReport-Methode; CDate- und Format-Funktion; Select Case-Anweisung;OptionGroup-Steuerelement; Application-Objekt: TempVars-Auflistung;

In vielen Fällen erfolgt der Aufruf eines Berichts nicht direkt, sondern aus einem vorgeschaltetenFormular heraus (über Menüleiste oder Schaltfläche). Dabei werden im Allgemeinen die für dieFilterung der anzuzeigenden Datensätze notwendigen Parameter vorher interaktiv im Formularfestgelegt.

Für den Aufruf des Berichts über die OpenReport-Methode des DoCmd-Objekts gibt es verschie-dene Möglichkeiten:

■ DoCmd.OpenReport Berichtsname, Ansicht, Filtername, Bedingung

■ DoCmd.OpenReport Berichtsname, Ansicht, Filtername

■ DoCmd.OpenReport Berichtsname, Ansicht

5.9 Praxisbeispiele

Page 62: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

296 Kapitel 5: Berichte

Wir wollen uns hier auf die erste Variante beschränken. Als Beispiel stellen wir uns die Aufgabe,das Anlagevermögen der Tabelle BGA unserer Beispieldatenbank für ein bestimmtes Zeitfensteraufzulisten.

Dazu brauchen wir zwei neue Access-Objekte: Ein Formular und einen Bericht.

Oberfläche des FormularsDa es sich um ein reines Bedienformular handelt, bleibt die Eigenschaft Datensatzquelle unbesetzt.Verändern Sie aber die Eigenschaften Datensatzmarkierer und Navigationsschaltflächen in Nein.

Beide Textfelder sind ungebunden. Rechts befindet sich eine ungebundene Optionsgruppe mit fünfOptionsfeldern zur Auswahl der gewünschten Ansicht.

Quelltext für FormularZu Beginn werden standardmäßige Datumswerte eingestellt:

Private BeginnDatum As Date, EndeDatum As DatePrivate Filter1 As String

Private Sub Form_Load() ' Start BeginnDatum = Date - 365 ' vor etwa einem Jahr EndeDatum = Date ' heute Text1.Value = Format$(BeginnDatum, "d.m.yyyy") Text2.Value = Format$(EndeDatum, "d.m.yyyy") End Sub

Die Datumswerte sollen in der Report-Überschrift erscheinen und werden deshalb in der folgen-den Prozedur als globale Variablen gespeichert. Hauptaufgabe aber ist die Definition des Filters,wobei die Datumsvariablen in "englische" Strings umformatiert werden müssen (siehe SQL-Kapitel 15):

Private Sub setFilter1() ' setzt globale Variablen und Filter TempVars![Datum1] = Text1.Value TempVars![Datum2] = Text2.Value

Page 63: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

297

BeginnDatum = CDate(Text1.Value) EndeDatum = CDate(Text2.Value) Filter1 = "RDatum BETWEEN " & Format$(BeginnDatum, "\#m\/d\/yyyy\#") & _ " AND " & Format$(EndeDatum, "\#m\/d\/yyyy\#")End Sub

Der Bericht wird nun durch Übergabe entsprechender AcView-Konstanten (siehe Seite 263) mitder gewünschten Ansicht aufgerufen:

Private Sub Befehl1_Click() ' Bericht aufrufen Call setFilter1 Select Case Rahmen1.Value Case 1: DoCmd.OpenReport "Bericht1", acViewPreview, , Filter1 ' Seiten-Ansicht Case 2: DoCmd.OpenReport "Bericht1", acViewReport, , Filter1 ' Report-Ansicht Case 3: DoCmd.OpenReport "Bericht1", acViewDesign, , Filter1 ' Entwurfs-Ansicht Case 4: DoCmd.OpenReport "Bericht1", acViewLayout, , Filter1 ' Layout-Ansicht Case 5: DoCmd.OpenReport "Bericht1", acViewNormal, , Filter1 ' Drucken End SelectEnd Sub

Oberfläche des BerichtsÖffnen Sie einen neuen Bericht in der Entwurfsansicht. Ändern Sie gleich zu Beginn die Stan-dardeigenschaften des Berichts entsprechend der folgenden Abbildung:

Sind Sie mit dem Berichtsgenerator einigermaßen vertraut, dürfte es für Sie keine Hürde sein, diein der folgenden Abbildung gezeigte Oberfläche "zusammenzuschieben".

Beachten Sie folgende Besonderheiten:

■ Die Überschrift ist in einem Bezeichnungsfeld untergebracht und wird durch Setzen derCaption-Eigenschaft erst zur Laufzeit mit den Datumsangaben komplettiert.

■ Um die Datensätze in der LfdNr-Spalte durchzunummerieren, legen Sie die Eigenschaft Steuer-elementinhalt des Textfelds auf "=1" fest und die Eigenschaft Laufende Summe auf "ÜberAlles".

5.9 Praxisbeispiele

Page 64: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

298 Kapitel 5: Berichte

Quelltext des BerichtsBeim Öffnen des Berichts werden die Seitenüberschrift angepasst und das Filter eingeschaltet:

Private Sub Report_Open(Cancel As Integer) Bezeichnungsfeld0.Caption = "Geräteliste vom " & Format$(TempVars![Datum1], "d.m.yyyy") & _ " bis " & Format$(TempVars![Datum2], "d.m.yyyy") Me.FilterOn = TrueEnd Sub

TestÖffnen Sie das Formular, geben Sie ein Anfangs- und ein Enddatum ein und überzeugen Sie sichvon den Besonderheiten der verschiedenen Report-Ansichten.

Page 65: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

299

Bemerkungen■ Die Layout-Ansicht erlaubt es Ihnen, auch zur Laufzeit am Erscheinungsbild des Berichts

herumzudoktern (Steuerelemente verschieben etc.). Dazu muss die Eigenschaft AllowLayout-View ("Layoutansicht zulassen") des Reports True sein (Standard).

■ Die Übergabe von Datumsangaben etc. an den Report ist auch über den OpenArgs-Parametervon DoCmd.OpenReport möglich (siehe Seite 263), sodass auf globale Variable (wie im vor-liegenden Beispiel) verzichtet werden kann.

■ Wenn Sie wollen, können Sie im OpenReport-Ereignis auch noch bestimmte Formatierungensetzen, z.B. eine alternierende Zeilenfarbe einstellen (siehe Section-Objekt Seite 271):

Me.Section(acDetail).AlternateBackColor = vbYellow

5.9.2 Im Report gruppieren und rechnenReport-Objekt: Format-Ereignis; Funktionszuweisungen in ControlSource-Eigenschaft; Format-Funktion; Date-Typ; Gruppieren (Report);

Für das Finanzamt soll eine Übersicht über das Anlagevermögen (Tabelle BGA der Beispieldaten-bank dieses Kapitels) erstellt werden und zwar getrennt für Anschaffungen unter- und oberhalb der400-Euro-Grenze (bezogen auf den Netto-Anschaffungspreis).

Die hier vorgestellte Lösung zeigt, wie man die Fähigkeiten des Berichtsgenerators sinnvoll durchVBA-Code ergänzen kann.

OberflächeÖffnen Sie einen neuen Bericht, dessen Datensatzquelle auf BGA zu setzen ist. Aktivieren Sie überdas Kontextmenü die Ansicht Berichtskopf/-fuß.

Bestücken Sie die Oberfläche wie folgt mit Bezeichnungs- und Textfeldern (von oben nach unten,von links nach rechts):

Berichtskopf Ein Bezeichnungsfeld (Bezeichnungsfeld0)

Seitenkopf Vier Bezeichnungsfelder (Bezeichnungsfeld1 bis Bezeichnungsfeld4)

Detailbereich Vier Textfelder (Text1 bis Text4), Text2 und Text4 werden über ihre Steuer-elementinhalt-Eigenschaft direkt mit den Feldern Name und Netto verbunden.

Gruppenkopf Um, wie abgebildet, einen Gruppenbereich für das Kriterium "Netto < 400"einzufügen, wählen Sie den Befehl Gruppieren und sortieren (RegisterkarteGruppierung und Summen) und stellen im entsprechenden Dialog die Sortier-kriterien gemäß der Abbildung ein.

5.9 Praxisbeispiele

Page 66: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

300 Kapitel 5: Berichte

Innerhalb der Gruppe wird nach fallenden Nettobeträgen geordnet, bei Gleichheit wird das Rech-nungs-datum herangezogen. Die variable Zwischenüberschrift erscheint in einem später anzubin-denden Textfeld (Text5).

Gruppenfuß Ein vorerst ungebundenes Textfeld (Text6) dient der Anzeige der jeweiligen Grup-pensumme.

Seitenfuß Am unteren Rand rechts soll die Seitenziffer (und die Gesamtanzahl der Seiten) ineinem Textfeld (Text7) bereitgestellt werden. Den Steuerelementinhalt weisen wiram besten mit dem Ausdrucks-Generator zu (Gebräuchliche Ausdrücke, Seite N vonM, Schaltfläche Einfügen).

Berichtsfuß Hier soll in einem, vorerst ungebundenen, Textfeld (Text8) die Gesamtsummeerscheinen.

Page 67: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

301

Bereits in diesem Zwischenstadium können Sie den Bericht erstmalig starten. Name und Nettopreisaller Geräte müssen, in zwei Gruppen aufgeteilt, aufgelistet werden. Vergessen Sie aber nicht, dieFormat-Eigenschaft der Textfelder (Text4 bis Text9 ) auf Währung bzw. Euro umzustellen.

QuelltextPrivate nrg, nrb As Integer ' Zähler für lfd. Nr

Private Function calcShortDate(RDatum As Date) As String ' Kurzform Monat/Jahr aus Datum ermitteln calcShortDate = Format$(RDatum, "mm\/yy")End Function

Private Function num(netto As Currency) As String ' zählt BGA u. GWG getrenntIf netto >= 400 Then nrg = nrg + 1 num = Str(nrg) & "." ' BGA Else nrb = nrb + 1 num = Str(nrb) & "." ' GWG End IfEnd Function

Private Function gHeader(netto As Currency) As String ' setzt Gruppenüberschrift If netto < 400 Then gHeader = "II. Geringerwertige Gebrauchsgüter (GWG)" Else gHeader = "I. Betriebsgrundausrüstungen (BGA)" End IfEnd Function

Private Sub Gruppenkopf0_Format(Cancel As Integer, FormatCount As Integer) nrg = 0 ' Zähler bei Gruppenanfang initialisieren nrb = 0 End Sub

Private Sub Report_Open(Cancel As Integer) ' Start' Zuweisen der Steuerelementeinhalte: Text1.ControlSource = "=num([Netto])" ' lfd. Nr. innerhalb Gruppe Text3.ControlSource = "=calcShortDate([RDatum])" Text5.ControlSource = "=gHeader([Netto])" ' Zwischenüberschrift für Gruppen Text6.ControlSource = "=Sum([Netto])" Text8.ControlSource = Text6.ControlSource ' EndsummeEnd Sub

TestÖffnen Sie den Bericht und überzeugen Sie sich von seiner Funktionsfähigkeit:

5.9 Praxisbeispiele

Page 68: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

302 Kapitel 5: Berichte

Bemerkungen■ Natürlich hätten wir statt der direkten Zuweisung der ControlSource-Eigenschaft auch die

Eigenschaft Steuerelementinhalt für die noch ungebundenen Textfelder direkt in der Entwurfs-ansicht des Formulars setzen können. Allerdings sind dabei Besonderheiten in der Schreibweisezu beachten. Statt der Kommas sind Semikolons als Trennzeichen innerhalb der Liste derÜbergabeparameter zu verwenden, und für die Aggregatfunktionen sind die deutschen Bezeich-ner einzusetzen.

Page 69: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

303

BEISPIEL: Statt des VBA-Codes

Text7.ControlSource ="=Sum(calcAfA([RDatum],[Netto],[AfA]))"

können Sie auch den Steuerelementinhalt von Text7 zur Entwurfszeit mittels Ausdrucks-Editor zuweisen:

=Summe(calcAfA([RDatum];[Netto];[AfA]))

■ Die CreateGroupLevel-Methode ist leider nur zur Entwurfszeit verfügbar und damit lediglichzur Unterstützung der Entwicklung eigener Berichtsassistenten sinnvoll. Ebenfalls mitEinschränkungen verwendbar sind die gruppenspezifischen Eigenschaften SortOrder, Group-On, GroupInterval, KeepTogether etc.

5.9.3 Erstellen und Drucken eines DiagrammsDiagramm; SQL: Abfrage, SUM, INNER JOIN, GROUP BY

Schluss mit langweiligen Listen! In diesem Beispiel entwerfen wir ein Diagramm und fügen diesesals Unterbericht in unseren Report ein.

HINWEIS: Seit Access 2013 wird das Pivot-Diagramm nicht mehr unterstützt. Sie müssen mitdem Diagramm-Control oder Microsoft Excel arbeiten.

Entwurf AbfrageBevor Sie sich gleich an den Diagrammentwurf machen, sollten Sie zunächst die Daten entspre-chend aufbereiten, sodass 1:n-Beziehungen auch mit den gewünschten Detaildatensätzen darge-stellt werden können. Dazu verwenden Sie am besten eine Access-Abfrage.

Für unser Beispiel möchten wir die erzielten Umsätze der einzelnen Lieferfirmen berechnen. Dazubenötigen wir die folgenden Tabellen.

5.9 Praxisbeispiele

Page 70: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

304 Kapitel 5: Berichte

Die entsprechende SQL-Abfrage liefert uns zwei Spalten und für jede Firma die Summe derUmsätze:

SELECT Lieferanten.Firma, SUM(Bestelldetails.Einzelpreis*Bestelldetails.Anzahl) AS BestellsummeFROM Lieferanten INNER JOIN (Artikel INNER JOIN Bestelldetails ON Artikel.ArtikelNr = Bestelldetails.ArtikelNr) ON Lieferanten.LieferantenNr = Artikel.LieferantenNrGROUP BY Lieferanten.Firma;

Das Ergebnis der Abfrage zeigt die folgende Abbildung:

Speichern Sie die Abfrage unter dem Namen Umsatzabfrage ab.

Erstellen BerichtMarkieren Sie die neue Abfrage Umsatzabfrage und wählen Sie im Menüband die FunktionERSTELLEN/Berichtsentwurf. Es öffnet sich der Berichtsdesigner.Verkleinern Sie den Detailbereich des neuen Berichts und fügen Sie in den Kopfbereich ein Dia-gramm ein. Der daraufhin eingeblendete Assistent kümmert sich um die nächsten Schritte undnimmt uns zunächst etwas Arbeit ab.

Page 71: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

305

Wir benötigen beide Felder der Abfrage (Zeilen und Spalten):

Nachfolgend müssen Sie sich für einen Diagrammtyp entscheiden. Dabei sollten Sie die Anzahl derZeilen/Spalten berücksichtigen, damit diese auch sinnvoll dargestellt werden können.

5.9 Praxisbeispiele

Page 72: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

306 Kapitel 5: Berichte

Der Assistent hat bereits die richtige Zuordnung von x- und y-Achse getroffen:

Damit können wir den Assistenten beenden und das Diagramm optisch anpassen.

Mit einem Doppelklick öffnen Sie das Diagramm-Objekt und können jetzt wie in Excel an denElementen des Diagramm "herumspielen", d.h. Schriftarten und Formatierungen setzen, Elementeausblenden (Legende) etc.

Page 73: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

307

HINWEIS: Wundern Sie sich nicht, dass zur Entwurfszeit nur ein Platzhalter-Diagramm ange-zeigt wird, zur Laufzeit erscheint das gewünschte Diagramm.

Passen Sie nun noch das Seitenformat an und schon können Sie die Druckvorschau aufrufen:

5.9.4 Berichte in Formularen anzeigenUnterbericht; Formular

Sie können auch einen Bericht als Unterbericht in einem Formular anzeigen lassen und somitgleich eine Vorschau auf das spätere Druckergebnis generieren.

Bericht erstellenErstellen Sie zunächst per Assistent einen einfachen Bericht für die Tabelle Artikel (siehe Beispiel-datenbank). Speichern Sie diesen unter dem Namen Artikel ab.

Formular erstellenErzeugen Sie jetzt (ebenfalls per Assistent) ein Formular für die Tabelle Kategorien. Ziehen Sie inder Entwurfsansicht den schon erstellten Bericht Artikel per Drag & Drop in das Formular, um die-sen als Unterbericht einzufügen (siehe Laufzeitansicht). Verbinden Sie Formular und Unterberichtüber die Eigenschaften Verknüpfen nach bzw. Verknüpfen von des Unterberichts, um jeweils alleArtikel der im Formular ausgewählten Kategorie anzuzeigen.

5.9 Praxisbeispiele

Page 74: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

308 Kapitel 5: Berichte

TestNach dem Start sollten Sie, je nach gewählter Kategorie, die passenden Artikel im untergeordnetenBericht sehen:

Page 75: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index

Index

AAbbrechenDatensatzänderung, 179Abfragen, 381Abs, 116AbsolutePage, 472AbsolutePosition, 386, 417, 472ACCDR, 997Access 2003-Menü, 1096Access-Bibliothek, 1019Access-Optionen, 1035AccessControls.xlsx, 1044AccessObject, 344acCmdCopy, 1104acCmdPaste, 1104acCmdWindowHide, 984acDetail, 203, 316acFooter, 203, 316acFormatPDF, 288acFormatRTF, 288acGroupLevel1Header, 316acHeader, 203, 316acOLECreateEmbed, 1123acOLECreateLink, 1123acPageFooter, 316acPageHeader, 316acQuitPrompt, 996acSysCmdAccessDir, 1024acSysCmdAccessVer, 1024acSysCmdClearStatus, 982acSysCmdGetWorkgroupFile, 1024acSysCmdInitMeter, 983acSysCmdRemoveMeter, 983acSysCmdRuntime, 997, 1024

acSysCmdSetStatus, 982acSysCmdUpdateMeter, 983acTextFormatHTMLRichText, 224acTextFormatPlain, 224Action, 1123Activate, 208, 273Active Data Objects Extensions, 485ActiveConnection, 449, 472, 476, 489, 621ActiveControl, 232ActiveForm, 232ActiveForm.hwnd, 803ActiveReport, 232ActiveX, 233, 1119ActiveX Data Objects, 437ActiveX-Code-Komponente, 1127ActiveX-Komponente, 233AcView, 262AcWindowMode, 262adAsyncConnect, 447adAsyncExecute, 454adAsyncFetch, 455adBookmark, 456adBookmarkCurrent, 462adBookmarkFirst, 462adBookmarkLast, 462adCmdStoredProc, 450, 454adCmdTable, 450, 454adCmdTableDirect, 454adCmdText, 450, 454adCmdUnknown, 450adColFixed, 492adColNullable, 492adCommandFile, 454Add, 327, 357

Page 76: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1180 Index

ADD COLUMN, 962Add-In, 999AddFromFile, 331, 333AddFromGUID, 333AddFromString, 331AddItem, 242Addition, 102AddMenu, 70AddNew, 387, 392, 412, 428, 458, 473, 479AddSharedImage, 257adIndexNullsDisallow, 494adIndexNullsIgnore, 494adIndexNullsIgnoreAny, 494adKeyForeign, 494adKeyPrimary, 494adKeyUnique, 494adLockBatchOptimistic, 459ADO, 437ADO Query, 901ADO-Frontend, 479ADO-Stream laden, 866ADO-Version, 560ADODB, 335, 440ADODB.Error, 621ADOR, 440ADOX, 440, 485ADP-Projekt, 565adRICascade, 497adRINone, 497adRISetDefault, 497adRISetNull, 497adUseClient, 446adUseServer, 446adVarWChar, 490AdventureWorks, 583aEditAdd, 457aEditDelete, 457aEditInProgress, 457aEditNone, 457AfterBeginTransaction, 212AfterDelConfirm, 212AfterDelete, 175AfterInsert, 175, 212AfterUpdate, 175, 212, 230, 248Aggregatfunktionen, 944Aktionsabfrage, 382Alias, 1113Alignment, 237

ALL, 922AllForms, 345AllowAdditions, 206AllowBypassKey, 994AllowDeletions, 206AllowEdits, 206AllowFilters, 206AllowFormView, 199AllowLayoutView, 199, 263AllowMultipleValues, 507AllowMultiselect, 784AllowReportView, 263AllowZeroLength, 375AllTables, 347Alt, 196ALTER DATABASE, 639ALTER TABLE, 962ALTER TRIGGER, 603AlternateBackColor, 272Analysis Services, 585And, 103Anhänge, 924Anlage, 283Anlage-Feld, 66, 401, 403, 501, 924ANSI, 547, 749ANSI-Standard 92, 902Ansicht, 888, 989ANY, 922API, 1107ApiViewer, 1110Append, 467, 763appendChild, 829, 831AppendOnly, 500Application, 207, 220, 222, 335Application Programmers Interface, 1107ApplyFilter, 70, 212, 273AppTitle, 980ÄQUIVALENZ, 103Arbeitsmappen, 1144Arbeitsspeicher, 1161Arbeitsumgebung, 369ArcCos, 117ArcCoTangens, 117Archiv-Funktion, 499ArcSin, 117ArcSinHyperbolicus, 117Arithmetische Operatoren, 101Array, 91, 92, 1115

Page 77: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1181

As, 74As Any, 1115ASC, 110, 463, 546, 943ASCII, 749Assistent, 999Async, 868AtEndOfLine, 765AtEndOfStream, 765, 767Atn, 116Attachment, 66Attribute, 811, 814, 837Attributes, 380, 424, 471, 760, 793, 831, 839Auflistungen, 324, 357, 360Aufrufeliste, 138AusführenAnwendung, 71AusführenCode, 71AusführenDatenmakro, 179Auslagerungsdatei, 1161AuslösenFehler, 178Ausrufezeichen, 41Ausschneiden, 1103Auswahlabfrage, 382AUTO-JOIN, 899, 916AutoCenter, 199AutoExec, 993AutoExec-Makro, 173Autoincrement, 492AutoKeys-Makro, 171AutoResize, 200AutoSize, 237, 252AvailableSpace, 752AVG, 944Azure, 651Azure-Server, 654

BBackColor, 220, 222, 245, 269, 357Backstage-Ansicht, 1081BackStyle, 220, 222, 357Backup, 612BACKUP DATABASE, 614BaseConnectionString, 346baseName, 831Beep, 70Befehlszeilen-Optionen, 997BeforeBeginTransaction, 213BeforeChange, 175

BeforeDelConfirm, 212BeforeDelete, 175BeforeInsert, 212BeforeUpdate, 212, 230BEGIN CATCH, 619BEGIN TRY, 619BeginTrans, 408, 448, 471, 974BeginTransComplete, 472BeiFehler, 178Beispieldatenbank, 900Benannte Argumente, 126Benutzer, 515Benutzerdefinierte Eigenschaften, 1030Berechnete Spalten, 508Berechnungsfunktionen, 944Bereichsgrenzen, 93Berichtsansicht, 261Berichtseigenschaften, 263Berichtsereignisse, 273Berichtsfuß, 300Berichtskopf, 299Berichtsmethoden, 276Berichtsmodule, 317Betriebssystem, 1164BETWEEN, 907Bevel, 237Bezeichner, 75Beziehungen, 960Bild einlesen, 1139Bild-Ressourcen, 255Bilder drucken, 1140Bildschirmauflösung, 1161Binärdatei, 770BOF, 386, 412, 461, 472Bookmark, 386, 399, 430, 435, 472Bookmarkable, 386Boolean, 73, 83BorderColor, 220, 223BorderStyle, 200, 204, 220, 223BorderWidth, 220, 223BottomMargin, 220, 225, 293BoundColumn, 507BREAK, 591BrokenReference, 339BrowseForFolder, 791BrowseTo, 70, 259BuildPath, 794BuiltIn, 332

Page 78: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1182 Index

button, 1057buttonGroup, 1063ButtonName, 784ByRef, 124Byte, 73ByVal, 124, 1114

CCacheSize, 386, 472, 541CacheStart, 386, 541Callback, 1052Callback-Methoden, 1101CameraDeviceType, 1142Cancel, 471, 472, 473CancelBatch, 473CancelEvent, 70CancelUpdate, 387, 473Caption, 200, 205, 220, 225CASE, 105, 591Catalog, 487, 524CDate, 86, 122, 152, 295Change, 152, 230, 248CharToOem, 749ChDir, 792ChDrive, 792checkBox, 239, 248, 1064childNodes, 831, 871Choose, 105Chr, 110Circle, 276, 279, 354Class, 1121Clear, 467Click, 210, 230, 239Clipboard-Objekt, 1104Clone, 157, 385, 387, 473cloneNode, 831Close, 70, 208, 387, 449, 471, 765, 792CloseButton, 200, 204CloseClipboard, 1104CloseCurrentDataBase, 342Cloud, 651Codd, 889Code-Far-Modell, 663Code-Fenster, 37, 39Code-Near-Modell, 664COLLATE, 639Collection, 327, 332, 357

ColNameHeader, 548ColorMode, 293Column, 242, 765, 793ColumnCount, 242, 507, 976ColumnHistory, 283, 405, 500, 926Columns.Append, 490ColumnSpacing, 293columnWidthPercent, 1088ColumnWidths, 976COM, 1119COM1, 337comboBox, 242, 1066Command, 442, 449, 476CommandText, 449, 451, 472, 476, 495CommandTimeOut, 471, 472CommandType, 449, 472, 476CommitTrans, 408, 448, 471CommitTransComplete, 472CompactDatabase, 395, 528, 564CompactRepair, 564ConnectComplete, 447, 472Connection, 442, 445, 471ConnectionString, 445, 471, 474ConnectionTimeout, 448, 471, 541Const, 79CONSTRAINT, 959Containers, 422, 424, 519, 1031CONTAINS, 606, 610CONTINUE, 591Control, 248, 313, 348ControlBox, 200, 204Controls, 218, 248, 325, 337ControlSource, 220, 228, 245, 299ControlTipText, 220, 226ControlType, 220, 228, 248, 313, 325, 347, 348, 357Convert_TXT_XML, 880ConvertAccessProject, 342Copies, 293Copy, 759CopyFile, 794CopyFolder, 794CopyObject, 70CopyQueryDef, 387CopyTo, 860Cos, 116CoSekans, 117CosinusHyperbolicus, 117CoTangens, 117

Page 79: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1183

CoTaskMemFree, 790COUNT, 212, 324, 467, 944, 970COUNTER, 958CountOfDeclarationLines, 331CountOfLines, 331CREATE FULLTEXT CATALOG, 609CREATE FULLTEXT INDEX, 609CREATE INDEX, 961CREATE PROCEDURE, 598, 962CREATE TABLE, 594, 958CREATE VIEW, 963CreateAdditionalData, 858createAttribute, 825, 837, 876createCDATASection, 825createComment, 825CreateControl, 315, 348CreateDatabase, 369, 371, 514createDocumentFragment, 825createElement, 825, 830, 836, 864createEntityReference, 825CreateEventProc, 331CreateField, 374, 380, 500, 503, 507CreateFolder, 794CreateForm, 312, 348CreateGroup, 516, 521CreateGroupLevel, 303CreateIndex, 377CreateKey, 778createNode, 825CreateObject, 751, 1128, 1173, 1177CreateParameter, 472CreateProcess, 1159CreateProcessingInstruction, 825, 864CreateProperty, 406, 503, 507, 981CreateQueryDef, 381CreateRelation, 380CreateReport, 312CreateReportControl, 315CreateTableDef, 374, 378, 502, 539, 550CreateTextFile, 766, 794createTextNode, 825CreateUser, 516, 521CreateWorkspace, 366CStr, 110CSV, 546, 879CSVDelimited, 547CurDir, 792Currency, 74, 86, 113

Current, 208, 212, 400CurrentData, 347CurrentDb, 412, 415CurrentObjectName, 339CurrentObjectType, 339, 348CurrentProject, 345, 475CurrentProject.Path, 445CurrentRecord, 206CurrentSectionLeft, 200CurrentUser, 1034CurrentView, 200CurrentX, 265, 268CurrentY, 265, 268Cursor, 441, 889CursorLocation, 446, 471, 472, 534CursorType, 453, 473, 534Cycle, 207

DDAO, 365, 412DAP, 66Data Access Pages, 66Data Definition Language, 882Data Manipulation Language, 883Data Query Language, 883Database, 367, 409, 412, 974Database .NET, 706DATABASEPROPERTYEX, 687DataChange, 212DataEntry, 206DataOnly, 293DatasheetAlternateBackColor, 200DatasheetGridLines, 200dataType, 831DATE, 74, 84, 121, 150, 152, 299, 648, 947DATEADD, 122, 948DateCreated, 344, 386, 753, 793DATEDIFF, 122, 948DateGrouping, 271Datei-Öffnen-Dialog, 404Dateidialoge, 782Dateisystem, 752Dateizugriff, 750DateLastAccessed, 753, 793DateLastModified, 753DateModified, 344Datenbank, 369

Page 80: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1184 Index

Datenbank analysieren, 422Datenbank defragmentieren, 740Datenbank-Nutzer, 669Datenbankdatei, 637Datenbankdiagramm, 605Datenbankkopie, 690Datenbanknutzer, 1034Datenbankpasswort, 562Datenbanksicherung, 615Datenbankstruktur, 641Datenbankverwaltung, 957Datenbankverzeichnis, 757Datenblattansicht, 199Dateneigenschaften, 264Datenfeld, 92, 99Datenklassenmodul, 476Datenmakro, 174Datenmakros, 62DatensatzBearbeiten, 179DatensatzErstellen, 179, 196DatensatzLöschen, 179Datensatzzeiger, 415Datensicherheit, 622Datentypen, 73, 83, 96Datentypumwandlung, 952DATEPART, 948DateSerial, 121datetime2, 648datetimeoffset, 648DateValue, 121, 951Datum, 592, 947, 976, 1161Datumsfeld, 376Datumsfunktionen, 120Datumsteile, 971Datumsvergleich, 909Day, 121dbAppendOnly, 383dBASE, 488, 542dbAttachment, 502dbComplexText, 507dbConsistent, 384dbcreator, 624dbDenyRead, 383dbDenyWrite, 383, 533dbEncrypt, 370DBEngine, 365dbFixedField, 375dbInconsistent, 383

DblClick, 210, 230dbOptimistic, 384dbPessimistic, 384dbReadOnly, 384dbSeeChanges, 384dbSQLPassThrough, 384dbVersion120, 370DDB, 119DDE, 1130DDEExecute, 1132DDEInitiate, 1132DDEPoke, 1132DDERequest, 1132DDETerminate, 1132DDL, 882, 957Deactivate, 208, 273Debug, 360Debug.Assert, 132Debug.Print, 131Debugger, 157Debugging, 130, 135, 1020Declare, 1111DecodeAttribute, 759Default, 492DefaultDatabase, 471DefaultSize, 293DefaultValue, 220, 375DefaultView, 200, 261, 263definition, 831DefType, 76Deklaration, 75DELETE, 212, 387, 393, 433, 458, 467, 473, 552,759, 936deleted, 602DeleteFile, 794DeleteFolder, 794DeleteKey, 779DeleteLines, 331DeleteObject, 70DeleteRule, 496DeleteValue, 780Delimited, 547DESC, 463Description, 492, 511Detailbereich, 299Device, 1137DeviceInfo, 1137DeviceManager, 1136

Page 81: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1185

DeviceName, 293Diagramm, 303Dictionary, 329Differenz, 897Dim, 74, 153Dir, 529Direktfenster, 131Dirty, 206, 212, 214Disconnect, 449, 472diskadmin, 624DisplayType, 1122DisplayWhen, 203, 220, 227DISTINCT, 913, 974DISTINCTROW., 913DividingLines, 200, 205Division, 102DLL, 1107DML, 882Do, 107DoCmd, 70, 1103DoCmd.BrowseTo, 259DOCTYPE, 814Document, 422Document Object Model, 823Document Type Definition, 810documentElement, 825, 871Documents, 519, 1031DOM, 823DOMDocument, 823, 826, 864, 866DoMenuItem, 70Doppelte Datensätze, 973Double, 73, 83DQL, 882DrawMode, 268, 294DrawStyle, 268DrawWidth, 268Dritte Normalform, 892Drive, 793DriveExists, 794DriverName, 293Drives, 752, 793DriveType, 752DROP COLUMN, 962DROP TABLE, 634, 962DropDown, 242dropDownElement, 1070DTD, 810, 827Duplex, 293

Dynamic, 367Dynamic Link Libraries, 1107Dynamisches Array, 127, 794Dynaset, 206, 367, 383, 384

EEarly Binding, 311Echo, 70Edit, 387, 392, 412editBox, 1065EditMode, 386, 392, 412, 457, 473Eigenschaften, 34, 198, 319, 322, 406Eigenschaftenfenster, 38Einbetten, 1120Einfügen, 400, 1103Einführungsbeispiel, 50Eingabemaske, 425Einschränkungen, 583Element, 811, 814, 837Else, 105Embedding, 1120Empty, 90EmptyClipboard, 1104Enabled, 220, 226, 412, 435Endlosformular, 245EndOfRecordset, 474Entwurfsansicht, 199, 261Enum, 98Enumeration, 98EOF, 386, 394, 412, 461, 472, 792Equi-Join, 898Eqv, 103Erase, 95Ereignisse, 35, 198Err.Number, 140Error, 90, 139, 142, 214, 273, 470Errors, 443, 621Erste Normalform, 890EventProcPrefix, 220, 227Events, 35Excel, 488, 551, 1144Excel.Application, 1177Exchange, 488Execute, 367, 449, 452, 471, 472, 476, 630, 967ExecuteComplete, 472ExistKey, 777Exit, 107, 230

Page 82: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1186 Index

EXKLUSIV ODER, 103Exp, 116Exponentialfunktion, 119Export, 554, 933ExportXML, 856Expression, 510Extension, 760

FFarbeigenschaften, 269Farbkonstanten, 271, 295FastLaserPrinting, 271Fehlerbehandlung, 139, 152Fehlermeldung, 1055Fehlermodell, 616Fehlersuche, 130, 157Feldtypen, 497FestlegenFeld, 178FestlegenLokaleVar, 178FetchComplete, 474FetchProgress, 474Field, 373, 409, 468Field2, 402FieldChangeComplete, 474Fields, 427, 443File System Objects, 750FileAttr, 792FileCopy, 792FileData, 403FileDateTime, 122, 792FileDialog, 404, 783FileExist, 371, 758FileExists, 794FileExtension, 1139FileFlags, 403FileLen, 792FileName, 283, 403, 925FilePicker, 783Files, 759, 793Fileserver, 571FileSplit, 761FileSystem, 752, 793FileSystemObject, 751, 793, 806FileTimeStamp, 403FileType, 403, 925FileURL, 403FillCache, 387

FillColor, 269, 270FillStyle, 269, 270, 280Filter, 206, 212, 264, 273, 386, 397, 460, 473FilterIndex, 784FilterInfos, 1143Filtern, 286, 906FilterName, 262FilterOn, 206, 264, 295FilterOnLoad, 206, 264Find, 331, 464, 473FindClose, 799FindFirst, 387, 396, 419FindFirstFile, 799FindLast, 387, 396FindNext, 70, 387, 396, 400FindNextFile, 799FindPrevious, 387, 396FindRecord, 70Firewall, 657, 697FIRST, 944FirstChild, 831, 873FitToScreen, 200Fix, 116, 118Fixed, 113Folder, 753, 754, 806FolderExists, 794FolderPicker, 783Font, 224, 252FontBold, 220, 269FontItalic, 220, 269FontName, 220, 269FontSize, 220FontUnderline, 220FontWeight, 220For, 107, 153For Each, 107, 108, 325ForeColor, 220, 222, 269ForeignKey, 496ForeignName, 380Form, 199, 245, 248, 312, 352Form_Close, 995Form_Error, 143Format, 87, 110, 112, 150, 152, 241, 273, 295, 299,427FormatCurrency, 87Formatierte Spalten, 938Forms, 324Formular, 199

Page 83: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1187

Formular-Instanzen, 352Formularansicht, 199Formularentwurf, 36Formulargestaltung, 52Formularmodule, 317Fortschrittsanzeige, 983Forward, 367FreeFile, 792FreeSpace, 752, 793FREETEXT, 606, 610Fremdschlüssel, 886FSO, 750FullPath, 332Function, 124Funktionen, 116, 123FürJedenDatensatz, 179FV, 120

Ggallery, 1073Gebundene Formulare, 398General Number, 113geography, 649geometry, 649Geräteeigenschaften, 1137Gespeicherte Prozedur, 888Get, 769, 792GetAbsolutePathname, 794GetAttr, 792GetBaseName, 794GetClipboardData, 1104GetDeviceCaps, 1161GetDrive, 794GetDriveName, 794Geteilte Ansicht, 199GetElementsByTagName, 825, 841GetExtensionName, 794GetFile, 794GetFileName, 794, 879GetFolder, 753, 754, 794, 806getImage, 1059getNamedItem, 868, 876GetObject, 1128GetOpenFileName, 786GetOption, 341, 1035GetParentFolderName, 794GetPath, 879

GetPrivateProfileString, 772GetProfileString, 771GetRegisteredOrganization, 1168GetRegisteredOwner, 1168GetRows, 387, 390GetSaveFileName, 786GetSpecialFolder, 758, 794GetString, 462, 473GetSystemDirectory, 1114, 1161GetSystemInfo, 1161GetTempName, 762, 794GetText, 1105GetTickCount, 1169GetValue, 777GetWindowsDirectory, 1161GlobalAlloc, 1105Globale Tabelle, 643Globale Variable, 957GlobalInSameProcess, 1120GlobalLock, 1105GlobalMemoryStatusEx, 1161GlobalOnNewProcess, 1119GlobalUnlock, 1105GoSub, 109GotFocus, 208, 230, 273GOTO, 109, 153, 592GoToControl, 70GoToPage, 70, 214GoToRecord, 70Grafikbearbeitung, 1142Grafikmethoden, 276GRANT, 630GRANT INSERT, 632GridX, 200, 264GridY, 200Groß-/Kleinschreibung, 639, 971GROUP BY, 919GroupInterval, 303GroupOn, 303Groups, 525GrpKeepTogether, 264Gruppen, 515, 624Gruppen ausblenden, 1048Gruppenfuß, 300Gruppenkopf, 299Gruppieren, 178, 299Gruppierung, 283GUID, 332, 497

Page 84: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1188 Index

Gültigkeitsbereiche, 80

HHaltepunkt, 160hasChildNodes, 831HashModule, 207Hauptindex, 377, 886Hauptregisterkarten ausblenden, 1046HAVING, 919Height, 220HelpContextID, 207, 220, 271HelpFile, 207, 271hierarchyid, 649Hilfe, 42HinzufügenMenü, 71Historie, 500History-Feld, 926HistoryCount, 927HKEY_CURRENT_USER, 773HKEY_LOCAL_MACHINE, 773HOUR, 121, 947Hourglass, 70HTML, 224, 489, 807HTML-Fragment, 719HWnd, 207hWndAccessApp, 992Hyperlinkfeld, 376

IIDE, 36IDENTITY, 642, 958idMso, 1044If, 105IgnoreNulls, 378IIf, 105, 390ImageFile, 1139, 1142imageMso, 1044ImageProcess, 1142Imp, 103IMPLIKATION, 103ImportXML, 856IN, 910Increment, 492Index, 377, 386, 395, 435, 886Indexdefinition, 493Indexes, 493

Indizes, 373, 376InfoMessage, 472INI-Datei, 771Initial Catalog, 446InitialFileName, 784Initialize, 332, 354InitialView, 784INNER JOIN, 303, 898, 915Input, 763, 792, 794InputBox, 147, 149, 153InSameProcess, 1120InSelection, 220, 227INSERT INTO, 639, 930insertBefore, 831inserted, 602InsertLines, 331InsertText, 331InsideHeight, 200InsideWidth, 200Installation SQL Server, 573Instanzenbildung, 322InStr, 110, 149, 943, 974InStrRev, 111Int, 116, 118Integer, 73, 83Integerfeld, 376Integrated Security, 446Integration Services, 584IntelliSense, 60InvalidateControl, 1053IP-Filter, 662IP-Freigabe, 666IPmt, 120IRR, 119Is, 428Is Nothing, 310IS NULL, 911ISABOUT, 611IsArray, 91IsBroken, 332IsClipboardFormatAvailable, 1104IsDate, 122IsInsert, 179IsLoaded, 344IsMissing, 801IsNull, 390, 412IsolationLevel, 448, 471IsReady, 793

Page 85: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1189

IsRootFolder, 793IsSystemNT, 1167Item, 328ItemAdded, 333ItemLayout, 293ItemRemoved, 333ItemsAcross, 293ItemSizeHeight, 293IXMLDOMAttribute, 876IXMLDOMNode, 871, 876

JJahr 2000, 86Jet OLEDB:Allow Zero Length, 492Jet OLEDB:AutoGenerate, 492Jet OLEDB:AutoGenerate, 498Jet OLEDB:Column Validation Rule, 492Jet OLEDB:Column Validation Text, 492Jet OLEDB:Compressed UNICODE Strings, 492Jet OLEDB:Create Link, 552Jet OLEDB:Hyperlink, 492Jet OLEDB:Link Datasource, 552Jet OLEDB:Link Provider String, 552Jet OLEDB:Remote Table Name, 552JET_SCHEMA_USERROSTER, 561Jet-Engine, 570JetEngine, 529Jetzt(), 196JOIN, 111, 794, 898, 914JRO, 529

KKeepTogether, 303Kennwort, 562Key, 237, 496KeyCode, 434KeyDown, 210, 230, 275, 434KeyPress, 210, 230, 239, 275KeyPreview, 207KeyUp, 210, 230, 241, 275Kill, 529, 792, 878, 1139Kind, 333Klasse, 354Klassenbibliothek, 334Klassenmodul, 241, 320, 354Kombinationsfeld, 242, 419

Kommentare, 41, 811Konfiguration, 1038Konstanten, 73Konstantendeklaration, 79Kontrollstrukturen, 105Kopfzeile, 980Kopieren, 1103Kreuztabellenabfrage, 953Kubikwurzel, 102Kuchendiagramm, 1177Künstlicher Schlüssel, 887

LlabelControl, 1057LAST, 944LastChild, 831, 873LastModified, 386, 430LastUpdated, 386Late Binding, 311Laufwerke, 752Layout, 1084Layoutansicht, 199, 261layoutContainer, 1087, 1093LayoutForPrint, 200, 264LBound, 95LCASE, 111, 943Leerzeichen, 636, 843LEFT, 111, 220, 943LEFT-JOIN, 898, 915LeftMargin, 220, 225, 293LEN, 111, 149, 943Library, 1019LIKE, 908LIMIT, 742Line, 276, 277, 764, 765, 793Line Input, 792Lines, 331LineSpacing, 225LinkChildFields, 217, 245, 248Linking, 1120LinkMasterFields, 217, 245, 248Listenfeld, 419, 476Lizenznehmer, 1167Load, 208, 273, 825, 826LoadCustomUI, 1039LoadCustomUI als Alternative, 1042LoadFromFile, 402, 861, 866

Page 86: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1190 Index

LoadPicture, 252, 1059LoadXML, 825, 866Loc, 792LocalDB, 567, 570, 579Lock Read, 750Lock Write, 750Locked, 220, 226, 239, 248LockEdits, 386, 531LockNavigationPane, 985LockType, 455, 473, 534LOF, 764, 769, 792Log, 116Logarithmus, 119Login-Account, 669LoginTimeout, 541Lokal-Fenster, 132Lokale Tabelle, 643Long, 73, 83LongPtr, 1108Loop, 107Löschen, 400LöschenMakroFehler, 178LostFocus, 208, 230, 273LPT1, 294lstrcat, 790LTRIM, 111, 943

Mm:n-Beziehung, 404, 895Major, 333Makro, 35, 163Makroaktionen, 173Makrokonvertierung, 61Managed Add-In, 1011MarshalOptions, 473master, 583MAX, 944Maximize, 70MaxRecords, 473MaxScanRows, 548Me, 207, 313mehrwertige Felder, 928Meldung, 71Memofeld, 283, 376, 499menu, 1075Menü, 1037Menü-Assistent, 1001

Menüband ändern, 1055MenuBar, 207Metadaten, 743Metasprache, 807Methoden, 34, 198, 319, 322Methods, 34Microsoft Access 15.0 Object Library, 1051Microsoft Access 16.0 Object Library, 335Microsoft ActiveX Data Objects 6.1 Library, 438Microsoft Excel, 1177Microsoft Office 16.0 Object Library, 335Microsoft Word, 1173Microsoft XML, 824Microsoft.ACE.OLEDB.16.0, 439, 445MID, 111, 943MIN, 944Minimize, 70, 985MinMaxButtons, 200, 204Minor, 333MINUTE, 121, 947MIRR, 120MkDir, 756, 792Mod, 102, 152Modal, 200Mode, 448, 471Model, 583Module, 207, 330Modules, 330Modulo, 102MONTH, 121, 947MouseDown, 210, 230, 275MouseMove, 210, 230MousePointer, 233MouseUp, 210, 230MouseWheel, 210, 275Move, 214, 230, 387, 462, 473, 759MoveComplete, 466, 474, 476MoveFile, 794MoveFirst, 387, 412, 417, 474MoveFolder, 794MoveLast, 387, 412, 416, 474MoveNext, 387, 394, 417, 457, 462, 474MovePrevious, 387, 394, 412, 417, 474MoveSize, 70msado15.dll, 438MSDataShape, 441msdb, 583MSDN-Abo, 658

Page 87: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1191

MsgBox, 144, 153, 430msoFileDialogFilePicker, 783msoFileDialogFolderPicker, 783msoFileDialogOpen, 783MSysDb, 1032Multi Value Field, 66, 404Multiuserzugriff, 530Multivalue-Feld, 503Mustereigenschaften, 269MVF, 66, 404, 503

NNach Aktualisierung, 175Nach Einfügung, 175Nach Löschung, 175Nachfolgeereignisse, 180Nachschlage-Assistent, 405NachschlagenDatensatz, 178Name, 207, 220, 333, 344, 386NavigateTo, 988NavigationButtons, 200, 205Navigationsbereich, 984Navigationskategorien, 986Navigationsschaltflächen, 479Navigationssteuerelement, 257NEGATION, 103Netzwerkzugriff, 577New, 318, 352, 1128NewPassword, 372Next, 107NextRecordset, 474NextSibling, 831, 873NoData, 273nodeFromID, 825nodeName, 831Nodes, 806nodeTxpedValue, 831nodeType, 831nodeTypeString, 831NoMatch, 386, 396, 400, 419, 435Normalisieren, 889Northwind, 583Not, 103Nothing, 352, 751NOW, 122, 947NPer, 120NPV, 120

NULL, 90, 911NULL-Value, 888, 945Nullable, 492Nutzerpass, 563

OObject, 74, 311, 1128Object Linking and Embedding, 1120ObjectFrame, 1121Objects, 34Objekt-Assistent, 1003Objekt-Katalog, 1127Objekte, 34Objekteigenschaften, 53Objektfeld, 1121, 1124, 1177Objektkatalog, 334Objekttypen, 309Objektvariablen, 309ODBC, 535ODBC-Datenquellen-Administrator, 535ODBC-Verbindung, 537ODBCTimeout, 541ODER, 103OEM, 547OemToChar, 749Office 365, 658OldValue, 220, 228OLE, 1119OLE DB, 441OLE-Automation, 1127, 1156OLE-Client, 1120OLE-Server, 1120OLEDB, 439OLETypeAllowed, 1122On Error GoTo, 140On Error Resume Next, 140OnConnect, 213OnDataAvailable, 868OnDisconnect, 213OnNewProcess, 1119OnReadyStateChange, 868Open, 208, 445, 471, 474, 763, 765, 792, 794Open-Dialog, 783OpenArgs, 262, 263OpenAsTextStream, 766OpenClipboard, 1104OpenCurrentDataBase, 342

Page 88: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1192 Index

OpenDatabase, 371, 533, 538OPENFILENAME, 786OpenForm, 70, 72, 992OpenModule, 70OpenQuery, 70OpenRecordset, 383, 387, 412, 419, 427, 966OpenReport, 70, 262, 295OpenSchema, 471, 561OpenTable, 70OpenTextFile, 766, 794Operatoren, 100, 103Optimierung, 556Optimistic Locking, 530Option Base, 92Option Compare Database, 57Option Explicit, 57, 77Optional, 126Optionale Argumente, 125OptionGroup, 248, 295Options, 450Optionsfeld, 248, 479Or, 103ORDER BY, 596, 918OrderBy, 206, 264OrderByOn, 206, 264OrderOnLoad, 206, 264Orientation, 293OUTER-JOIN, 898Output, 764, 794OutputTo, 71, 288ownerDocument, 831

PPack, 394Page, 212, 273PageCount, 473PageFooter, 263PageHeader, 263Pages, 248PageSize, 473Paint, 273Painting, 207PaletteSource, 200Panel, 252PanelClick, 236PanelDblClick, 236PaperBin, 293

PaperSize, 293Paradox, 488ParamArray, 126Parameter, 469, 476Parameter-Arrays, 126Parameterabfrage, 381, 495Parameters, 381, 444, 450Parent, 220, 222, 314, 344ParentCatalog, 498ParentFolder, 793ParentNode, 831, 873ParentRecordset, 402parsed, 831parseError, 825, 827Parser, 813Passwort, 514Paste, 1126Path, 346, 757, 793PDF-Datei, 287PERCENT, 113, 912PercentPosition, 386Performance, 697Permissions, 519, 522Pessimistic Locking, 530Pfad, 760PI, 79, 117, 813Picture, 200, 205PictureAlignment, 201, 264PicturePages, 264PictureSizeMode, 201, 264PictureTiling, 201, 264PictureType, 201, 264PIVOT, 954Platzhalter, 908Platzhalterzeichen, 636Pmt, 120PopUp, 201Potenzieren, 102PPmt, 120pragma table_info, 743Prepared, 472Preserve, 95, 794preserveWhiteSpace, 825PreviousSibling, 831, 873Primärschlüssel, 886Primary, 378Primary Index, 886Primary Key, 959

Page 89: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1193

PrimaryKey, 494Print, 273, 276, 280, 765, 792Printer, 288Printers, 289PrintOut, 71PrintQuality, 293Private, 80, 128, 1119ProcBodyLine, 331ProcCountLines, 331processadmin, 624Processing Instructions, 810, 813ProcOfLine, 331ProcStartLine, 331Progressbar, 983ProjectType, 346Projekt-Explorer, 39Prolog, 810Properties, 34, 344, 360, 406, 443, 448, 492, 552,981, 1031, 1138Property, 329, 467Property Get, 320, 354Property Let, 320, 354ProtokollierenEreignis, 179Provider, 471, 535Prozedur, 495Prozeduren, 123Prozessoranzahl, 1161PSet, 276, 278Public, 80, 128PublicNotCreatable, 1119Put, 769, 792PV, 119

QQBColor, 270Quadratwurzel, 102Quadrieren, 119Query Analyzer, 581QueryDef, 381QueryDefs, 422QueryPerformanceCounter, 1169QueryTimeout, 541Quit, 71, 343, 992, 996

RRAISEERROR, 617Random, 768

Randomize, 116, 118Rate, 120RDS, 441Read, 765ReadAll, 765ReadLine, 765, 767ReadText, 861readyState, 825Recalc, 214Rechteverwaltung, 964Record, 1116Record-Locking, 530RecordChangeComplete, 474RecordCount, 386, 388, 460, 473RecordLocks, 206, 264RecordsAffected, 450, 453, 930RecordSelectors, 201, 205Recordset, 367, 383, 398, 412, 443, 474, 889Recordset2, 402RecordsetChangeComplete, 474RecordsetClone, 206, 399RecordsetType, 206RecordSource, 206, 245, 264, 398ReDim, 94, 153, 794ReDim Preserve, 129Reference, 332, 1026References.AddFromFile, 1022References.Remove, 1023Refresh, 215, 467RefreshLink, 552RefreshRecord, 71RefreshTitleBar., 980REG_BINARY, 774REG_DWORD, 774REG_SZ, 774RegCloseKey, 776, 1168RegCreateKeyEx, 776RegDeleteKey, 776RegDeleteValue, 776RegFlushKey, 776Register, 248RegisterDatabase, 537Registerkarte, 1049Registerkarten ausblenden, 1047Registerkartenansicht, 1034Registrierdatenbank, 773RegOpenKey, 1168RegOpenKeyEx, 776

Page 90: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1194 Index

RegQueryValueEx, 776, 1168RegSetValueEx, 776RelatedTable, 496Relation, 380Relationen, 379, 496Remotezugriff, 577Remove, 328removeChild, 831RemoveItem, 242RemoveReferenz, 333Rename, 71Repaint, 215RepaintObject, 71Replace, 111replaceChild, 831ReplaceLine, 331Replikation, 66Replizieren, 555Report, 295, 312, 354Reportansichten, 261Reporting Services, 584ReportName, 262Reports, 324Requery, 71, 215, 387, 474Required, 375, 378Reset, 792Resize, 208, 273Resources, 256Restartable, 386Restore, 71, 985RESTORE DATABASE, 614Resume, 140Resync, 474Retreat, 273REVOKE, 630RGB, 270Ribbon, 1037RibbonCreator, 1100RibbonName, 1040Rich-Text-Feld, 282, 502RIGHT, 111, 943RIGHT-JOIN, 898, 915RightMargin, 221, 225, 294RmDir, 792Rnd, 116, 117Rollback, 408, 974RollbackTrans, 448, 471RollbackTransComplete, 472

Rollen, 624RootFolder, 793Round, 116, 150RowSource, 507RowSourceType, 242, 507RowSpacing, 294RTF-Datei, 288RTRIM, 111, 943RunCommand, 1104Rundung, 118RunMacro, 71RunSQL, 71Runtime, 1024Runtime-Modus, 996

SSave, 71, 461, 474, 878SaveAs-Dialog, 783SaveFile, 1139SaveToFile, 402, 861Scale, 276ScaleHeight, 265ScaleLeft, 265ScaleMode, 265ScaleTop, 265ScaleWidth, 265Scanner, 1134Scanner-Assistent, 1141ScannerDeviceType, 1142Schaltflächen einfügen, 1049Schema.ini, 547Schieberegler, 415Schlüssel, 886Schnellzugriffsleiste, 1056Schrifteigenschaften, 269Schweregrade, 616Scientific, 113Screen, 231ScrollBars, 201, 205SECOND, 121, 947secondColumn, 1087Section, 201, 203, 221, 227, 245, 272securityadmin, 624Seed, 492Seek, 387, 435, 769, 792Seitenansicht, 262Seitenfuß, 300

Page 91: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1195

Seitenkopf, 299Sekans, 117SELECT, 105, 555, 904SELECT INTO, 933SelectedItems, 784SelectNodes, 841SelectObject, 71, 984SelectSingleNode, 834, 841Selektion, 897SelLength, 149, 239, 1104SelStart, 149, 239, 1104SelText, 239SendenEMail, 179SendKeys, 211, 434SendMessage, 1115SendObject, 71separator, 1061SerialNumber, 752Set, 309, 352SET ROWCOUNT, 635SetAttr, 792SetClipboardData, 1104SetDisplayedCategories, 989SetFilter, 71SetFocus, 149, 214, 231, 239, 1104SetMenuItem, 71setNamedItem, 876SetOption, 341, 1035SetOrderBy, 71SetParameter, 71SetPermissions, 525setupadmin, 624SetValue, 779SetWarnings, 71SetzenWert, 71Sgn, 116Share Deny Read, 560Share Deny Write, 560Shared, 750SharedResources, 255SHBrowseForFolder, 790Shell, 1159ShellExecute, 1159Shellfunktionen, 801SHFileOperation, 801SHFILEOPSTRUCT, 801SHGetPathFromIDList, 791ShortcutMenu, 207

ShortcutMenuBar, 207, 221, 226ShortPath, 754, 793ShowAcquireImage, 1139ShowAcquisitionWizard, 1141ShowAllRecords, 71ShowDatePicker, 221ShowDeviceProperties, 1137ShowPhotoPrintingWizard, 1140ShowToolbar, 71ShowWindow, 991Sicherheitscenter, 46Sicherheitseinstellungen, 43Sicherheitsmodell, 623Sicht, 495, 595Sichten, 962SimpleText, 252Sin, 116Single, 73, 83SinusHyperbolicus, 117Size, 793SizeMode, 1122SizeToFit, 231Skip, 766SkipLine, 766, 861Slider, 415SLN, 120Snapshot, 367, 383, 385Snippet, 719Sort, 386, 395, 463, 473Sortieren, 463SortOrder, 303SOUNDEX, 716Source, 473SourceDoc, 1123, 1126SourceItem, 1122SourceObject, 217SourceTableName, 539sp_addlogin, 630sp_addrole, 631sp_detach_db, 640sp_droplogin, 630sp_password, 630sp_rename, 642SPACE, 111, 943Spalten auswählen, 904Spaltenverlauf, 926Special, 1125SpecialEffect, 203, 221, 223

Page 92: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1196 Index

Split, 111, 794Split View, 199splitButton, 1078SQL, 881SQL Azure, 652SQL Distributed Management Objects, 585SQL Server 2014, 568SQL Server 2014 Express, 566SQL Server Browser-Dienst, 633SQL Server Express, 577SQL Server Konfigurationsmanager, 582SQL Server Management Studio, 579SQL Server Profiler, 581SQL Server-Agent, 584SQL Server-Authentifizierung, 623SQL Server-Datentypen, 649SQL-Abfrageprogramm, 974SQL-Pass-Through, 382SQL-Passthrough, 966SQL-Server, 446sqlcmd, 580, 699SQLEXPRESS, 575SQLite, 702SQLite Administrator, 708sqlite_master, 743sqlite_sequenz, 744SQLite-Datentypen, 712Sqlite3.exe, 737SQLOLEDB, 446SQLServer, 586Sqr, 116Stammelement, 812Standard, 113Standarddialogfelder, 143startFromScratch, 1047StartUpShowStatusBar, 982State, 471, 472, 473Static, 82, 128, 149Status, 473StatusBar, 235, 252StatusBarText, 221, 226Statusleiste, 252Statuszeile, 982STDEV, 944STDEVP, 944Step, 107Steuerelemente, 218, 956Steuerelemente-Assistent, 1007

Stifteigenschaften, 268StopAlleMakros, 71StopMakro, 71StoppAlleMakros, 179StoppMakro, 178Stored Procedure, 597, 888Str, 111Stream, 860, 866STRING, 74, 87, 111, 943Stringaddition, 88Stringverarbeitung, 110StrReverse, 111Style, 237, 252Sub, 124SubFolders, 754, 793SubForm, 245, 248SUBSTRING, 636Suchen, 464Suchleiste, 989SUM, 303, 944Supports, 456, 474SW_HIDE, 992Switch, 105SYD, 119Symbolleiste, 1037Synchronisieren, 696sysadmin, 624SysCmd, 339, 1024System-Verzeichnis, 757SystemFolder, 758Systemressourcen, 1161Systemtabellen, 989

TT-SQL, 587

Datentypen 648Variablen 589

TabControl, 248TabDelimited, 547Tabellen, 373Tabellenblatt, 1152Tabellendefinition, 489Tabellenspalte, 642TabIndex, 221, 226Table, 367, 383, 384, 490TableDef, 373, 406, 409TableDefs, 422, 539

Page 93: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1197

Tables, 519TabStop, 221, 226Tag, 207, 221, 225Tan, 116taskFormGroup, 1086Tastaturbefehle, 71Tastaturstatus, 252TCP/IP-Protokoll, 577Teilstring, 636Temp-Verzeichnis, 757tempdb, 583Tempfile, 762Temporäre Tabelle, 595TemporaryFolder, 758TempVars, 295, 340, 957Terminate, 332, 354text, 831TextAlign, 221, 224TextBox, 239Textdatei, 546, 762, 794Textdaten, 879Textfeld, 149, 239, 376TextFormat, 221, 224, 239, 282, 503TextHeight, 276, 281TextWidth, 281Then, 105TIME, 121, 648, 947Timer, 121, 150, 214, 248, 273, 435TimerInterval, 150, 207, 248, 430TimeSerial, 121Timestamp, 744TimeValue, 121Titelleiste., 980To, 93toggleButton, 1062TOP, 221, 635, 912TopMargin, 221, 294TopMargin,, 225Tortendiagramm, 280TotalSize, 752, 793Transact-SQL, 587Transactions, 386Transaktionen, 408TransferDatabase, 71, 554TransferSpreadsheet, 71, 1145TransferText, 71TRANSFORM, 954TreeView, 422, 424, 806, 870

Trigger, 601, 888Trim, 111, 974TSQL, 636TXT, 546Type, 96, 331, 344, 386, 793, 1117TypeName, 89TypeOf, 428Typisierte Datei, 768Typkennzeichen, 75

UÜberwachungs-Fenster, 134Überwachungsausdruck, 161UBound, 95, 804UCase, 111, 943, 974Uhrzeit, 592, 1161Uhrzeitvergleichen, 910UND, 103Undo, 215, 217, 231UndoBatchEdit, 213Ungebundene Recordsets, 460Unicode, 749UNION, 917Unique, 377uniqueidentifier, 648Unload, 208, 273UnspecifiedDeviceType, 1142Unterabfrage, 920, 925Unterbrechungsmodus, 132Unterformular, 217, 245Unternavigation, 1089Unterverzeichnis, 754Until, 107Updatable, 386, 391, 412, 428UPDATE, 387, 392, 412, 430, 457, 474, 935UpdateBatch, 459, 474User, 516UserDefined, 1031Users, 525USysApplicationLog, 177USysRegInfo, 1000USysRibbons, 1041UTF-16, 814, 864UTF-8, 814, 864

Page 94: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

1198 Index

VVal, 111, 354validateOnParse, 825, 827ValidateOnSet, 375ValidationRule, 375, 386ValidationText, 375, 386Value, 221, 228, 239, 248, 389, 412VALUES, 930VAR, 944varbinary, 649Variablen, 73Variablendeklaration, 74Variant, 74, 89VARP, 944VarType, 89, 148, 427VBA, 56VBA7, 1109vbCrLf, 88vbCurrency, 427vbEmpty, 148, 427vbNull, 148Verb, 1122Verbindungszeichenfolge, 439Vereinigung, 896Vergleichsoperatoren, 104Verknüpfen, 1120Verlaufsverfolgung, 405Verschlüsseln, 527Version, 471Verweise, 1026Verzeichnis, 753, 757Verzeichnis erzeugen, 756Verzeichnisbaum, 806Verzeichnisdialog, 790Verzweigungen, 105VideoDeviceType, 1142View, 595, 888, 962Views, 495ViewsAllowed, 201Visible, 221, 226Visual Basic For Applications, 335Volltextabfrage, 606Volltextabfragen, 717VolumeName, 752, 793Vor Änderung, 175Vor Löschung, 175Vorabereignisse, 179

WWährungswert, 86WaitForSingleObject, 1159Webdatenbank, 652WEEKDAY, 121, 152, 947WEIGHT, 611Wenn, 178WhatsThisButton, 201WHERE, 906, 914WhereCondition, 262WHILE, 107, 591WIA, 1134wiaEventDeviceConnected, 1136Width, 201, 221WillChangeField, 474WillChangeRecord, 465, 474WillChangeRecordset, 474WillConnect, 472WillExecute, 472WillMove, 474Win.ini, 771Win64, 1108WindowHeight, 201WindowMode, 262Windows Azure, 651Windows Image Acquisition Automation Layer, 1134Windows Live, 658Windows-Authentifizierung, 623WindowsFolder, 758WindowWidth, 201With, 97WITH OWNERACCESS OPTION, 513WithEvents, 323, 447, 476, 868, 1136Wochenende, 152Word.Application, 1173Workspace, 366, 974Write, 766, 792, 861WriteBlankLines, 766WriteLine, 766, 767WritePrivateProfileString, 772WriteProfileString, 771WriteText, 861Wurzel, 119

XXML, 807, 831, 866XML-Datei, 864

Page 95: Leseprobe Walter Doberenz, Thomas Gewinnus Access ...files.hanser.de/Files/Article/ARTK_LPR_9783446450592_0001.pdf · Leseprobe Walter Doberenz, Thomas Gewinnus Access programmieren

Index 1199

XML-Dokumente, 829XML-Editor, 1099XML-Export, 745XML-Fehlerprüfung, 827XML-Integration, 846XML-Transformation, 853XMLDOMAttribute, 823XMLDOMNamedNodeMap, 823XMLDOMNode, 823, 831XMLDOMNodeList, 823XMLDOMParseError, 823Xor, 103XPath, 840XSD-Schema, 817XSLT, 853

YYEAR, 121, 947

ZZählerfeld, 375

Zeichenfolgen, 908Zeichenkette, 88Zeichenketten, 588Zeichenkettenfunktionen, 110Zeichensatz, 814Zeilenumbruch, 40, 88Zeit, 947, 976Zeitangabe, 150Zeitfunktionen, 120Zeitmarke, 376Zeitmessungen, 1169Zufallswerte, 497Zufallszahlen, 117Zugriffsrechte, 372Zugriffsschutz, 512Zusammengesetzter Schlüssel, 887Zustandsvariablen, 481Zustandswechsel, 481Zweite Normalform, 890Zwischenablage, 1103