CIB merge technischer Leitfaden
4. Datenversorgung
4.3. ODBC und SQL
ODBC Versionen
SQL
SQL-Abfragen in der Multisteuerdatei
Dynamische Aliasbelegung
SQL-Abfragen im Feld “REF”
Allgemein
Über die im Programmverzeichnis zusätzlich hinterlegte CIB sql DLL sind SQL Zugriffe direkt aus CIB merge möglich. Das Ergebnis einer Abfrage (eine Tabelle) wird wie eine CSV-Steuerdatei verwendet. Anstatt eine Steuerdatei in der Multisteuerdatei zu bestimmen, wird dort eine Abfrage in SQL gestellt. Es ist auch möglich, bestehenden oder neuen Steuerdatei-Aliasen eine Steuerdatei oder SQL-Abfrage dynamisch zuzuweisen. Die dynamische Aliasbelegung ist auch ohne jegliche Steuerdatei oder Multisteuerdatei erlaubt. Weiterhin ist es möglich von einer Ergebnistabelle einer SQL-Abfrage den Wert der ersten Spalte und ersten Zeile sofort in den Rohtext einsetzen (ohne den Umweg über einen Alias, dem Feld “Nächster” und Variablen).
ODBC Versionen
Die CIB sql Dll verwendet intern die ODBC API Conformance Ebenen Core, Level 1 (z.B.: long data) und Level 2 (z.B.: scrollable Cursor). Die SQL Conformance Ebene Extended SQL Grammar wird für Datumsfelder benötigt. Vgl. hierzu ODBC SDK 2.10 Programmers Reference.
Es ist also darauf zu achten, dass die verwendeten ODBC-Versionen und Treiberversionen die entsprechenden Ebenen unterstützen.
Getestet sind die CIB sql-Funktionalitäten mit der ODBC 3.51 unter Windows NT 4.0. Hierbei kamen die Microsoft Jet Odbc-Treiber für MS Access zum Einsatz, die bei den entprechenden ODBC-Versionen mitgeliefert werden.
Diese Version unterstützt selbstverständlich auch joins (select auf mehrere Tabellen).SQL
SQL Zugriffe sollen direkt aus CIB merge
möglich sein. Das Ergebnis einer Abfrage (eine Tabelle) soll wie eine Steuerdatei
verwendet werden. Anstatt eine Steuerdatei in der Multisteuerdatei zu
bestimmen, wird eine Abfrage in SQL gestellt. Eine zweite Erweiterung soll
dynamisch bestehenden oder neuen Steuerdatei-Aliasen eine Steuerdatei oder
SQL-Abfrage zuweisen können. Eine dritte Erweiterung soll von einer
Ergebnistabelle einer SQL-Abfrage den Wert der ersten Spalte und ersten Zeile
sofort in den Rohtext einsetzen (ohne den Umweg über einen Alias, dem Feld
“Nächster” und Variablen). Eine vierte Erweiterung soll die dynamische
Aliasbelegung auch ohne Multisteuerdatei und eventuell sogar ohne normale
Steuerdatei erlauben.
SQL-Abfragen in der Multisteuerdatei
Der Eintrag eines Feldes in der Multisteuerdatei sieht üblicherweise so aus: “[;]Steuerdatei” oder “Kopfsatzdatei;Datensatzdatei”. Für SQL-Zugriffe gibt es die Möglichkeit der “SQL:Datenbank;Abfrage”.
Die neue Funktion ist nur mit einer DLL für SQL-Abfragen verfügbar.
Die Abfrage wird an die Datenbank geschickt. Weitere Zugriffe erfolgen mit den bekannten Befehlen für Steuerdateien mit unveränderter Bedeutung. Der einzige Unterschied ist die Datenquelle: Die Tabelle steht nicht in der Steuerdatei als Menge von Datensätzen, sondern in einer Datenbank. (Die Datenbank muss in den Systemeinstellungen für ODBC als Benutzer- oder Systemdatenquelle eingerichtet sein.)
Das folgende Beispiel stellt zwei Steuerdateien mit den Aliasen NormalDat und SqlDat zur Verfügung. Die Steuerdatei SqlDat enthält dabei zwei Spalten aus der Tabelle Tarife. Die Datenbank, die die Tabelle enthält wird über ODBC mit dem Namen ODBC-Tarifdatenbank zur Verfügung gestellt.
Multisteuerdatei:
NormalDat;SqlDat
“normal.csv”; “SQL:ODBC-Tarifdatenbank;SELECT TarifNr, TarifName FROM Tarife
ORDER BY TarifNr”
Dynamische Aliasbelegung
Der Befehl “Nächster” liest üblicherweise die nächste Datenzeile oder stellt die Leseposition vor den Anfang der Datenquelle. Möglich ist aber auch die Neudefinition oder Neuzuweisung eines Alias mit “NÄCHSTER DEF:Alias;Datenquelle”.
Der Alias wird neu bestimmt, wenn er noch nicht existiert. Falls der Alias bereits belegt ist, wird die damit verbundene Datenquelle geschlossen und der Alias neu belegt.
Die Datenquelle kann eine Steuerdatei oder eine SQL-Abfrage sein. Der Wert hinter dem Semikolon muss also wie ein Eintrag in der Multisteuerdatei aussehen.
Diese Funktion steht auch zur Verfügung, ohne dass in den an Merge übergebenen Parametern jegliche Steuerdatei oder Multisteuerdatei angegeben wurde.
Das Beispiel definiert dynamisch im Rohtext den Alias SqlDyn als die gesamte Tarife-Tabelle. Anschließend werden daraus bestimmte Felder tabellarisch aufgelistet.
Rohtext:
{ NÄCHSTER “DEF:SqlDyn;SQL:ODBC-Tarifdatenbank;SELECT * FROM Tarife ORDER BY TarifNr” }
Tarifnummer |
Name |
{ WENN { DATENSATZ ?SqlDyn } = 1 “
{ REF TarifNr \* Zeichenformat } |
{ REF TarifName \*Zeichenformat } |
{ NÄCHSTER SqlDyn }” \*solange }
Einschränkung: Zunächst soll diese Funktion nur zur Verfügung stehen, wenn eine Multisteuerdatei angegeben wurde. Eine spätere Erweiterung auf den Fall ohne jegliche Steuerdatei oder zumindest ohne Multisteuerdatei ist angestrebt.SQL-Abfragen im Feld “REF”
Der Befehl “Nächster” liest üblicherweise die nächste Datenzeile oder stellt die Leseposition vor den Anfang der Datenquelle. Möglich ist aber auch die Neudefinition oder Neuzuweisung eines Alias mit “NÄCHSTER DEF:Alias;Datenquelle”.
Der Alias wird neu bestimmt, wenn er noch nicht existiert. Falls der Alias bereits belegt ist, wird die damit verbundene Datenquelle geschlossen und der Alias neu belegt.
Die Datenquelle kann eine Steuerdatei oder eine SQL-Abfrage sein. Der Wert hinter dem Semikolon muss also wie ein Eintrag in der Multisteuerdatei aussehen.
Diese Funktion steht auch zur Verfügung, ohne dass in den an Merge übergebenen Parametern jegliche Steuerdatei oder Multisteuerdatei angegeben wurde.
Das Beispiel definiert dynamisch im Rohtext den Alias SqlDyn als die gesamte Tarife-Tabelle. Anschließend werden daraus bestimmte Felder tabellarisch aufgelistet.
Rohtext:
{ NÄCHSTER “DEF:SqlDyn;SQL:ODBC-Tarifdatenbank;SELECT * FROM Tarife ORDER BY TarifNr” }
Tarifnummer |
Name |
{ WENN { DATENSATZ ?SqlDyn } = 1 “
{ REF TarifNr \* Zeichenformat } |
{ REF TarifName \*Zeichenformat } |
{ NÄCHSTER SqlDyn }” \*solange }
Einschränkung: Zunächst soll diese Funktion nur zur Verfügung stehen, wenn eine Multisteuerdatei angegeben wurde. Eine spätere Erweiterung auf den Fall ohne jegliche Steuerdatei oder zumindest ohne Multisteuerdatei ist angestrebt.