3. Klasse DB

3.1. Allgemeines

Mit den DB-Methoden kann auf eine relationale Datenbank via ODBC oder RIS (nur Microstation) zugegriffen werden. Die Klasse DB muss nicht mit |LOAD geladen werden.

3.2. Verbindung mit der Datenbank

MethodeDB.CONNECT [s driver,s db,s user,s password] [b status]
BeschreibungDie Methode DB.CONNECT stellt die Verbindung mit einer Datenbank her. Es kann nur eine Datenbank gleichzeitig verbunden werden. Für <driver> sind im Moment die Werte 'MSDB' oder 'ODBC' zulässig. Mit 'MSDB' kann eine unter Microstation konfigurierte Datenbank angesprochen werden. Die weiteren Parameter haben je nach Datenbank eine andere Bedeutung. Unter RIS muss für <db> das RIS-Schema angegeben werden. Mit einer direkten Microstation-Oracle Verbindung muss für <db> der Oracle-Connectstring angegeben werden (inkl. Benutzer und Passwort z.B. ‘scott/tiger@t:alfa:db1’). Mit 'ODBC' kann eine ODBC fähige Datenbank angesprochen werden. Der ODBC Treiber muss unter Windows installiert worden sein. Für den Parameter <db> muss eine ODBC-Quelle angegeben werden, für <user> und <password> ein gültiger Benutzername mit Passwort (falls die Datenbank dies verlangt). Bei einer ODBC Datenbank kann an Stelle der Datenquelle in <db> auch ein ODBC Connect String angegeben werden (s.a. Dokumentation zu "ConfigDataSource" im ODBC Treiber). Für MS-Access sieht der ODBC Connect String z.B. wie folgt aus: DRIVER={Microsoft Access Driver (*.mdb)};DBQ=e:\geoshop.mdb Wird über einen ODBC Connect String mit der ODBC Datenbank verbunden, muss unter Windows keine ODBC Datenquelle vorhanden sein. Dieses Verfahren funktioniert jedoch nicht unbedingt mit jeder ODBC Datenbank. Mindestens für Microsoft Jet Datenbanken (d.h. MS-Access oder MS-Excel) ist das beschriebene Verfahren jedoch möglich. Bemerkung: unter Microstation 95 können ODBC-Datenbanken auch über den 'MSDB' Treiber angesprochen werden
Beispiel
! Verbindung mit der RIS-Datenbank test4
'MSDB' 'test4' '' '' DB.CONNECT [TRUE]
MethodeDB.DISCONNECT [] []
BeschreibungBaut die Verbindung zu der zuletzt mit DB.CONNECT verbundenen Datenbank wieder ab.
Beispiel
DB.DISCONNECT
MethodeDB.IS_CONNECTED [] [b state]
BeschreibungPrüft ob eine Datenbankverbindung besteht.
Beispiel
DB.IS_CONNECTED [TRUE]

3.3. Datenbankzugriff

MethodeDB.OPEN_CURSOR [s selectstmt] [i cursor, b status]
BeschreibungÖffnet einen Datenbankcursor <cursor>. <selectstmt> muss ein gueltiges SQL-Selectstatement sein. Das Ergebnis von DB.OPEN_CURSOR kann mit DB.FETCH_ROW abgefragt werden. Bemerkung: wegen eines Fehlers im RIS-Microstation Treiber kann unter Microstation V5.0 nur ein Cursor gleichzeitig geöffnet werden.
Beispiel
IF 'select * from feature' DB.OPEN_CURSOR THEN
   => VAR.C1
ELSE
   DISPLAY 'unable to open cursor'
END_IF
MethodeDB.FETCH_ROW [i cursor, m map] [b status]
Beschreibungliefert einen Record von <cursor> in <map> zurück. Die Attributnamen werden als Komponentennamen eingetragen.
Beispiel
VAR.C1 &ROW DB.FETCH_ROW [TRUE]
MethodeDB.FETCH_VALUE [s selectstmt] [* value,b status]
BeschreibungLiefert einen Wert in <value> zurück. Es wird automatisch ein Cursor für das Selectstatement geöffnet und geschlossen. Das Selectstatement <selectstmt> muss so formuliert worden sein, dass es nur einen Wert zurückliefert. Falls <status> FALSE ist, wird kein Wert zurückgeliefert.
Beispiel
'select max(mslink) from feature' DB.FETCH_VALUE [1027,TRUE]
MethodeDB.CLOSE_CURSOR [i cursor] []
BeschreibungSchliesst einen Datenbankcursor <cursor>.
Beispiel
VAR.C1 DB.CLOSE_CURSOR

3.4. Datenbankmanipulation

MethodeDB.EXEC_SQL [s sqlstmt][b status]
BeschreibungFührt das SQL-Statement <sqlstatement> aus.
Beispiel
'delete from vermpunkte' DB.EXEC_SQL [TRUE]
MethodeDB.INSERT_ROW [m map][b status]
BeschreibungSpeichert die Map <map> als neuen Datensatz in der Datenbank. In der Map <map> muss in der Komponente TABLE der Name der Datenbanktabelle stehen. Alle weiteren Komponentennamen müssen gültige Attributnamen sein.
Beispiel
MAP ROW
END_MAP
'POINTS' => ROW.TABLE
'123a' => ROW.NUMBER
600000.000 => ROW.X
200000.000 => ROW.Y
&ROW DB.INSERT_ROW [TRUE]

3.5. Weitere

MethodeDB.GET_ODBC_SOURCES [m map][]
BeschreibungLiefert in der Input-Map alle zur Vefügung stehenden ODBC-Sourcen. Eine Datenbankverbindung muss nicht bestehen.
Beispiel
&ODBC_SOURCES DB.GET_ODBC_SOURCES
MethodeDB.ODBC_SOURCE_EXISTS [s source][b status]
BeschreibungTestet ob die ODBC-Datenquelle <source> existiert.
Beispiel
'geoshop' DB.ODBC_SOURCE_EXISTS [TRUE]
MethodeDB.CREATE_ODBC_SOURCE [b system,m map][b status]
BeschreibungErzeugt eine ODBC-Datenquelle. Mit <system> kann angegeben werden, ob eine System Datenquelle (TRUE) oder eine Benutzer Datenquelle (FALSE) eingerichtet werden soll. In <m> wird der ODBC-Treiber (DRIVER), die Datenquelle (DSN) und die Parameter des ODBC-Treibers angegeben. Die Treiberparameter sind der Beschreibung des ODBC-Treibers dokumentiert (z.B. \windows\system32\odbcjet.hlp unter "ConfigDataSource" für MS-Access oder MS-Excel). Hinweis: Die Methode funktioniert nur, wenn der ODBC-Treiber die Funktion "ConfigDataSource" vollständig unterstützt.
Beispiel
MAP ODBC_SOURCE
   DRIVER => 'Microsoft Access Driver (*.mdb)'
   DSN => geoshop ! Name der Datenquelle
   DBQ => e:\geoshop\standard\server\dba\geoshop.mdb
END_MAP
TRUE &ODBC_SOURCE DB.CREATE_ODBC_SOURCE
MethodeDB.DELETE_ODBC_SOURCE [b system,s source] [b status]
BeschreibungLöscht die angegebene ODBC-Datenquelle <source>. Mit <system> wird angegeben ob es sich bei der Datenquelle um eine System-Datenquelle (TRUE) oder um eine Benutzer-Datenquelle (FALSE) handelt. Hinweis: Die Methode funktioniert nur, wenn der ODBC-Treiber die Funktion "ConfigDataSource" vollständig unterstützt.
Beispiel
TRUE 'geoshop' DB.DELETE_ODBC_SOURCE
MethodeDB.GET_PRODUCT [][s Version, s Produkt]
BeschreibungGibt das Produkt und die Version der Datenbank zurück. Eine Datenbankverbindung muss mit DB.CONNECT erstellt sein. Funktioniert zur Zeit nur mit dem ODBC-Treiber.
Beispiel
DB.GET_PRODUKT [09.00.0111,Oracle]
MethodeDB.GET_INFO [m map] []
Beschreibung

Liefert in der Input-Map Datenbankinformationen. Eine Datenbankverbindung muss mit DB.CONNECT erstellt sein. Funktioniert zur Zeit nur mit dem ODBC-Treiber. Der Aufbau der Informationen in der Input-Map wird wie folgt geliefert:

MAP DB_INFO
   PRODUKT => <Produkt>
   VERSION => <Version>
   TABLES => MAP 
             :
             <Tablename> => MAP
                            : 
                            COLUMNS => MAP
                                       <Colname> => MAP
                                                       TYPENAME
                                                       DATATYPE
                                                       LENGTH
                                                       PRECISION
                                                       SCALE
                                                       RADIX
                                                       REMARK
                                       :            END_MAP
                                       END_MAP       
             :              END_MAP       
             END_MAP       
END_MAP

Beispiel
&DB_INFO DB.GET_INFO
MethodeDB.SET_CASE_SENSITIVE [b sensitive][]
BeschreibungDefiniert ob Tabellen- und Attributnamen Case-Sensitive - Klein- und Grossschreibung- (<sensitive> = TRUE)verarbeitet werden sollen oder nicht (<sensitive> = FALSE. Per Default ist die Verarbeitung nicht Case-sensitive.
Beispiel
TRUE DB.SET_CASE_SENSITIVE
MethodeDB.SET_SILENT [b silent][]
BeschreibungSollen Datenbankmeldungen unterdrückt (<silent> =TRUE) oder nicht unterdrückt (<silent> =FALSE) werden. Per Default werden die Meldungen nicht unterdrückt.
Beispiel
TRUE DB.SET_SILENT
MethodeDB.COMMIT [][]
BeschreibungFührt ein sql-commit auf der Datebank aus, falls die Datenbank diesen Befehl verarbeiten kann.
Beispiel
DB.COMMIT
MethodeDB.ROLLBACK [][]
BeschreibungFührt ein sql-rollback auf der Datebank aus, falls die Datenbank diesen Befehl vearbeiten kann.
Beispiel
DB.ROLLBACK