Reverse Engineering für Datenbanken

Erstaunt bin ich schon. In Visio 2013 wurde der Assistent, der es ermöglichte auf eine Datenbank zuzugreifen und die Verknüpfungen der Tabellen als Visio-Diagramm darzustellen (Reverse Engineering) entfernt. In Visio 2019 taucht er wieder auf und wird groß als „was ist neu?“ gefeiert.
Übrigens kann man ihn auch als Add-In herunterladen:
https://www.microsoft.com/de-DE/download/details.aspx?id=54527

Datenbankassistent

Hallo Herr Martin,
kürzlich habe ich mir Ihr Buch „Visio 2010 – Das Handbuch“ (ISBN 978-3-86645-135-3) gekauft.
Anfänglich teilte ich ihre Begeisterung doch inzwischen hält sich die Begeisterung bei mir sehr in Grenzen.
Warum?
Zunächst habe ich zwei vorhandene MS Access Datenbanken per Reverse-Engineering importiert (Entitäten-Diagramm) was nach einigem Gefummel auch gut funktioniert hat.
Dann wollte ich die Objekte bzw. Tabellen aus der ersten Zeichnung in die zweite Zeichnung kopieren um dort alle Tabellen zusammen zur Verfügung zu haben.
Aus irgend einem mir unerfindlichen Grund hat Visio nach dem Einfügen an alle eingefügten Tabellen am Tabellenname eine „1“ angehängt?!?! Hätte ich das Einfügen in der gleichen Zeichnung durchgeführt in der die Tabellen ja schon vorhanden sind dann könnte ich das Verhalten verstehen, man müsste ja doppelte Tabellen verhindern. Ich fügte aber in eine andere Zeichnung ein in der die eingefügten Tabellen noch nicht vorhanden waren. Dieses Verhalten ist auch gegeben wenn man in eine völlig leere Zeichnung einfügt. Kann man dieses Verhalten irgendwie verhindern? (In Ihrem Buch habe ich dazu leider nichts gefunden.)
Daraufhin habe ich versucht die Tabellennamen per VBA zu ändern. Es ist mir auch gelungen den Text im oberen Shape zu ändern aber in den Datenbankeigenschaften stand immer noch der Name mit der „1“ am Ende. Das wollte ich in meiner Naivität dann einfach auch per VBA ändern und musste feststellen, das daß offensichtlich nicht geht.
Bei meiner viele Stunden dauernden Internet-Recherche fand ich zu dem merkwürdigen Verhalten beim Kopieren keinen einzigen Eintrag. Zu der Sache mit dem Auslesen der Datenbankeigenschaften fand ich dann einige Hinweise die allerdings alle ausagten, daß das nicht möglich ist. Es gibt keine API-Schnittstelle!?! Können Sie das bestätigen?
Gruß, RE
Hallo Herr E.,
Ich bin übrigens noch immer „ziemlich“ begeistert von Visio. Ich gestehe: da ich in einigen Visio-Programmierprojekten involviert bin und das Teilchen auf Herz und Nieren abklopfe, verfluche ich es manchmal schon – vor allem das manchmal merkwürdige Eigenleben … Aber das ich in einen Buch, das in einem Verlag erschienen ist, der den Namen „Microsoft“ im Titel trägt, nicht schreiben … Und: an die US-amerikanischen Programmierer kommen wir hier in Deutschland leider nicht ran – sonst hätte ich auch einige Fragen an sie …
Zu Ihrem Problem: Ich habe es mir angeschaut – Sie haben recht mit dem Namenändern der Tabellen. Auf den Shapes der DB-Vorlage liegt im ShapeSheet ein Schutz – den kann man leicht aushebeln und sich so die einzelnen Teile ansehen. Dabei habe ich festgestellt, dass der Tabellenname nicht im ShapeSheet steht. Ein Ändern des Tabellennamens schreibt den Text als Text in die Felder (irgendeine *dll steuert dies). Ich hätte vermutet, dass er in einer userdefined Cell oder irgendwo in den Daten liegt. Wo Visio die Datenbankeigenschaften speichert, ist mir nicht klar – da Visio 2010 ein binäres Format hat, finden wir es nicht. Erst in Visio 2013 kann man die Zeichnung als *.vsdx speichern und in der xml-Datei nachsehen, wo die Daten liegen. Auch ein Speichern der Datei als xml (oder svg) bringt keinen Erfolg – ich weiß nicht, wo Visio diese Daten kapselt. Das heißt: Sie werden wohl nicht an den Tabellennamen rankommen, da er mit Sicherheit irgendwo gekapselt liegt.
Das heißt: ich fürchte, Sie müssen die beiden Datenbanken so konfigurieren, dass sich die Tabellennamen unterscheiden. Oder doch in getrennten Dateien liegen lassen.
Sorry, dass ich Ihnen nicht helfen kann
schöne Grüße
Rene Martin
Hallo Herr Martin,
vielen Dank für ihre Antwort auf meine Anfrage.
Nochmal kurz zum Problem. Genaugenommen sind es ja zwei Probleme…
1. Tabellennamensänderung nach copy&paste
Wenn eine Tabelle mit Namen „tblKunden“ aus Zeichnung A kopiert wird nach Zeichnung B, die vollkommen leer ist, und danach heißt die Tabelle in Zeichnung B dann „tblKunden1“ dann ist das ein Bug.
2. Auslesen dar Datenbankeigenschaften per VBA
Wie ich bereits vermerkt hatte gibt es im Internet ein Reihe von Statements die besagen, daß es keine Objekte gibt die man ansprechen könnte. Microsoft hat offensichtlich bewusst keine API-Zugriffe auf die Datenbankeigenschaften eingerichtet. Das ist ein Skandal … – zumindest aber eine Frechheit. Na ja, so kenn man Microsoft.
Ihre Forschungsergebnisse decken sich also mit den meinen. Das ist natürlich sehr frustrierend und unbefriedigend. Immerhin habe ich eine Menge Geld ausgegeben für die 2010 Premium Version. Dennoch betrachte ich es nicht als eine Fehlinvestition, auch wenn genau das wofür ich es zunächst gebraucht hatte nicht funktioniert. Das Programm bietet ja noch eine Menge weiterer nützlicher Funktionalitäten, da werde ich sicher noch einige davon gerauchen können.
Gruß, RE.