Zum Hauptinhalt springen

Tipps & Tricks: Wechseln zwischen Datenquellen

Bei arcplan-Anwendungen kommt es nicht selten vor, dass die relationale Datenquelle, aus der die Framework-Daten für Navigation, User-Verwaltung, Kommentare usw. kommen, für die Versionen Entwicklung, Test und/oder Produktion auf einem Server liegt. Dadurch wird das Umschalten zwischen diesen Datenbanken komplizierter, da mit Ausnahme der Serververbindung fast alle weiteren Metadaten im arcplan-Repository abgelegt werden. Dies trifft insbesondere auch für den Datenbanknamen zu, der in diesem Fall nun den einfachen Wechsel zwischen unterschiedlichen Datenbanken auf demselben Server erschwert.

Beim initialen Aufruf des Datenbankfensters, werden alle verfügbaren Metadateninformationen aus der Datenbank abgefragt und in die zugehörige Repository-Datei (.apr) weggeschrieben. Diese Informationen sind standardmäßig der Name der ODBC-Verbindung, der Datenbankname, das Schema, die Tabellen- und Spaltennamen. In einer Abfrage werden diese Metadaten anschließend verwendet um das korrekte Statement zu generieren (... FROM dbname.schemaname.tabellenname).

 

 abfrage-statement-metadaten

 

Bei der Nutzung unterschiedlicher Server werden die Datenbanknamen, das Schema und die Tabellen in allen Datenbanken gleich benannt und es wird lediglich der Eintrag für die ODBC-Verbindung angepasst und auf den anderen Server umgehängt. Liegen die Datenbanken (bspw. SteuerDB_Test und SteuerDB_Prod) auf dem gleichen Server ist dies nicht möglich, da in diesem Fall der Datenbankname, von dem initial in das Repository eingelesenen Datenbanknamen abweicht.  

Ein Problem, verschiedene Lösungsmöglichkeiten

Das Schreiben von SQL-Statements als Lösungsweg

Eine Möglichkeit ist das Schreiben eigener SQL-Statements. Hierzu wird in einem Einzelfeld das Statement zusammengesetzt und über die SELECT(;)-Formel an die Datenbank geschickt.

 

sql-statements-schreiben

 

Die Nutzung der SQL-Statements bietet verschiedene Vor- und Nachteile. Vorteilhaft ist in der Regel, dass die Abfragen sehr performant sind und sie können durch das Zusammensetzen einzelner Textbausteine sehr variabel aufgebaut werden. Zudem können über das SQL-Statement sehr komplizierte Abfragen durchgeführt werden und ein Wechsel der Datenbanken ist theoretisch auch während der Laufzeit möglich, sollte aber aus Konsistenzgründen vermieden werden.
Nachteilig ist vor allem die schlechtere Übersicht und Lesbarkeit der Anwendung und es gibt kein Syntaxhighlighting für die SQL-Statements, was das Lesen erschwert. Zudem müssen Anwendungsdesigner zwingend SQL-Kenntnisse haben und die einfache Handhabung der Verbindungspfeile zur Abfrageerstellung entfällt.
 

Das Entfernen des Datenbanknamens in Kombination mit dem Setzten der Datenbank als Lösungsweg

Eine weitere Möglichkeit ist das Entfernen des Datenbanknamens aus den Metadateninformationen in Kombination mit dem jeweiligen Setzen der Datenbank nach dem Verbindungsaufbau der Session.
Hierzu sind mehrere Schritte notwendig:

Sicherstellen, dass für jede Tabelle ein Eintrag in der Repository-Datei (.apr Datei) existiert

Um sicherzustellen, dass auch für jede Tabelle initial ein Eintrag in der Repository-Datei erzeugt wird, muss die Tabelle im arcplan-Datenbankfenster einmal geändert und anschließend das Repository gespeichert werden. Hierzu legt man in arcplan am besten einen Primärschlüssel für die jeweilige Tabelle an, speichert die Datenbank und entfernt anschließend den Schlüssel wieder. Mit diesem Schritt wird ein explizites Ablegen der Metainformationen in der Repository-Datei erzwungen, ohne eine echte Änderung zu speichern.

Dadurch wird in der .apr-Datei der Datenbank ein Eintrag erstellt, der ungefähr so aussieht: 

 

apr-datei-eintrag-in-datenbank

 

Entfernen des Datenbanknamens

Wichtig für Schritt zwei ist der blau hinterlegte Bereich aus dem obigen Screenshot. Es handelt sich dabei um den Datenbanknamen. Um diesen aus den Metadaten zu entfernen muss der Inhalt zwischen den Tags entfernt und die Datei gespeichert werden. Die apr-Datei kann dabei mit einem beliebigen Texteditor bearbeitet werden. Dies ist für jede Tabelle durchzuführen. Insbesondere ist dieser Schritt auch für zukünftige/neue Tabellen nach deren Erstellung einmalig erforderlich. Der Eintrag muss anschließend folgendermaßen aussehen.

 

entfernen-datenbanknamen

 

Nach dem Schließen und erneuten Öffnen der Datenbank in arcplan wird, der Datenbankname bei dem soeben angepassten Eintrag nicht mehr angezeigt.

 

datenbankname-nicht-sichtbar

     

    Beim Abfragen der Daten dieser Tabelle hat sich auch das Statement verändert. Der Datenbankname ist nun verschwunden.

     

    veraendertes-statement


    Setzen der Datenbank

    Da nun keine spezielle Datenbank mehr festgelegt ist, wird die Verbindung ohne weitere Anpassung immer zur Standarddatenbank hergestellt, die entweder im User/Login oder in  der ODBC-Verbindung festgelegt wurde. Da die Angabe einer Standarddatenbank aber an mehreren Stellen (beispielsweise User/Login oder ODBC-Verbindung) möglich ist und das letzte Kommando gewinnt, ist dies nicht immer klar nachzuvollziehen.

    Aus diesem Grund sollte in der Anwendung als allererstes Kommando nach dem Aufbau der Verbindung ein "USE dbname"-Statement abgesetzt werden, um die Datenbank für den weiteren Verlauf der Session korrekt zu setzen.
    (Wie oben schon erwähnt ist technisch mit einem erneuten USE-Statement auch ein Wechsel der Datenbank während der Laufzeit möglich, dies ist jedoch nicht zu empfehlen, da arcplan nur die benötigten Objekte aktualisiert und es so zu Inkonsistenzen und einer Vermischung von Daten beider Datenbanken kommen kann.)

    Der Vorteil dieser Methode ist die gleichbleibende Handhabung der Datenbankabfragen. Sobald die Datenbanknamen der Tabellen entfernt worden sind verhält sich arcplan wie immer. Datenbankabfragen sind weiterhin durch Pfeile möglich. Es ist für die Entwicklung von Berichten somit nicht notwendig SQL Kenntnisse zu besitzen. Zudem ist die Abfrage per SQL-Statement jederzeit möglich und in Anwendungsfällen, in denen dies besser ist kann weiterhin darauf zurückgegriffen werden.

    Stefan Kersten
    Dein Ansprechpartner
    Stefan Kersten
    Competence Center Leiter