Zum Hauptinhalt springen

Befehle für ODBC-Verbindungen

Befehle für ODBC-Verbindungen Liste der Befehle zur Verbindung mit anderen Datenbanken über ODBC

Mit den hier beschriebenen Anweisungen und Objekten kann aus CONZEPT 16 heraus auf eine beliebige ODBC-Datenquelle zugegriffen werden. Die Beschreibung des Zugriffs von beliebigen Applikationen auf eine CONZEPT 16-Datenbank als Datenquelle befindet sich im Abschnitt Die ODBC-Schnittstelle - Der ODBC-Treiber . In der Beispieldatenbank "Codelibrary" befindet sich ein Beispiel "ODBC" mit dem der Zugriff auf eine beliebige Datenquelle ermöglicht wird.

Objekte der ODBC-Schnittstelle

Die ODBC-Schnittstelle wird mit der Anweisung OdbcOpen () initialisiert. Die Anweisung gibt einen Deskriptor auf das OdbcApi -Objekt zurück. Das Objekt wird beim Verbinden mit einer Datenquelle benötigt. Ausgehend von dem Objekt kann eine Verbindung zu einer Datenquelle mit der Anweisung OdbcConnect () oder OdbcConnectDriver () hergestellt werden. Es ist möglich mehrere Verbindungen zu unterschiedlichen Datenquellen herzustellen.

@A+
@C+

main

local
{
tOdbcApi : handle;
tOdbcCon : handle;
tOdbcStmt : handle;
tCustomerId : int;
tCustomerName : alpha(50);
}

{
tOdbcApi # OdbcOpen();
tOdbcCon # tOdbcApi->OdbcConnect('Order', 'start', '');
...
}

Zugriff auf Daten in einer Tabelle

Nachdem eine Verbindung zu einer Datenquelle hergestellt ist, können Daten aus der Quelle gelesen werden. Im einfachsten Fall wird ein ODBC-Statement zur Datenquelle geschickt (OdbcExecuteDirect ()) und das Resultat ausgewertet:

  tOdbcStmt # tOdbcCon->OdbcExecuteDirect('SELECT * FROM KND_D_Kunden');
while (tOdbcStmt->OdbcFetch() = _ErrOk)
{
tOdbcStmt->OdbcClmData(1, tCustomerId);
tOdbcStmt->OdbcClmData(5, tCustomerName);
...
}
tOdbcStmt->OdbcClose();

In diesem Beispiel werden alle Spalten aller Datensätze der Tabelle "KND_D_Kunden" gelesen. Mit der Anweisung OdbcFetch () wird auf eine Zeile des Ergebnisses positioniert. In der Schleife wird mit OdbcClmData () der Inhalt der Spalten einzelnen Variablen zugeordnet. Wird das OdbcStm -Objekt nicht mehr benötigt, wird es mit OdbcClose () entfernt.

Bei der Abfrage der Daten werden die Werte in den Spalten automatisch in den Datentyp der übergebenen Variablen gewandelt. Ist eine Wandlung nicht möglich, wird die Variable auf 0 gesetzt. Der Typ der Spalte kann mit der Anweisung OdbcClmInfo () ermittelt werden. Die Anzahl der vom ODBC-Statement zurückgegebenen Spalten befindet sich in der Eigenschaft OdbcResCountClm.

Schließen der ODBC-Verbindung und Entfernen der Objekte

Das Schließen von Objekten der ODBC-Schnittstelle erfolgt mit der Anweisung OdbcClose ().

  ...
tOdbcCon->OdbcClose();
tOdbcApi->OdbcClose();
}

Ermitteln von Fehlerwerten und -texten

In dem bisher vorgestellten Beispiel wurde aus Gründen der Übersichtlichkeit auf eine Fehlerbehandlung verzichtet. Fehler werden entweder von den CONZEPT 16-Anweisungen zurückgegeben oder von dem verbundenen ODBC-Treiber erzeugt. Tritt ein Fehler beim ODBC-Treiber auf, liefert die CONZEPT 16-Anweisung _ErrOdbcError zurück. Der Fehler des ODBC-Treibers kann über die Eigenschaften OdbcErrSqlMessage und OdbcErrSqlNativeCode des übergeordneten Objekts ermittelt werden.

  ...
tOdbcStmt # tOdbcCon->OdbcExecuteDirect('SELECT * FROM KND_D_Kunden');
if (tOdbcStmt <= 0)
{
WinDialogBox(0, 'Fehler beim ODBC-Zugriff', tOdbcCon->spOdbcErrSqlMessage, _WinIcoError, _WinDialogOK, 0);
tOdbcCon->OdbcClose();
tOdbcApi->OdbcClose();
return;
}
...

Ermitteln von Informationen über die Datenquellen und aus den Datenquellen

Nach der Initialisierung der ODBC-Schnittstelle, können die definierten ODBC-Datenquellen mit der Anweisung OdbcDataSources () ermittelt werden. Die Anweisung gibt eine Cte-Liste mit den Datenquellen zurück. In der Eigenschaft Name der CteItem-Objekte befinden sich die Namen der Datenquellen.

Ist eine Verbíndung zu einer Datenquelle hergestellt, stehen über das OdbcCon -Objekt bereits einige Informationen zur Verfügung (siehe Eigenschaften eines OdbcCon-Objekts ). Sollen die Tabellen und deren Spalten ermittelt werden, müssen die Anweisungen OdbcCatalogTbl () und OdbcCatalogClm () verwendet werden.

@A+
@C+

main

local
{
tOdbcApi : handle;
tOdbcCon : handle;
tOdbcTbl : handle;
tOdbcClm : handle;
tTblName : alpha(80);
tClmName : alpha(80);
}

{
tOdbcApi # OdbcOpen();
tOdbcCon # tOdbcApi->OdbcConnect('Order', 'start', '');

tOdbcTbl # tOdbcCon->OdbcCatalogTbl();
while (tOdbcTbl->OdbcFetch() = _ErrOk)
{
tTblName # tOdbcTbl->spOdbcTblName;
tOdbcClm # tOdbcCon->OdbcCatalogClm(tTblName);
while (tOdbcClm->OdbcFetch() = _ErrOk)
{
tClmName # tOdbcClm->spOdbcClmName;
...
}
tOdbcClm->OdbcClose();
}

tOdbcTbl->OdbcClose();

tOdbcCon->OdbcClose();
tOdbcApi->OdbcClose();

return;
}

Diese Funktion ermittelt für alle Tabellen die zugehörigen Spaltennamen. Über das entsprechende Spalten-Objekt kann ebenfalls der Datentyp und weitere Informationen der Spalte ermittelt werden (siehe Eigenschaften eines OdbcClm-Objekts ).

Befehle für ODBC-Verbindungen

Befehle für die Startprozedur