Felix Riesterer: hmm - wohl nur die halbe Miete

Beitrag lesen

Lieber dedlfix,

ich kann zwar die Funktion odbc_connect() aufrufen, aber ich kann nicht zur *.mdb-Datei verbinden. Zuerst kam die Fehlermeldung, dass kein Default-Treiber definiert sei, und dass die Quelldatei nicht gefunden würde.

Mit (hoffentlich) passendem Editieren der Dateien odbc.ini und odbcinst.ini sieht das nun gottseidank besser(?) aus. Aber irgendwie beschleicht mich das Gefühl, dass ich etwas falsch mache. Welche Bibliothek soll ich denn als Treiber angeben? Die Vielfalt der möglichen Dateien in /usr/lib ist verwirrend. Offensichtlich hat auch niemand je ein Interesse daran, zu dokumentieren, wie es bei ihm (oder ihr) je erfolgreich geklappt hat.

Jedenfalls habe ich in "/usr/lib/libodbc.so.1" einen dynamischen Link gefunden, den ich mit identischem Ergebnis nutzen kann, wie den ebenfalls dynamischen Link "/usr/lib/libmdb.so.1". In der nachfolgenden ini-Datei ist letzterer referenziert. Ich vermute mal, dass das Referenzieren von z.B. "/usr/lib/libmdb.so.1.0.0" nicht sinnvoll ist, falls die Bibliothek einmal durch eine aktualisiertere Version ersetzt werden soll. Stimmt das? Ist das der Grund für den dynamischen Link?

---odbcinst.ini---
[ODBC]
Trace = Yes
TraceFile = /tmp/sql.log

[Microsoft Access Driver (*.mdb)]
Description     = "Microsoft Access Driver (*.mdb)"
Driver          = /usr/lib/libmdb.so.1
Setup           =
FileUsage       = 1
CPTimeout       =
CPReuse         =
UsageCount      = 1
Trace           = Yes
TraceFile       = /tmp/sql.log
---/odbcinst.ini---

---odbc.ini---
[nwind.mdb]
Description = "Northwind Example Database"
Driver = "Microsoft Access Driver (*.mdb)"
Database = /home/[...]/nwind.mdb
Servername = localhost
Trace: Yes
TraceFile: mdbtools.log
Username =
Password =
port = 5432
---/odbc.ini---

Wenn ich nun zur Datenbank verbinden möchte, erhalte ich unter Verwendung des Codes
    odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=nwind.mdb", "", "");
den Fehler
    "Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Driver's
    SQLAllocHandle on SQL_HANDLE_HENV failed,
    SQL state IM004 in SQLConnect in /home/[...]/test.php on line 8".

Für mich liest sich das, als ob der Treiber schon scheitert, bevor er an die DB "anklopft". Oder was ist hier falsch?

Zuerst hatte ich mich gefragt, wofür ich denn php5-odbc installieren sollte, wenn ich mdbtools nutzen möchte. Aber anscheinend ist mit der Referenz auf libmdb.so.1 der mdbtools-Treiber tatsächlich in Gebrauch. Warum habe ich aber mit der Verwendung von libodbc.so.1 denselben Effekt? War mdbtools unnötig?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)