OdbcDatabaseOpenEx
value OdbcDatabaseOpenEx ( string strConnectString, value BYREF dxDatabase, value dwOptions = 0 );
Rückgabewert
Null wenn die Verbindung erfolgreich hergestellt wurde, ansonsten eine Fehlernummer. Mit OdbcGetLastError kann dann eine genaue Fehlerbeschreibung ausgelesen werden.
Parameter
strConnectString
Die ODBC-Verbindungsanweisung. In einem typischen Verbindungsstring steht neben dem Namen der Datenquelle (DSN) auch ein entsprechender Benutzername (UID) mit Kennwort (PWD). So ist z.B. "DSN=meine_datenbank;UID=admin;PWN=geheim;" eine korrekte Verbindungsanweisung. Ist der strConnectString leer, so wird der ODBC-Einrichtungsdialog des Betriebssystems automatisch eingeblendet (wenn nicht ausdrücklich mit dwOptions = ODBC_noOdbcDialog unterdrückt).
dxDatabase
Wurde die Datenquelle erfolgreich geöffnet, so wird dxDatabase mit einem Verweis auf die geöffnete Datenquelle geladen. Nachfolgenden OdbcDatabase-Funktionsaufrufen, die sich auf diese Datenquelle beziehen, muss dieses Datenbankobjekt übergeben werden.
dwOptions
Eine Bitmaske, die sich aus den nachfolgenden Werten zusammensetzen kann. Standardmässig wird Null übergeben, d.h. die Datenbank wird beschreibbar geöffnet, fehlen im strConnectString wichtige Parameter, so wird der ODBC-Einrichtungsdialog des Betriebssystems geöffnet.
ODBC_openReadOnly |
Öffnet die Datenbank schreibgeschützt. |
ODBC_noOdbcDialog |
Zeige auf keinen Fall den ODBC-Einrichtungsdialog des Betriebssystems (auch wenn im strConnectString wichtige Parameter fehlen). |
ODBC_forceOdbcDialog |
Den ODBC-Einrichtungsdialog des Betriebssystems öffnen. |
Bemerkung
Stellt eine Verbindung zu einer Datenbank (oder Datenquelle) her, die per ODBC erreichbar ist.
Wird die Datenquelle nicht mehr benötigt, so ist diese mit OdbcDatabaseClose zu schließen. Victory schließt alle offenen Datenbank automatisch, sobald die Anwendung gestoppt bzw. beendet wird. Beachten Sie, dass die Funktion OdbcDatabaseOpenEx das Zyklusprogramm blockiert, solange diese Funktion den ODBC-Einrichtungsdialog geöffnet darstellt.
Allgemeine Erläuterungen zur ODBC-Anbindung siehe hier.
Beispiele
DSN Zwei typische Beispiel für das Öffnen einer Datenbank per DSN (der Datenquelle).
//DSN ist mit Datenbanknamen, Benutzernamen und Kennwort im Betriebssystem registriert. Result = OdbcDatabaseOpenEx ("DSN=meine_dankbank;", dxDatabase, ODBC_noOdbcDialog);
//DSN ist mit Datenbankname im Betriebssystem registriert, aber ohne Benutzername und Kennwort. Result = OdbcDatabaseOpenEx ("DSN=meine_dankbank;UID=admin;PWD=geheim;", dxDatabase, ODBC_noOdbcDialog);
Microsoft Access Nachfolgend ein Beispiel, wie eine Access-Datenbank ohne einer DSN geöffnet bzw. als Datei erzeugt und angelegt werden kann. Hierbei ist zu beachten, dass der angegebene ODBC-Treiber auf dem Zielsystem auch verfügbar ist. Wird im Datenbanknamen kein Pfad angegeben, so wird die Datenbankdatei im Datenbankordner des Projekts anlegt. Existiert der angegebene Pfad der Datenbankdatei nicht, so wird dieser automatisch angelegt.
Result = OdbcDatabaseOpenEx ("Driver={Microsoft Access-Treiber (*.mdb)};Dbq=MyDatabase.mdb",dxDatabase, ODBC_noOdbcDialog);
Result = OdbcDatabaseOpenEx ("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\ProjektXY\\MyDatabase.mdb",dxDatabase, ODBC_noOdbcDialog);
Microsoft Access 2007 Nachfolgend ein Beispiel, wie eine Access 2007-Datenbank ohne einer DSN geöffnet bzw. als Datei erzeugt und angelegt werden kann. Hierbei ist zu beachten, dass der angegebene ODBC-Treiber auf dem Zielsystem auch verfügbar ist. Wird im Datenbanknamen kein Pfad angegeben, so wird die Datenbankdatei im Datenbankordner des Projekts anlegt. Existiert der angegebene Pfad der Datenbankdatei nicht, so wird dieser automatisch angelegt.
Result = OdbcDatabaseOpenEx ("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=MyDatabase.accdb",dxDatabase, ODBC_noOdbcDialog);
SQLite Nachfolgend ein Beispiel, wie eine SQLite-Datenbank ohne einer DSN geöffnet bzw. als Datei erzeugt und angelegt werden kann. Hierbei ist zu beachten, dass der angegebene ODBC-Treiber auf dem Zielsystem auch verfügbar ist. Wird im Datenbanknamen kein Pfad angegeben, so wird die Datenbankdatei im Datenbankordner des Projekts anlegt. Existiert der angegebene Pfad der Datenbankdatei nicht, so wird dieser automatisch angelegt.
Result = OdbcDatabaseOpenEx ("DRIVER={SQLite3 ODBC Driver};DATABASE=c:\test\MyDatabase.sqlite", dxDatabase, ODBC_noOdbcDialog);
MySQL/MariaDB
Nachfolgend ein Beispiel,
wie eine MySQL-Datenbank ohne
einer DSN geöffnet bzw. angelegt werden kann.
Diese Schritte werden von der
CPL-Funktion OdbcDatabaseMySqlOpen
intern durch geführt (incl. Auswahl eines geeigneten ODBC-Treibers).
string strLastError; string strConnect, strCreate, strSQL; strConnect = "DRIVER={MySQL ODBC 5.1 Driver};Server=localhost;UID=admin;PWD=geheim;DATABASE=DemoDatenbank"; if (OdbcDatabaseOpenEx (strConnect,dxDatabase, ODBC_noOdbcDialog)) //Existiert diese Datenbank? //Datenbank existiert nicht. Um die fehlende Datenbank per SQL-Kommando anzulegen, //wird eine Verbindung zum MySQL-Server benötigt. //Trick: Da MySQL/MariaDB immer die Systemdatenbank 'mysql' besitzt, wird diese geöffnet. // Dort wird dann die fehlende Datenbank mit 'CREATE DATABASE' angelegt werden. strCreate = "DRIVER={MySQL ODBC 5.1 Driver};Server=localhost;UID=admin;PWD=geheim;DATABASE=mysql;"; if (OdbcDatabaseOpenEx (strCreate, dxDatabase, ODBC_noOdbcDialog)) return (OdbcGetLastError (strLastError)); end //Die fehlende Datenbank nun anlegen. strSQL = "create database if not exists DemoDatenbank"; if (OdbcDatabaseExecute (dxDatabase, strSQL)) OdbcDatabaseClose (dxDatabase); return (OdbcGetLastError (strLastError)); end //Die Verbindung zur Systemdatenbank 'mysql' lösen. OdbcDatabaseClose (dxDatabase); //Erneuter Verbindungsaufbau zur nun existierenden Datenbank. if (OdbcDatabaseOpenEx (strConnect,dxDatabase, ODBC_noOdbcDialog)) return (OdbcGetLastError (strLastError)); end end
Siehe auch OdbcDatabaseActivateAnsiToUTF8, OdbcDatabaseExport, OdbcDatabaseClose, OdbcDatabaseExecute, OdbcDatabaseQuery, OdbcDatabaseIsOpen, OdbcDatabaseOpen, OdbcGetLastError, OdbcDatabaseMySqlOpen, OdbcDatabaseMySqlCreate