Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenbankverbindung mit unixODBC



atlas
26-07-2010, 10:59
Hallo,

ich möchte aus einem C++ Programm heraus auf eine Datenbank (Informix) zugreifen. Dazu verwende ich die API von unixODBC. Die notwendigen Schritte bis zum Datenbank-Connect werden auch alle korrekt ausgeführt (zumindest gibt es keine Fehlermeldung).

Versuche ich dann mit Hilfe der Funktion

retcode = SQLDriverConnect(conHandleNurHier,
NULL,
(unsigned char *)i_datenbankString,
conStrLen,
(unsigned char *)conOutStr,
conOutStrLen,
&conOutStrLenSoll,
SQL_DRIVER_NOPROMPT);

die eigentliche DB-Verbindung aufzubauen, so erhalte ich retcode = -1 (d.i. SQL-Error), ein vermutlich gültiges Handel 142535592(SQL_HANDLE_DBC), einen SQL-Status
sqlState=0002(--?--)
einen Fehlercode: nativeError=0
und eine kryptische Fehlermeldung:
[nxDC[rvrMngrCntoe usrlb'iobc':fl o on

Fehlercode = 0 und Returncode = -1?? Das passt doch wohl kaum zusammen?! Vielleicht weiß einer von euch, was hier schief läuft.

Ach ja, meine Umgebung:

OS: Fedora 13
Eclipse 3.5.2 mit gcc
unixODBC 2.2.14
IBM Informix 3.50.xC7

Für eure Hilfe dankt im Voraus

Guido

undefined
26-07-2010, 20:07
Du bist damit im falschen Forenbereich.
Kennst du das hier schon?
http://www.unixodbc.org/doc/ProgrammerManual/Tutorial/
PS: Code währe auch ganz gut ;)

atlas
27-07-2010, 10:48
Hallo,

sorry, wenn ich in der falschen Gruppe bin: Programmieren > Datenbanken klang mir eigentlich recht plausibel. Welches ist denn dann die richtige Gruppe? Evt. eine Umleitung nach dort?

Danke für den Link, diesen und noch diverse andere kenne ich bereits ;-)

Trotzdem zu meinem Problem: Das beschriebene Verhalten ist keine Frage der Codierung; das alles funktioniert problemlos unter Windows und soll jetzt nach
Linux portiert werden. Die von mir benutzte DSN läßt sich im Übrigen mit isql connecten und manipulieren.

Ich habe jetzt festgestellt, das man im Driver Manager von unixODBC einen ODBC-Trace aktivieren kann und dieser liefert folgendes:

[ODBC][3041][1280213704.023954][SQLDriverConnect.c][688]
Entry:
Connection = 0x87eee10
Window Hdl = (nil)
Str In = [DSN=guido;UID=informix;PWD=********;][length = 36]
Str Out = 0xbfffe448
Str Out Max = 1024
Str Out Ptr = 0xbfffe88e
Completion = 0
UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE ''

[ODBC][3041][1280213706.107248][SQLConnect.c][2263]Can't open cursor lib 'libodbccr' : file not found

Die angemeckerte Library befindet sich aber in dem Verzeichnis, in welchem sich auch alle anderen ODBC.libs befinden. Beim googlen nach dieser Fehlermeldung bin ich auf eine Systemvariable 'LD_LIBRARY_PATH' gestoßen, wobei es die zumindest in meinem Linux nicht gibt. Aber mehr weiß ich leider (noch) nicht.

Irgendwelche Ideen?

Gruß Guido