NTB16 - Bedienung

relationaler Datenbank Explorer

Startseite Inbetriebnahme Bedienung CLR16

alle Nodes

Bei den Nodes sind zwei Gruppen zu unterscheiden:

  1. Die aller erste Node - und alle ihre Child-Nodes - geben exakt die Datenstrukturen in jedem verbunden 'Linked Server' wieder. Die aktuellen Strukturen in den verbundenen Datenbanken werden beim Start von NTB16 immer wieder neu ausgelesen. Die Anordnung der Nodes in Gruppe 1 kann nicht verändert werden.
  2. Weitere Nodes (im Root-Level) sind beim ersten Start nicht vorhanden. Der Nutzer kann aber Verknüpfungen erstellen, die dann als eigene Struktur von Nodes darunter angezeigt werden.

Gruppe 1 (relationaler Datenbank Explorer)

Unter der Root Node wird als erste Child-Node die Standard-Datenbank ('master.dbo') angezeigt, das kann zunächst ignoriert werden. Danach folgen als Child-Nodes alle Linked Server ('NTB', ...), die mit der lokalen SQL Server Instanz verbunden sind. Die Konfiguration der Linked Server ist unter Inbetriebnahme beschrieben.

In den nächsten Levels werden die Datenbanken ('master', 'NTB16', ...) in allen Linked Servers, und die Tabellen und Sichten (mit Schema) in jeder Datenbank angezeigt. Zu beachten ist, dass nur Objekte (Tabellen und Sichten) angezeigt werden, die der 'rmtuser' sehen darf. Wenn die SELECT Berechtigung nicht gegeben werden soll, reicht auch VIEW DEFINITION.

Bis hier hin entspricht die Funktion weitgehend dem SQL Server Management Studio. Neu ist jetzt die Berücksichtigung aller Relations zwischen den Tabellen.

Beim Klick auf eine Tabelle-Node werden die Daten aus dieser Tabelle (Rows) zunächst asynchron geladen. Es können mehrere Tabellen kurz nacheinander angeklickt werden, die beim Laden gelb, und wenn die Daten da sind schwarz angezeigt werden. Um die Daten in einer Tabelle zu sehen oder zu bearbeiten, ist die Node (mit schwarzer Schrift) erneut zu klicken. Jetzt wird das UserControl generiert und rechts angezeigt. Pro Node wird immer eine eigene Instanz des UserControl erzeugt und in der Node zur Wiederverwendung gespeichert. Die Node-Beschriftung ist dann fett.

Das Standard-UserControl ist ein DataGridView. Die Spalten werden anhand der Tabellenstruktur automatisch generiert. Mit dem Standard-Control können also beliebige Daten angezeigt, und wenn ein Primärschlüssel vorhanden ist, verändert werden.

Für Boolean-Daten wird ein DataGridViewCheckBoxColumn erzeugt. Und für Fremdschlüssel, die sich über Parent-Relations aus anderen Tabellen ergeben, wird ein DataGridViewComboBoxColumn erzeugt. Die ComboBox wird anhand der Relations automatisch mit den möglichen Werten gefüllt. Wenn es in einer Tabelle mehrere Fremdschlüssel gibt, werden auch alle ComboBoxen mit ihren jeweiligen Datenbindungen automatisch erzeugt. Wenn man die Darstellung der Daten als Grid akzeptieren kann, ist die Programmierung von Formularen überflüssig geworden! Und wenn man doch eine eigene Oberfläche gestalten will, sind die Daten und die ComboBoxen einfach schon da. Für jede Tabelle kann ein eigenes UserControl hinterlegt werden.

 

Im TreeView fällt auf, dass nach den Tabellen auch die darin enthaltenen Rows (hellgrüne Hintergrundfarbe) angezeigt werden. Diese Nodes entsprechen den Zeilen im daneben angezeigten Grid und sind erforderlich, um die Child-Relations weiter zu verfolgen. Jede einzelne Row hat nämlich ihre eigenen Child-Rows in den untergeordneten Tabellen. Zum Beispiel muss in der Tabelle Konten erst die Row mit einer konkreten Kontonummer ausgewählt werden. Darunter werden in der Tabelle Buchungen dann nur die Rows zu dieser konkreten Kontonummer angezeigt. Zu einer anderen Kontonummer werden aus der selben Tabelle Buchungen ganz andere Rows angezeigt. Jede mögliche Kombination aus Rows und Relations erhält eine eigene Node. Und beim anklicken dieser Node wird immer eine neue Instanz eines ganz spezielles UserControl erzeugt.

In der oberen Ebene (nach der blauen 'TABLE (n)' Node) werden zunächst alle Tabellen (je einmal) angezeigt. Man hat nun die Wahl, ob man den gesamten Inhalt z.B. der Tabelle Buchungen sehen will (das können sehr viele Daten sein), oder z.B. bei der Tabelle Konten anfängt und dann nur die Buchungen zu einer Kontonummer sieht. Alternativ kann man bei der Tabelle Kategorien anfangen und z.B. nur die Buchungen 'Internet Ausgaben' anzeigen. Die Verschachtelung kann beliebig weit in die Tiefe gehen, so wie die Relations in der Datenbank. (Länder-Bundesländer-Gemeinden-Straßen-Häuser-Mieter)

Bemerkenswert ist, dass diese Nodes aus jeder beliebigen Datenbank Struktur automatisch generiert werden, und noch keine Zeile Code programmiert wurde. Andererseits sind ganz klar die Mängel in einer Datenbank Struktur erkennbar, z.B. fehlende Relations, Primärschlüssel u.s.w. Auch zu viele oder zu wenige Rechte fallen dem Datenbank Administrator unmittelbar auf.

Wenn die Struktur erst mal stimmt, wird man auch bald erkennen welche Node die richtige ist, um mit der Datenerfassung zu beginnen. Auf jeder Tabellen-Node gibt es mit der rechten Maustaste den Menüpunkt 'Verknüpfung erstellen'. Wird darauf geklickt, erscheint eine Kopie der Node unten in Gruppe 2 (Verknüpfungen). Diese Verknüpfungen bleiben beim nächsten Start des Programms erhalten, so dass man sich nie wieder mit den Datenstrukturen in Gruppe 1 beschäftigen muss...

 

Tabellen Eigenschaften

Extended Properties konfigurieren

Beim Zugriff auf Tabellen über Linked Server ist immer der 4-teilige Objekt-Bezeichner zu verwenden:
[Linked Server].[Datenbank].[Schema].[Tabelle]
Über diesen eindeutigen Bezeichner können einer Tabelle auch die im Bild gezeigten ExtendedProperties zugeordnet werden. Dieses Control ist über rechte Maustaste - 'Edit Extended Properties' zu finden. Die Daten werden in der Tabelle gespeichert, die bei Inbetriebnahme angelegt wurde.

Bei 'userControl' kann ein vom Programmierer selbst hinzu gefügtes UserControl ausgewählt werden, das bei dieser Tabelle immer anstatt des Standard-DataGridView angezeigt wird. Die Zuordnung erfolgt nicht pro Node, sondern ist bei allen Nodes wirksam, die eine bestimmte Tabelle (mit dem 4-teiligen Objektbezeichner) anzeigen.

Bei 'textExpression' kann ein Ausdruck stehen, wie er für DataTable-Expression-Columns gültig ist. Dieser berechnete Column wird dann in den automatisch generierten ComboBoxen als DisplayMember angezeigt. Sonst wird nur der Schlüssel angezeigt, was nicht sehr bedienerfreundlich ist. Außerdem werden die (hellgrünen) Nodes, welche die Rows einer Tabelle darstellen, damit beschriftet.

Bei 'expressionColumns' werden zusätzliche Columns eingetragen, die in der SELECT Anweisung enthalten sein müssen, aber nicht automatisch ermittelt werden können.

Diese Einstellungen wirken sowohl bei den automatisch generierten Nodes in Gruppe 1, als auch in den Verknüpfungen in Gruppe 2. Bevor die ersten Verknüpfungen erstellt werden, sollten hier zumindest die 'expressionColumns' schon definiert sein.

 

Gruppe 2 (eigene Struktur von Nodes aufbauen)

Verknüpfung erstellen

Die erste Node in der eigenen Struktur entsteht, wenn in Gruppe 1 auf eine automatisch generierte Tabellen-Node mit der rechten Maustaste im Kontextmenü auf 'Verknüpfung erstellen' gehalten und im erscheinenden Untermenü auf ein Item geklickt wird.

Nodes bearbeiten

Auch die eigene Struktur in Gruppe 2 beginnt mit einer Node für den Linked Server ('NTB') und darauf folgend die Datenbank ('NTB16'). Im Bild ist 'dbo.xml' die zuerst verknüpfte Node. Mit der rechten Maustaste im Kontextmenü wurden dann die Nodes '2015' und '2016' hinzu gefügt. Diese dienen nur als Ordner ohne Daten.

Die Tabelle 'dbo.Buchungen' wurde anschließend oben in Gruppe 1 ebenfalls als Verknüpfung hinzu gefügt. Die oben bei 'Verknüpfung erstellen' erscheinenden Untermenüs entsprechen den unten bereits vorhandenen Nodes. So kann die Verknüpfung gleich in der Node '2015' angelegt werden.

Die Nodes können per Drag & Drop verschoben oder kopiert werden.

Mit der rechten Maustaste über den Menüpunkt 'Edit SqlNodes' erscheint das im Bild gezeigte Control. Hier wird der automatisch erzeugte SQL Text mit Parametern angezeigt und kann bearbeitet werden. Die Node kann ReadOnly gesetzt werden und andere Einstellungen sind möglich. Die Daten werden in der Tabelle [Nodes] gespeichert, die bei Inbetriebnahme angelegt wurde.

Wenn einmal ähnliche Nodes vorhanden sind, können sie einschließlich SQL per Drag & Drop kopiert werden und dann kann einfach ein Parameter geändert werden. So entstehen problemlos "Formulare" für die Buchführung im nächsten Jahr. Oft ist das Kopieren und Editieren vorhandener Nodes einfacher, als oben eine neue Verknüpfung zu erstellen.

Die implementierte Datenbindung kann ebenfalls für eigene UserControls mit benutzt werden. Der Programmierer kann sich auf die grafische Gestaltung seiner Oberfläche konzentrieren.

Lutz Elßner ° elssner@interdev.de