Access 2000 Programmierung Bearbeitet von Irene Bauder, Jürgen Bär 1. Auflage 1999. Buch. 1168 S. Hardcover ISBN 978 3 446 21101 8 Format (B x L): 17,7 x 24,5 cm Gewicht: 1990 g schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, ebooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.
CARL HANSER VERLAG Irene Bauder, Jürgen Bär Access 2000 Programmierung 3-446-21101-2 www.hanser.de
614 Fortgeschrittene VBA-Programmierung Tabelle 12.19: Neue Kollektionen in Access 2000 Kollektion AccessObjectProperties AllDatabaseDiagrams AllMacros AllQueries AllStoredProcedures AllViews FormatConditions Kollektion AllDataAccessPages AllForms AllModules AllReports AllTables DataAccessPages Pages 12.5.1 Datenzugriffsseiten per VBA-Code verwalten Die komplette Sammlung aller geöffneten Datenzugriffsseiten innerhalb eines Access- Projektes oder einer Access-Datenbank finden Sie in der "DataAccessPages"-Kollektion. Wenn Sie auf eine bestimmte geöffnete Seite mit VBA zugreifen möchten, werden Sie immer bei der "DataAccessPages"-Kollektion beginnen. Der Zugriff auf ein einzelnes "DataAccessPage"-Objekt kann über den Namen oder die Index-Nummer der Kollektion erfolgen. Um alle Namen der Seiten zu ermitteln, verwenden Sie am zweckmäßigsten die "For... Each"-Anweisung. Das folgende Beispiel gibt alle Namen der im aktuellen Projekt beziehungsweise in der aktuellen Datenbank geöffneten Datenzugriffsseiten in das Direktfenster aus. Sub fktalleoffenendatenzugriffsseiten() Dim dap As DataAccessPage For Each dap In DataAccessPages Debug.Print dap.name Next dap Es ist nicht möglich, aus der DataAccessPages -Auflistung ein DataAccessPage -Objekt zu löschen oder ein neues hinzuzufügen. Möchten Sie dagegen alle Seiten innerhalb eines Projektes ermitteln, müssen Sie eine andere Vorgehensweise wählen. Alle in einem Projekt enthaltenen Datenzugriffsseiten befinden sich in der AllDataAccessPages -Kollektion des Objektes CurrentProject. Das CurrentProject -Objekt bezieht sich dabei auf das Projekt, das heißt auf die Sammlung aller globalen Module und aller Klassenmodule, der aktuellen Access-Datenbank ( mdb ) oder des aktuellen Access-Projektes ( adp ). Sub fktalledatenzugriffsseiten() Dim dao As AccessObject
Neue Objekte, Methoden und Eigenschaften in Access 2000 615 For Each dao In CurrentProject.AllDataAccessPages Debug.Print dao.name Next dao Das AccessObject -Objekt Wichtig ist es darauf zu achten, daß die AllDataAccessPages -Kollektion kein DataAccessPage -Objekt, sondern ein AccessObject -Objekt zurückgibt. Dieses AccessObject - Objekt kann wiederum unterschiedliche Typen annehmen. Der Typ ergibt sich aus der Kollektion, die das Objekt zurückgegeben hat. Dabei kann ein AccessObject -Objekt folgende Typen besitzen. Tabelle 12.20: Mögliche Typen eines AccessObject -Objekts AccessObject Kollektion Beschreibung Form AllForms Enthält alle gespeicherten Formulare. Report AllReports Enthält alle gespeicherten Berichte. Macro AllMacros Enthält alle gespeicherten Makros. Module AllModules Enthält alle gespeicherten Module. Data access page AllDataAccessPages Enthält alle gespeicherten Seiten. Table AllTables Enthält alle gespeicherten Tabellen. Query AllQueries Enthält alle gespeicherten Abfragen. View AllViews Enthält alle gespeicherten Sichten in einem Access-Projekt. Stored procedure AllStoredProcedures Enthält alle gespeicherten Stored Prozedures in einem Access-Projekt. Database diagram AllDatabaseDiagrams Enthält alle gespeicherten Diagramme in einem Access-Projekt. Eine neue Datenzugriffsseite anlegen Die programmtechnische Erstellung einer Datenzugriffsseite erfolgt über die Methode CreateDataAccessPage des Application -Objektes. Dabei können Sie definieren, ob es sich um eine leere Seite handeln soll, oder ob eine Verbindung zu einer bereits bestehenden HTML -Seite geschaffen werden soll. object.createdataaccesspage filename [, createnewfile] Der erste Parameter enthält den Namen der HTM-Datei und den Pfad. Die Voreinstellung für das zweite Argument lautet True, wodurch eine neue HTML -Seite angelegt wird. Wenn
616 Fortgeschrittene VBA-Programmierung Sie statt dessen den Wert False übergeben, wird nur ein Verweis auf eine bereits bestehende Webseite erzeugt. Durch den Aufruf der Methode CreateDataAccessPage wird die Datenzugriffsseite als Symbol im Access-Fenster angezeigt. Möchten Sie die Seite sofort als Fenster sehen, rufen Sie anschließend die Methode Restore des DoCmd -Objektes auf. Sub fktneueseite() Dim Seite As DataAccessPage Set Seite = Application.CreateDataAccessPage("c:\eigene Dateien\NeueSeite.htm", True) DoCmd.Restore Im anschließenden Beispiel wird eine neue Datenzugriffsseite erstellt und bereits mit etwas Text gefüllt. Den Namen der Seite nennen Sie beim Aufruf der Funktion NeueSeiteanlegen. Falls unter dem Namen bereits eine HTM -Seite existiert, werden Sie gefragt, ob diese als Grundlage dienen soll. Der Aufruf der Funktion im Direktfenster kann zum Beispiel folgendermaßen lauten:? NeueSeiteanlegen("Seite20") Bild 12.26: Eine mit VBA-Code erstellte Datenzugriffsseite '***************** BASICPRG.MDB ***************** '******************** NeueObjekte ****************** Function NeueSeiteanlegen(strDateiName As String) As Boolean Dim Seite As DataAccessPage Dim Antwort On Error GoTo Seite_Err Set Seite = Application.CreateDataAccessPage(strDateiName, True) With Seite.Document.All("Überschriftstext").innerText = "Programmtechnisch erstellte Seite".All("Überschriftstext").Style.display = "".All("V orhaupttext").innertext = "Beispiel zu einer Überschrift".All("V orhaupttext").style.display = ""
Neue Objekte, Methoden und Eigenschaften in Access 2000 617 End With Seite.ApplyTheme "Safari" Seite_Save: DoCmd.Close acdataaccesspage, Seite.Name, acsaveyes NeueSeiteanlegen = True Exit Function Seite_Err: Select Case Err.Number Case 2023 ' Die angegebene Datei existiert bereits ' wenn gewünscht, kann sie als Grundlage benutzt werden Antwort = MsgBox("Die Datei " & strdateiname & ".HTM" & " existiert bereits" & _ vbcrlf & "Wollen Sie diese als Grundlage verwenden?", vbyesno, "Achtung") If Antwort = vbyes Then Set Seite = Application.CreateDataAccessPage(strDateiName, False) Resume Next Else NeueSeiteanlegen = False Resume Seite_Ende End If Case 91 MsgBox "Diese Seite wurde nicht mit Acess erstellt" & _ " und kann deshalb nicht bearbeitet werden",, "Achtung" Resume Seite_Save Case Else NeueSeiteanlegen = False MsgBox Err.Description Resume Seite_Ende End Select Seite_Ende: End Function Mit der Methode CreateDataAccessPage und dem zweiten Parameter True wird eine neue Datenzugriffsseite mit einer neuen HTM-Datei erstellt, und ein Verweis auf die Seite der Objektvariablen Seite zugeordnet. Über die Eigenschaft Document der neu angelegten Seite wird das Internet Explorer Dokument-Objekt ermittelt, mit dessen Hilfe dann die einzelnen Inhalte der Webseite angesprochen werden können. Der Eigenschaft innertext der beiden Objekte Überschriftstext und VorHaupttext wird jeweils mit einem Text besetzt. Damit der Text auch sichtbar angezeigt wird, muß noch der bisherige Inhalt der Eigenschaft display gelöscht werden, das heißt es wird eine leere Zeichenfolge übergeben. Die Namen dieser zwei Objekte, die standardmäßig von Access eingefügt werden, können Sie zum Beispiel in der Entwurfsansicht einer neu geschaffenen Datenzugriffsseite nachlesen. Genauso wie in der Entwurfsansicht können Sie jede Seite auch per Code mit einem bestimmten Design versehen. Dazu setzen Sie die Methode ApplyTheme des DataAc-
618 Fortgeschrittene VBA-Programmierung cesspage -Objektes ein, der Sie den Namen eines Design übergeben. Alle vorhandenen Designs werden im Dialogfeld Webdesigns aufgelistet. Zum Schluß wird die neue Datenzugriffsseite mit der Methode Close geschlossen und über die Konstante acsaveyes gespeichert. Bevor die Funktion beendet wird, wird ihr noch True als Rückgabewert zugewiesen. Die Funktion NeueSeiteanlegen besitzt eine eigene Fehlerbehandlungsroutine, um zwei Fehler abzufangen: Den angegebenen Namen gibt es bereits als HTM-Datei Die Objekte Überschriftstext und/oder VorHaupttext existieren nicht in der HTM- Datei Im ersten Fall entsteht der Fehler mit der Nummer 2023. Daraufhin wird der Anwender gefragt, ob die bereits bestehende Datei als Grundlage für die neue Datenzugriffsseite dienen soll. Wenn die Frage bejaht wird, wird erneut die Methode CreateDataAccessPage aufgerufen. Dieses Mal lautet aber der zweite Parameter False. Anschließend wird mit Resume Next auf die Anweisung gesprungen, die eine Zeile unter der fehlerverursachenden Anweisung steht. Wenn Sie eine bestehende Webseite als Grundlage für die Datenzugriffsseite verwenden, sollte diese zu einem früheren Zeitpunkt mit Access angelegt worden sein, ansonsten gibt es nicht die beiden Objekte Überschriftstext und VorHaupttext, denen ein bestimmter Text zugewiesen wird. Falls diese Zuordnung versucht wird, ohne daß eines dieser Objekte existiert, entsteht der Laufzeitfehler 91. In diesem Fall wird eine Meldung ausgegeben und dann zur Marke Seite_Save gesprungen, damit die Datenzugriffsseite noch geschlossen und gespeichert wird. Rufen Sie die Funktion NeueSeiteanlegen ein zweites Mal mit demselben Namen einer existierenden HTM-Datei auf, so wird in Access eine neue Datenzugriffsseite erstellt. Dem Namen dieser Seite wird zur Unterscheidung zur bereits bestehenden Seite die Nachsilbe _1 angehängt. Beide Datenzugriffsseiten verweisen aber auf dieselbe HTM-Datei. 12.5.2 Auf Formulare und andere Datenbankobjekte zugreifen Bis jetzt konnten Sie mit der Forms -Auflistung nur die geöffneten Formulare ansprechen. Sie mußten sich also zuerst darum kümmern, daß das Formular geöffnet ist. Nachfolgend sehen Sie ein kleines Beispiel, das die Namen aller offenen Formular im Direktfenster auflistet. 'Gibt alle geöffneten Formulare aus ' mit Forms-Auflistung Sub fktalleoffenenformulare1() Dim frm As Form For Each frm In Forms Debug.Print frm.name Next frm