Advantage Data Architect ARC32 Der Advantage Data Architect Der Advantage Data Architect (ARC) ist wohl das wichtigste Werkzeug für alle, die mit dem Advantage Database Server arbeiten. Dieses Kapitel bietet einen Überblick der wichtigsten Funktionalitäten. Überblick Die erste Begegnung mit dem Advantage Data Architect (ARC) haben Sie bereits in Kapitel 2 (Advantage Datenbanken) gehabt. Der ARC ist komplett in Delphi geschrieben und wird mit Quellcode ausgeliefert. Aller­ dings ist dieser Quellcode nicht ohne weiteres kompilierbar. Als für Version 7 das ADS-Produktmanagement die Entscheidung traf, den Data Architect benutzerfreundlicher zu gestalten, ging man bewusst den Weg zu kommerziellen Drittanbieter-Komponenten, mit dem Nachteil, nicht mehr den kompletten Quellcode liefern zu können. Auch die Entschei­ dung, den ARC nur noch für Windows anzubieten und nicht mehr für Linux, verbesserte sowohl Design als auch Stabilität dieses Utilities. Connection Repository Zentraler Dreh- und Angelpunkt des Architekten ist seit Version 8 das Connection Repository (siehe Abbildung 31). Dieses enthält in einer Baumstruktur alle Aliase, welche in der gefundenen ads.ini unter der Sek­ tion [databases] definiert sind. Idealerweise befindet sich diese ads.ini auf dem Entwicklungsrechner im Windows-Verzeichnis, damit sie für alle Programme gleichermaßen zur Verfügung steht. Die Alias-Definition selbst besteht nur aus einem einzigen Eintrag: [databases] DEMODB=D:\ADS\adsdb\demoDB\DEMODB.ADD;D ADTDemoData=C:\Program Files\Advantage 9.0\Help\ADS_DATA\; A Hinter dem Namen des Alias folgt der Pfad zur Datenbank (ein Ver­ zeichnis bei freien Tabellen, die ADD-Datei bei Dictionary-Datenbanken) und der Tabellen- bzw. Datenbanktyp. A Advantage Tabellen (ADT, ADI, ADM) C FoxPro-Tabellen (DBF, CDX, FPT) N Clipper-Tabellen (DBF, NTX, DBT) V Visual FoxPro-Tabellen (erweiterte DBF, CDX, FPT) D Advantage Data Dictionary Abbildung 31: Das Connection Repository Der Data Architect benötigt neben der Alias-Definition noch weitere An­ gaben zur Verbindung, welche jeweils in einer eigenen Sektion abgelegt werden. Diese Informationen sind aber nur für ARC notwendig, sie sollten vor der Weitergabe der ads.ini möglichst entfernt werden. [DEMODB_info] Username=adssys ServerType=remote CommunicationType=default BlankPassword=yes ExpandedNodes=TABLES;PUBLICATIONS;SUBSCRIPTIONS; Datenbanken, welche über den Architekten angelegt werden (New Connection Wizard bzw. Ctrl+D für eine neue Verbindung oder Ctrl+W für ein neues Data Dictionary) werden automatisch in das Connection Repository aufgenommen. Über den Hotkey F11 (nicht F3 wie es fälschlicherweise im Kontext­ menü angezeigt wird) kann das Connection Repository versteckt bzw. wieder angezeigt werden. Übrigens erscheint je nach Position des rechten Mausklicks ein anderes Kontextmenü. Wird im freien Bereich geklickt, so erhält man das Menü für das gesamte Repository (wie in Abbildung 28 zu sehen). Ein Rechtsklick auf ein Objekt liefert eine Objekt-spezifische Auswahl. Table Editor Der Table Editor dient primär zur Anzeige und Manipulation von Inhalten einer Tabelle. Ein Doppelklick auf eine Tabelle im Connection Repository öffnet diese im shared mode mit den Standard Einstellungen der Verbindung. Über das Kontextmenü Advanced Open (auch zu Errei­ chen über File | Open Table Ctrl+O) können zusätzliche Optionen für das Öffnen der Tabelle angegeben werden. Funktionen zur Tabellenmanipula­ tion erreichen Sie über einen Rechtsklick in der Gitteranzeige des Editors. An der unteren Fensterleiste (Abbildung 32) können Sie die Sicht auf die Daten verändern. Die Auswahl links zeigt vorhandene Indizes an. Zusätzlich zu den Indizes lassen sich noch NATURAL ORDER (nicht sortierte Ansicht) und ADS_DEFAULT (Sortierung nach in der Datenbank definiertem Default Index) auswählen. Rechts daneben folgen die Optionen Scope (Einschränkung der Ansicht auf einen Index-basierten Ausschnitt), Filter (Anlegen eines XBase-Filters) und Search (auf der aktuellen Sortierung basierte Positionierung). Scope und Search sind dabei auf ein einzelnes Feld beschränkt, eine Kombination aus mehreren Feldern kann mit dem Architekten nicht verwendet werden. Abbildung 32: Toolbar des Table Editors Beim Anlegen eines Filters erscheint neben dem Button ein farbiger Kreis, welcher die Optimierungsstufe des Filters anzeigt. Rot bedeutet nicht optimierter Advantage Optimized Filter (AOF, siehe dazu auch Kapitel 5), gelb ist teil-optimiert und bei grün ist der Filter voll optimiert. Ein Doppelklick auf das Eingabefeld öffnet übrigens einen Eingabedialog, welcher auch einen mehrzeiligen Filter zulässt (siehe Abbildung 33). Abbildung 33: Der Filter Dialog SQL Utility Neben dem Öffnen und Modifizieren der Tabelle über die ISAM-Schnitt­ stelle bietet der Data Architect dasselbe auch über SQL an. Das SQL Utility (Abbildung 34) kann über das Menü (Tools | SQL Utility Ctrl+Q) oder über den SQL-Button in der Toolbar aufgerufen werden und verbin­ det sich nach dem Öffnen mit der gerade aktiven Connection. Leider bietet der SQL Editor (noch) keine Codevervollständigung und auch das Syntax Highlighting ist sehr rudimentär und parst nur nach Schlüsselwör­ tern, ohne die Syntax des eingegebenen SQL-Statements auszuwerten. Trotzdem hilft dieses Utility ungemein hilfreich, SQL-Statements zu entwickeln und zu testen. Im SQL Utility können mehrere Editoren gleichzeitig geöffnet werden, welche alle auf derselben Verbindung zur Datenbank beruhen. Das SQL Utility bietet herkömmliche Textverarbeitungsfunktionen, welche entweder über das Menü, die Toolbar, das Kontextmenü oder Hotkeys aufgerufen werden können. Der Editor ist konfigurierbar (Kontextmenü | Options...) und bietet neben Autokorrektur auch Code Templates. Über F7 wird die Syntax des SQL-Statements geprüft, F5 führt es aus und zeigt das Ergebnis an. Ist dabei ein Bereich im SQL-Statement ausgewählt, so wird nur dieser Teil geprüft bzw. ausgeführt. Enthält das eingegebene Statement unbekannte Parameter, so fordert Sie der Data Architect zur Eingabe derer auf. Abbildung 34: Das SQL Utility Mit Show Plan holt sich der Data Architect den Ausführungsplan (Execution Plan) und zeigt diesen grafisch an. Das ist vor allem dann hilfreich, wenn es gilt, komplexere SQL-Statements zu optimieren. Weitere Informationen zum Ausführungsplan finden Sie in Kapitel 6 (Optimieren von SQL-Statements). Seit Version 9 besteht die Möglichkeit, SQL-Skripte zu debuggen. Der Debugger ist in das SQL Utility integriert und wird durch Ctrl+F5 gestartet. Wie der Debugger verwendet wird, ist in Kapitel 6 (Debuggen von SQLSkripten) beschrieben. Alle Menüs, Toolbars und Teil-Fenster innerhalb des SQL Utilities können entweder frei schwebend sein oder an beliebiger Stelle des Utilities angedockt werden. Query Builder Mit Tools | Query Builder öffnet man auf der aktiven Verbindung ein Utility (siehe Abbildung 35), um einfache SQL Queries grafisch erstellen und dann testen zu können. Abbildung 35: Der Query Builder Auf der rechten Seite befindet sich eine Liste mit Tabellen und Views der Datenbank, welche mit der Maus in die Arbeitsfläche gezogen werden können. Um Beziehungen zwischen den Tabellen herzustellen, ziehen Sie das (Primär-) Feld der Master- auf das entsprechende Feld der DetailTabelle. Über das Kontextmenü der Verbindung (rechte Maustaste auf die Verbindungslinie) lassen sich deren Optionen einstellen. Durch Anklicken des SQL-Buttons (Ctrl+G) wird das SQL-Statement erzeugt und mit der Pfeil-Taste (Ctrl+E) ausgeführt. Das erzeugte Modell kann abgespeichert und wieder geladen werden. SQL Wizard Eine andere Möglichkeit, vom Data Architect SQL-Statements erzeu­ gen zu lassen, ist der SQL Wizard. Jedes Objekt und jede Objektgruppe einer Dictionary-Verbindung des Connection Repositories enthält im Kontextmenü einen Eintrag Generate SQL Script. Wird dieser Menüpunkt aufgerufen, so erstellt ARC für diesen und alle untergeordneten Knoten ein SQL-Skript, mit welchem die Objekte erstellt werden können, und öffnet dieses im SQL Utility. Somit enthält man eine einfache Möglichkeit, Objekte in eine andere Datenbank zu kopieren: Markieren Sie dazu das gewünschte Teil-Skript, kopieren es in die Zwischenablage und fügen es in ein mit der anderen Datenbank verbundenen SQL Utility wieder ein. Free ADT Über den Menüpunkt Tools | Free Data Dictionary Bound Table wird eine grafische Schnittstelle für das externe Utility freeadt.exe aufgerufen. Mit diesem Utility können an ein Data Dictionary gebundene ADT-Tabellen aus diesem entfernt werden. Dabei wird der Header der ADT-Datei wieder so verändert, dass diese über eine Pfad-Verbindung (ohne ADD) wieder verwendet werden kann. Verschlüsselte Tabellen werden dabei nicht auto­ matisch entschlüsselt, um hier kein Sicherheitsloch zu generieren. Data Import Wizard Der Data Import Wizard (Tools | Import Data) bietet eine komfortable Möglichkeit, Datenbanken aus diversen Quellen in den ADS zu impor­ tieren. Derzeit unterstützte Quellen beinhalten ADO (über den jeweiligen OLE DB Provider), Paradox/dBASE, BDE Alias (die Borland Database Engine), PervasiveSQL (Btrieve), verschiedene Textformate sowie Advantage kompatible Datenbanken. Im ersten Schritt des Assistenten (siehe Abbildung 36) werden der Quellentyp und die Verbindungsdaten ausgewählt. 93 Abbildung 36: Der Data Import Wizard Zudem kann festgelegt werden, ob Textfelder als Case Insensitive (Ignorieren der Groß-/Kleinschreibung für Sortierung und Vergleiche) importiert werden. Danach möchte der Assistent den Alias der Advantage Ziel-Datenbank. Hier können Sie entweder bereits im Connection Repository gelistete Einträge auswählen oder auch einen neuen erzeugen. Der Import Wizard erstellt nun in der Zieldatenbank die Tabellen im ADT-Format, kopiert Datensatz für Datensatz von der Quelle und legt im Anschluss Indizes an, welche denen in der Quelltabelle entsprechen. Besitzt die Quelltabelle einen Primärschlüssel ohne dedizierten Namen, so erstellt der Architekt diesen unter dem Namen PRIMARY. Table Export Der Advantage Data Architect kennt zwei Methoden, um Tabellen zu exportieren. Die erste davon findet sich unter dem Menüpunkt Tools | Export Table Structures as Code. Dies öffnet ein Table Export Utility zum Exportieren der Tabellenstruktur nach Delphi-, C++Builder- oder SQLCode (siehe Abbildung 37). Der erzeugte Code kann dann in die Applikation übernommen werden. Abbildung 37: Export der Tabellenstruktur Die andere Möglichkeit ist über die Kontextmenüs der Gitteranzeige im Table Editor und im SQL Utility zu erreichen und exportiert das Resultat in diverse andere Formate. Der Export kann in eine existierende Tabelle, in eine neue Tabelle oder in allgemein übliche Formate wie Microsoft Word, Microsoft Excel, verschiedene Textformate, die Zwischenablage oder HTML erfolgen. 95 Remote Management Utility Das Remote Management Utility (Tools | Remote Server Info Ctrl+R) dient zum Überwachen eines entfernten ADS-Servers. Beim Start verbin­ det es sich mit der gerade aktiven Datenbank, es lässt sich jedoch auch ein beliebiger Pfad eintragen. Dies macht das Remote Management Utility zum wichtigsten Werkzeug bei Verbindungsproblemen: Es kann dazu be­ nutzt werden, verschiedene Pfade zur Datenbank zu testen, angefangen von der direkten Angabe der IP Adresse und des Ports (\\192.168.1.100: 6262) über UNC-Pfade (\\meinserver\meinedaten) bis hin zu verbundenen Laufwerken (S:\). Das Utility bietet auf mehreren Seiten Einblicke in den Server und die Server-Konfiguration (siehe Abbildung 38), ähnlich dem Advantage Con­ figuration Utility. Allerdings lassen sich damit die Konfigurationswerte nicht ändern. Abbildung 38: Das Remote Management Utility Auf der Seite Connected Users werden alle Verbindungen zum ADS inklusive deren geöffnete Tabellen und gehaltene Datensperren ange­ zeigt. Die Benutzer (identifizierbar über Computername, Loginname, Datenbank Loginname, IP-Adresse, Terminal Client Adresse und Applika­ tionskennung) können über ein Kontextmenü (Klick mit der rechten Maustaste auf den entsprechenden Benutzer in der Liste) getrennt werden. In Open Files werden alle geöffneten Dateien, zusammen mit den ent­ sprechenden Benutzern, angezeigt. Active Queries bietet die Möglichkeit, am Server aktive SQL-Abfragen anzuzeigen und abzubrechen (dazu ist ein administrativer Benutzer nötig). Die Seite Communication Statistics zeigt eine Statistik des Advantage Servers auf Kommunikationsebene. Diese Statistiken können Aufschluss über Netzwerkprobleme geben. 97 Environment Check Utility Eine gute Möglichkeit, Verbindungsprobleme zu diagnostizieren, bietet das Environment Check Utility (Tools | Environment Check Utility, siehe Abbildung 39). Abbildung 39: Das Environment Check Utility Dieses schreibt zwei Diagnose-Dateien: die erste (env_log.txt) enthält die für den ADS wichtigen Konfigurationseinstellungen des Computers, wie Betriebssystem, verbundene Laufwerke, Versionen der Advantage DLLs und Netzwerkeinstellungen, und wird im Fenster des Utilities ausge­ geben. Die zweite Log-Datei heißt adscom.txt und enthält ein genaues Proto­ koll des Verbindungsaufbaus bzw. -Versuchs. Aus diesem Protokoll kann ausgelesen werden, ob die Namensauflösung funktioniert, welches Proto­ koll zur Kommunikation ausgewählt wurde und ob eine Verbindung überhaupt stattfand oder nicht. Beide Dateien sind im Verzeichnis des Data Architect zu finden. Dictionary Differentiator Wenn mehrere Versionen derselben Applikation ausgeliefert sind, wird es zunehmend schwerer, die Struktur der Datenbank im Einklang mit der Applikation zu halten. Eine verbreitete Strategie ist, alle Tabellen, Felder und Indizes bei Applikationsstart zu überprüfen und entsprechende Strukturveränderungen vorzunehmen. Dies ist jedoch sehr zeitaufwändig. Der Advantage Data Architect enthält ein Utility namens Dictionary Differentiator (Tools | Compare Data Dictionaries Ctrl+L). Damit können zwei (Dictionary basierte) Datenbanken miteinander verglichen und Differenz-Skripte erzeugt werden, welche die eine Datenbankstruktur in die andere überführt. Das SQL-Skript kann auf einzelne Objekte, ganze Objektgruppen oder die gesamte Datenbank in beide Richtungen erstellt werden. Abbildung 40: Der Dictionary Differentiator Beim Start des Dictionary Differentiators fordert dieser zur Eingabe zweier Datenbanken ein. Diese können entweder aus dem Connection Repository stammen oder per Pfad frei eingegeben werden (siehe Abbil­ dung 40). Danach werden diese Datenbanken unter dem Benutzerkonto ADSSYS verbunden (eine Eingabe des Passwortes ist erforderlich) und verglichen. 99 Das Ergebnis ist eine Baumansicht der Unterschiede (siehe Abbildung 41). Nun können Sie einen Knoten auswählen und über den Button Write Script das Differenz-Skript schreiben lassen. Abbildung 41: Unterschiede zweier Datenbanken Eine gute Strategie, die Datenbankstruktur mit der Applikation synchron zu halten, ist das Verwenden der Datenbankeigenschaften Version_Major und Version_Minor. Pflegen Sie diese mit jeder Version Ihrer ausgelieferten Datenbankstrukturen, so können Sie jeden Versions­ sprung in inkrementellen Differenz-Skripten der Applikation mitgeben. Bei Programmstart prüft die Applikation nur die gespeicherte Version der Datenbank und führt bei Bedarf Skript für Skript aus, bis die DatenbankVersion mit der benötigten übereinstimmt. Hinweis: Sie sollten die Skripte einzeln prüfen, da der Dictionary Differentiator nicht in jedem Fall die korrekten SQL-Statements erzeugt. Auto Updater Neu in Version 9 des Data Architect ist ein automatisches Update. Findet der Architect eine neue Version auf dem Download-Server, so bietet er an, diesen zu laden und zu installieren. Dabei werden nicht nur die vorhandenen Dateien einfach ersetzt, sondern das gesamte Setup erneut durchlaufen. Die Überprüfung auf neue Updates erfolgt beim Beenden des ARC, um den Arbeitsfluss nicht zu unterbrechen. Abbildung 42: Der Auto Updater Sind automatische Updates nicht erwünscht, so können Sie dies in der Data Architect Konfiguration abschalten. Über den Menüpunkt Help | Check for Updates wird manuell auf neue Updates geprüft. Data Architect Konfiguration Das Verhalten und Aussehen des Advantage Data Architect kann über die Konfiguration (Tools | ARC Settings) angepasst werden. Auf der Seite General befindet sich allgemeines Verhalten für Tabellen, Queries und die Browser-Ansicht. Einstellungen auf der Seite User Interface beeinflussen das Layout. Hier können Sie auch eine maximale Spaltenbreite für die Browser einstellen. Über die Seite Query lässt sich festlegen, ob das SQL Utility mit zuvor gespeicherten SQL-Skripten oder leer starten soll und auf Connections schließlich finden sich die Einstellungen für das Verhalten des Connection Repositories.