Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Adressen sind in Datenbanken allgegenwärtig. Access [basics] macht da keine Ausnahme. Sie möchten auf einer Karte sehen, wo sich eine Adresse befindet Dann bedienen Sie sich etwa Google-Maps oder Bing-Maps im Webbrowser. Wenn Ihnen das aber zu umständlich ist, so bauen Sie doch einfach den Geo-Support direkt in ihre Datenbank ein! Wir zeigen im Beitrag, wie das geht, und wie die Maps unmittelbar in einem Formular angezeigt und angesteuert werden können.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1603_GoogleMaps.accdb
Google- und Bing-Maps
Beide Dienste ähneln sich und weisen ähnliche Features auf. Bei der Flexibilität hat Google die Nase vorn, bei der Vogelperspektive und, nach unseren Erfahrungen, hinsichtlich der Performance, ist Bing etwas interessanter. Ansonsten ist es sicher Geschmackssache, welche Methode Sie bevorzugen.
In die Eingabefelder der Maps geben Sie die gewünschte Adresse oder Koordinaten ein. Im Erfolgsfall wird der Ort nun angezeigt. Wählen können Sie unter verschiedenen Ansichten, wie Karte, Satellit oder 3D. Features, wie Verkehr, Radrouten oder öffentliche Verkehrsmittel sind nun zusätzlich einstellbar.
Lässt sich das fernsteuern Sie brauchen keine Fernsteuerung des Browsers über SendKeys oder ähnliche fehleranfällige Programmierung, und auch keine JavaScripte. Denn zum Glück lassen sich verschiedene Parameter der Dienste direkt in der aufrufenden URL mitgeben. Dazu gehören auch die Adresse und einige Ansichtseinstellungen. Aufgabe dieses Beitrags ist die Lösung, die sattsam bekannten Adressen der Beispieldatenbank unmittelbar als Karte im Formular anzuzeigen.
Webbrowser
Da es sich um Webdienste handelt, benötigen wir natürlich zwingend einen Webbrowser zur Darstellung der Karten. Seit einigen Generationen von Access ist dieser bereits als Steuerelement in Formulare integrierbar. Es gibt zwei Alternativen: Entweder Sie verwenden des eingebaute Webbrowser-Steuerelement, oder Sie fügen den Internet-Explorer als ActiveX-Steuerelement in ein Formular ein (Ribbon|Entwurf| Steuerelemente|ActiveX-Steuerelemente … Microsoft Webbrowser). Beides kommt so ziemlich auf das Gleiche heraus. Der Unterschied besteht darin, dass sich der eingebaute Browser direkt an ein Feld der Datenherkunft des Formulars binden lässt. Das muss ein Textfeld sein, welches den Link für die anzuwählende URL enthält. Beim Navigieren durch die Datensätze des Formulars wird dann automatisch jeweils die entsprechende Seite im Browser angezeigt. Andererseits legt der eingebaute Browser nicht komplett die Schnittstelle zum darunterliegenden InternetExplorer offen. Wenn hier mehr Interaktion mit dem Objektmodell über VBA benötigt wird, dann ist das ActiveX-Steuerelement besser geeignet. Vor allem dann, wenn auf eine Datenbindung verzichtet werden kann.
Beide Steuerelemente lassen sich ansonsten auf ähnliche Weise ansteuern, und auch das Verankern-Feature von Access bei Größenänderungen des Formulars funktioniert bei beiden anstandslos. Wir verwenden für dieses Beispiel das eingebaute Webbrowser-Steuerelement und zeigen kurz, wie die Sache prinzipiell läuft.
Datengebundener Browser
Die Tabelle tblURLs ist die Basis für das Formular frmMaps, welches den Webbrowser als einziges Steuerelement enthält. Sie hat einen bescheidenen Aufbau. Neben der nebensächlichen Autowert-ID für jeden Datensatz sind im Feld URL die Internetadressen gespeichert, welche vom Browser angesteuert werden sollen. Also ist im Formular der Steuerelementinhalt des Browsers an dieses Feld gebunden.
Die Tabelle enthält im Auslieferungszustand drei Datensätze. Die erste Internet-Adresse lautet about:blank. Das führt dazu, dass das Formular beim öffnen nur eine leere Seite im Browser-Steuerelement anzeigt. Das ist sinnvoll, denn ohne irgendeine URL zeigt der Browser eine unerwünschte Seite mit der Meldung Adresse ungültig an. about:blank vermeidet dies.
Der zweite Eintrag in der Tabelle ist
https://www.google.de/maps/
Das ist die Startseite von Google Maps. öffnen Sie zum Test das Formular. Klicken Sie in der Navigationsleiste auf den nächsten Datensatz. Leider entspricht das Ergebnis nicht den Erwartungen (Bild 1). Google scheint sich nicht mit dem Webbrowser-Steuerelement anfreunden zu können. Es hat einige Nachforschungen erfordert, um diesem Verhalten, das Microsoft Bing übrigens nicht aufweist, auf die Schliche zu kommen. Die Ursache liegt darin begründet, dass das Webbrowser-Steuerelement, wie auch das ActiveX-Pendant, den Google-Servern die Version 7 des Internet-Explorers melden, obwohl etwa auf dem Windows-System der Internet-Explorer 9 installiert ist. Seit geraumer Zeit akzeptiert Google Maps diese Version jedoch nicht mehr und zeigt deshalb die angezeigte Meldung. Endstation
Bild 1: Google Maps akzeptiert das Webbrowser-Steuerelement nicht als Browser
Tatsächlich lässt sich über die Registry einstellen, wie sich das WebControl verhalten soll. über einen bestimmten Schlüssel im Zweig HKEY_CURRENT_USER, also dem Benutzerzweig der Registry, kann angegeben werden, dass das WebControl immer mindestens die Version 9 ausgibt. Die Routine SetWebControlAsIE9 im Modul mdlWebControl der Beispieldatenbank übernimmt das Setzen des entsprechenden Werts in der Registry.
Dazu sind keine Administratorrechte nötig, weil jeder Benutzer auf seinen Zweig HKEY_CURRENT_USER Zugriff hat. Allerdings erfordert das ändern dieses Werts einen Neustart von Access. Auf eine Beschreibung der nicht so trivialen Prozedur sehen wir hier ab. Verwenden Sie das Modul auf analoge Weise, nachdem Sie es in eine Ihrer Datenbanken importiert haben, wenn Sie dort Google Maps im Formular benötigen.
In der Beispieldatenbank wird die Prozedur vom Intro-Formular aufgerufen. Alternativ ginge das natürlich auch über ein AutoExec-Makro. Zusätzlich sollte noch die Routine ChangeWebControlFeature durchlaufen werden, die weitere Bedingungen für das Webbrowser-Steuerelement über eine API-Funktion setzt, damit sich dieses genauso verhält, wie der externe Browser. SetWebControlAsIE9 überprüft übrigens zuerst, ob der gewünschte IE9-Modus bereits gesetzt ist und macht dann weiter nichts. Andernfalls werden Sie über eine Meldung darüber informiert, dass ein Neustart von Access und der Datenbank nötig ist. Die Prozedur RestartAccess übernimmt das Neustarten selbst. Sie brauchen also nichts manuell zu veranlassen. Eine neue Instanz von Access wird in der Routine mit dem Pfad der aktuellen Datenbank per Shell-Anweisung gestartet, und die offene Instanz wird geschlossen. Wenn Sie die Beispieldatenbank zu ersten Mal öffnen, werden Sie mit einiger Sicherheit mit diesem Vorgang konfrontiert (siehe Bild 2).
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo