# Fehlermeldung bei ODBC connect auf MS Access



## steyrblade (5. Juli 2006)

Hallo 
Ich habe mir jetzt schon einige Foreneinträge durchgelesen aber bisher noch keine brauchbare Hilfe gefunden. Ich hoffe ihr könnt mir weiterhelfen.

Ich versuche Daten von einer MS Access DB in eine Oracle DB zu schreiben. 
Aber schon der ODBC connect funktionieriert nicht.
Ich bekomme bei dem Code
<?php
$odbc =odbc_connect ('MS_ACCESS', '', '') or die ('Could not connect to ODBC Database');
?>

folgende Fehlermeldung:
Warning: SQL error: [unixODBC][Driver Manager]Data source name not found, and no default driver specified, SQL state IM002 in SQLConnect in /var/www/html/xx/MS_ACCESS/x.php on line 2
Could not connect to ODBC Database


Ich habe natürlich zuvor einen ODBC Treiber in System DNS definiert (MS_ACCESS) und dort die Access Datei eingebunden.

*Mein System:* 
WINXP ServicePack 1

*Server System:* 
Linux
PHP Version 4.3.9
Apache/2.0.46
odbc einstellungen:
ODBC Support	enabled
Active Persistent Links 	0
Active Links 	0
ODBC library 	unixODBC
ODBC_INCLUDE 	-I/usr/local/include
ODBC_LFLAGS 	-L/usr/local/lib
ODBC_LIBS 	-lodbc
Directive	Local Value	Master Value
odbc.allow_persistent	On	On
odbc.check_persistent	On	On
odbc.default_db	no value	no value
odbc.default_pw	no value	no value
odbc.default_user	no value	no value
odbc.defaultbinmode	return as is	return as is
odbc.defaultlrl	return up to 4096 bytes	return up to 4096 bytes
odbc.max_links	Unlimited	Unlimited
odbc.max_persistent	Unlimited	Unlimited

Ein allgemeines Verbindungsproblem kann es nicht sein, denn eine Oracle Verbindung  funktioniert wunderbar.

*Muss man da möglicherweise noch was in der PHP.ini setzen oder einfügen?*


----------



## Ritchie_Fomm (5. Juli 2006)

Hallo, 

hast du die OraDB schon in dein System Treibertechnisch eingebunden, bzw. ist die DB schon Systemtechnisch erfasst( ist der name der DB MS_ACCESS) 

Grüße
R.


----------



## Movera (5. Juli 2006)

Dein Posting ist widersprüchlich:

Du willst in eine OraDB schreiben, hast aber den ODBC Treiber für Access installiert. Wenn du aus Access in die OraDB schreiben willst brauchst du wohl den ODBC-Treiber für Oracle.


----------



## Ritchie_Fomm (5. Juli 2006)

... uups sorry streich einen Teil aus meiner Frage, hatte leider den Teil unten übersehen, 
mit welchen Treiberverssion arbeitest du denn? ...ist die DB in der TNSNames usw.drin ist sql.net vernüftig angelegt? Ein Verbindungsproblem kann mehrere Ursachen haben. Worüber stellst du denn den Connect testweise zur OraDB her?

Grüße
R.


----------



## steyrblade (5. Juli 2006)

Hier der Connect code für Orcale den ich verwende:

putenv("ORACLE_HOME=/usr/user/oracle/client8");
  $ora_usr="xx";
  $ora_pwd="xx";		
  $ora_tns="xx";

  $connection = OCILogon("$ora_usr","$ora_pwd","$ora_tns");
   if ($connection==false){
   echo OCIError($connection)."<br>";
   exit(); 
  }


ODBC Treiber Version: 4.00.6304


=>
_ist die DB in der TNSNames usw.drin ist sql.net vernüftig angelegt._
Ich muss zugeben da kenn ich micht nicht besonders aus. Kannst du mir da nochmal weiterhelfen.

Eine enviroment variable kann ich ja nicht setzen oder da die DB ja local bei mir abliegt?


----------



## Ritchie_Fomm (5. Juli 2006)

Ist die DB in der TNSNames.ora angelegt?

Grüße
R.


----------



## Movera (5. Juli 2006)

Ich verstehe immer weniger. Wo willst du connecten? Lt. deinem 1. Posting versuchst du einen obdc-connect bei Access, im 2. Posting geht es um einen connect bei Oracle. Funktionieren beide nicht?

Connectversuche machst du am besten mit SQLPlus. Das Programm dürfte bei dir plus80.exe heissen. Wenn der Connect nicht gelingt bekommst du dort die besten Fehlermeldungen. Um mit SQLPlus bei Access zu connecten mußt du als Host-Zeichenfolge odbc:Name_der_Datenquelle eingeben.


----------



## Ritchie_Fomm (5. Juli 2006)

wobei du aber auch den Oracle Odbc Test verwenden kannst müsste eigentlich bei der Ora8 Basis mit dabei gewesen sein

Grüße
R.


----------



## steyrblade (5. Juli 2006)

@ Movera
Less doch bitte erstmal alles durch. 

_Worüber stellst du denn den Connect testweise zur OraDB her_ => hat Ritchie_Fomm gefragt.
Darauf hin hatte ich ihm den code für Oracle geschickt. Aber um Orcale geht es gar nicht
Das funktioniert ja wunderbar. SQL PLUS usw. geht ja alles aber Oracle is ja grad wurst.

*Ich bekomme den Connect zur Access Datenbank nicht hin.*
muss ich dafür was in der TNSNames.ora anlegen. gibt es vllt Einstellungen die ich in der php.ini setzen oder einfügen muss.
Und was war mit sql.net. Was ist das und was müsste ich da Einstellen.


----------



## Movera (5. Juli 2006)

ok, dein connect zur oradb .

was willst du genau machen? dein programm connectet bei oracle und dann willst du daten aus access lesen und in die oradb schreiben? d.h. nicht der datenbankserver, sondern deine anwendung holt die daten aus access?


----------



## steyrblade (6. Juli 2006)

Wir haben ein Messgerät, welches seine Daten in eine Locale Access Datenbank schreibt. 
Diese Daten möchte ich dann immer manuell über eine PHP Anwendung in eine zentrale Oracle Datenbank übertragen. 

Der Connect auf die Access DB funktioniert nicht (siehe Fehlermeldung 1. Post).
Es scheint ja mit dem Webserver zusammen zu hängen das ich diese Fehlermeldung bekomme.

_Muss ich dafür was in der TNSNames.ora anlegen. gibt es vllt Einstellungen die ich in der php.ini setzen oder einfügen muss.
Und was war mit sql.net. Was ist das und was müsste ich da Einstellen._

Könntet ihr mir dazu mal ne kurze Auskunft geben. 

Grüße ausm Schwobeländle


----------



## Movera (6. Juli 2006)

Also mach bloß keine Änderungen an der Tnsnames.ora, die ist nur für den Connect zur OraDB zuständig und der funktioniert ja.

Die Fehlermeldung in deinem 1. Post sagt aus, das die ODBC-Verbindung nicht gefunden wird. Du kannst die Verbindung ja mal mit einem andren Programm, z.B. Excel oder sogar Access testen. Ich habe schon mal erlebt, das ich die Verbindung als Benutzer-DSN anlegen musste.


----------



## steyrblade (10. Juli 2006)

Mit Excel hab ich es probiert funktioniert einwandfrei. Wobei man dort nach der ODBC Treiberauswahl den Pfad zur Access Datenbank nochmal manuell angeben muss, obwohl der  Pfad in den ODBC Einstellungen ja schon hinterlegt ist

Aber lässt *[unixODBC][Driver Manager]Data source name not found* nicht darauf schließen das es was mit dem Server zu tun haben muss. Muss der ODBC Treiber auch auf dem Webserver installiert sein? Da die Fehlermeldung [unixODBC] enthält.

*Data source name not found:*
Die Access Datenbank darf doch local abliegen oder muss die auf dem Apache Space liegen, was für mich keinen Sinn machen würde?


----------



## Movera (10. Juli 2006)

Es kommt darauf an, wer den PHP-Code ausführt. Wenn das der Apache-Server ist, arbeitet er den Code ab und macht auch den Connect auf die Datenbanken. Also muß bei ihm (dem Apache-Server) die ODBC-Verbindung konfiguriert werden. Du bekommst nur das Ergebnis zurück.

Die Datenbank darf irgendwo im Netz liegen, hauptsache der ODBC-Treiber ist richtig konfiguriert.


----------



## steyrblade (11. Juli 2006)

Danke

Das ist dann wohl das Problem.
Dann muss ich mal mit unserer IT nen ODBC Treiber für UNIX suchen.
Oder hättest du da nen link für einen freeware ODBC Treiber(UNXI) für mich.


----------



## steyrblade (19. Juli 2006)

Ich hab da noch ein offenes Problem:

Der Connect auf die MS-Acces DB  funktioniert jetzt und die ersten Daten kommen an.

Mein Code:
$access_db = odbc_connect("MS_ACCESS_SERVER","","");
$access_query = "SELECT * FROM wafer";
$access_result = odbc_exec($access_db, $access_query);
while (odbc_fetch_into($access_result, &$access_values)) {
   echo"\$access_values[0] = $access_values[0]<br>";
   echo"\$access_values[1] = $access_values[1]<br>";
}

Nach der 36. Zeile bekommen ich aber folgenden Fehler

*Warning: odbc_fetch_into() [function.odbc-fetch-into]: SQL error: [Microsoft][ODBC Microsoft Access Driver]Ungültige Cursorposition; es wurde kein Keyset definiert. , SQL state S1109 in SQLGetData in ....*

Es muss wohl an dieser Zeile liegen, es hat schon mal nicht mit der Anzahl der Values zu tun. Wenn ich where ID>20 mache bleibt er auch bei Zeile 36 stehen.

Bedeutet das vllt das ich am Ende der Tabelle bin ?
Kann mir vllt jemand erklären wie ich hier weiter komme?


----------

