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 

Die ODBC Datenbankfunktionen

Siehe auch  OdbcDatabaseActivateAnsiToUTF8, OdbcDatabaseExport, OdbcDatabaseClose, OdbcDatabaseExecute, OdbcDatabaseQuery, OdbcDatabaseIsOpen, OdbcDatabaseOpen, OdbcGetLastError, OdbcDatabaseMySqlOpen, OdbcDatabaseMySqlCreate