nagita
Goto Top

Microsoft-ODBC Driver Manager - Fehler bei SQLSetConnectAttr-Aufruf für Treiber

Hallo an Alle
ich bin ganz neu hier und würde gerne mein Problem vorstellen.
Leider bin ich nicht sehr tief in der Materie. Bin halt nur der Programmierer.
Folgendes ist da:
PHP-Prgrammierung:
$serverName = "server\instance"; //serverName\instanceName  
$connectionInfo = array( "Database"=>"db", "UID"=>"user", "PWD"=>"pw");  
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Hat geklappt.<br />";  
}else{
     echo "Hat nicht geklappt.<br />";  
     die( print_r( sqlsrv_errors(), true));
}
Ergebnis:
Hat nicht geklappt.
Array ( 
	 => Array ( 
		 => IM006 [SQLSTATE] => IM006 
		[1] => 0 [code] => 0 
		[2] => [Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnectAttr-Aufruf für Treiber 
			[message] => [Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnectAttr-Aufruf für Treiber ) 
	[1] => Array ( 
		 => 01000 [SQLSTATE] => 01000 
		[1] => 5701 [code] => 5701 
		[2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Der Datenbankkontext wurde in "netsoft" geändert.   
			[message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Der Datenbankkontext wurde in "netsoft" geändert. )   
	[2] => Array ( 
		 => 01000 [SQLSTATE] => 01000 
		[1] => 5703 [code] => 5703 
		[2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die Spracheneinstellung wurde auf Deutsch geändert. 
			[message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Die Spracheneinstellung wurde auf Deutsch geändert. 
	) 
) 

ODBC-Treiber:
Name - 32-Bit - SQL Server Native Client 11.0
Name - 64-Bit - SQL Server Native Client 11.0
Name - 32-Bit - ODBC Driver 11 for SQL Server
Name - 64-Bit - ODBC Driver 11 for SQL Server

Das Programm liegt auf dem Server A. (z.B. serverA:83/verz/prog.php
Die Datenbank liegt auf Server B.

Das ganze habe ich auf meinem Rechner schon zum Laufen gebracht.
Die Einstellungen von php.ini sind identisch.
Die SQL-Server auch.
Bei mir funktioniert alles korrekt.

Umgebung für Programmierung: auf beiden Xampp aktuellste Version
Mein SQL-Server: Microsoft SQL Server Express (64-bit) - Windows 10 Pro (10.0) - Version 14.0.2037.2
der Andere: Microsoft SQL Server Standard (64-bit) - Microsoft Windows NT 6.3 (14393) - Version 13.0.1742.0

Vielleicht kennt ja jemand die Lösung für mein Problem.

Content-ID: 665292

Url: https://administrator.de/contentid/665292

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

em-pie
em-pie 31.03.2021 um 09:19:02 Uhr
Goto Top
Moin,

welche SQL Express-Version kommt zum Einsatz und welche SQL Standard-Version.

Auch wenn die Fehlermeldung eine andere sein dürfte, kann der ODBC-Treiber mitunter nicht zur eingesetzten MS SQL-DB passen.

Gruß
em-pie
nagita
nagita 31.03.2021 um 09:24:37 Uhr
Goto Top
SQL Express-Version - Microsoft SQL Server 2017
SQL Standart-Version - Microsoft SQL Server 2016
em-pie
em-pie 31.03.2021 um 09:29:01 Uhr
Goto Top
Dann setze mal einen anderen ODBC-Treiber ein:
https://www.microsoft.com/de-de/download/details.aspx?id=53339
nagita
nagita 31.03.2021 um 09:40:24 Uhr
Goto Top
Ist in Arbeit.
Leider muss dafür der Rechner durchgestartet werden.
Das passiert erst heute Mittag.
Ich werde auf jeden Fall das Ergebnis mitteilen.
em-pie
em-pie 31.03.2021 aktualisiert um 09:51:44 Uhr
Goto Top
Super.

Kleine ANmerkung.
Setze dein obigen Skriptauszug einmal in CodeTags (ohne die Leerzeichen, die dienen nur zur Veranschaulichung):
< code >
[Script]
</ code >


Nachtrag:
Bei genauerer Recherche dann in dem Zuge auch einmal dies Prüfen:
https://support.microsoft.com/en-us/topic/fix-setting-of-connection-attr ...

eines der gelisteten Punkte dürfte vermutlich die Ursache sein. also einmal einen Abgleich der DSN-Einstellunge zwischen deinem PC und dem Server vornehmen.
nagita
nagita 03.04.2021 um 20:11:09 Uhr
Goto Top
Leider lag es auch nicht am anderen ODBC-Triber.
Kommt immer wieder die gleiche Fehlermeldung.
nagita
nagita 06.04.2021 aktualisiert um 15:34:39 Uhr
Goto Top
Das Problem mit dem SQL-Server hat sich erledigt.
Habe folgendes geändert:
$conn = new PDO("sqlsrv:Server=$serverName;Database=$dataBase", "$user", "$pass");  
Damit gehts.

Jetzt habe ich ein anderes Problem:
Im gleichen Programm entscheide ich, ob ich eine Access_Datenbank oder einen SQL-Server nutze.
Das mit dem SQL-Server geht ja jetzt.
Leider kommt mal wieder eine Fehlermeldung bei der Access-Datenbank.
So ist der Code:

$driver = "driver=microsoft access driver (*.mdb, *.accdb)";  

$conn = new PDO("odbc:$driver; dbq=$mdb;systemmdb=$mdw;Uid=$user;Pwd=$pass");  

if( $conn ) {
     echo "Hat geklappt.<br />";  
}else{
     echo "Hat nicht geklappt.<br />";  
     die("<pre>" . print_r( sqlsrv_errors(), true));  
}
$sql = "SELECT * FROM Artikel";  
$stmt = $conn->prepare($sql);
$stmt->execute();

Nach dem Ausführen kommt folgende Fehlermeldung:

Hat geklappt.

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: -1907 
[Microsoft][ODBC-Treiber für Microsoft Access] Datensätze können nicht gelesen werden. Keine Leseberechtigung auf 'Artikel'.   
(SQLExecute[-1907] at ext\pdo_odbc\odbc_stmt.c:257) in access.php:20 Stack trace: #0 access.php(20): 
PDOStatement->execute() #1 {main} thrown in access.php on line 12

Kann da vielleicht jemand etwas mit anfangen?
em-pie
Lösung em-pie 06.04.2021 um 16:03:59 Uhr
Goto Top
Bzgl. deiner Fehlermeldung:
Lies dir mal die Zeile 4 in Ruhe durch face-wink
Und dann prüfe einmal, ob das, was dort steht, stimmen könnte face-smile
nagita
nagita 06.04.2021 aktualisiert um 16:41:02 Uhr
Goto Top
Das sollte man meinen.
Leider stimmen die Fehlermeldungen nicht immer mit dem tatsächlichen Fehler überein.
Ich habe volle Berechtigung auf die Datenbank.
Auch Benutzer und Passwort stimmen.
Aber ich werde Morgen mal meinen Kollegen fragen, ob evtl. irgentwelche Rechte auf dem Server greifen.
Die Verzeichnisse und die DB selbst sind nicht geschützt.
Wenn ich weiß, woran es liegt, sage ich wieder Bescheid.

PS: dieses Forum ist echt spitze. Es hilft zwar nicht immer, aber man bekommt gute Antworten und Anregungen.
Das ist leider nicht überall so. Soll heißen: ich bedanke moich recht herzlich bei Allen, die Anderen helfen.
nagita
nagita 07.04.2021 um 08:28:31 Uhr
Goto Top
Habe noch einmal alles nachgeschaut.
Die Berechtigungen sind komplett vorhanden.
Ich vermute, dass die Fehlermeldung nicht das aussagt, was wirklich los ist.
Hat das schon mal jemand gehabt und vielleicht eine Lösung, wie man das machen könnte?
nagita
nagita 07.04.2021 um 15:20:52 Uhr
Goto Top
Habe nochmal was geändert.
Der jetzige Source:
$mdb = "datei.mdb";  
$mdw = "system.mdw";  
$user = "admin";  
$pass = "pass";  
$driver = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}";  

$conn = odbc_connect("$driver;Dbq=$mdb;systemmdb=$mdw", '$user', '$pass', SQL_CUR_USE_DRIVER);  
if( $conn ) {
     echo "Hat geklappt.<br />";  
}else{
     echo "Hat nicht geklappt.<br />";  
     die("<pre>" . print_r( sqlsrv_errors(), true));  
}
$qry_id = odbc_do($conn,'SELECT * FROM Artikel');   

Nach dem Ausführen des Proggis kommt diese Fehlermeldung:

Warning: odbc_do(): SQL error: [Microsoft][ODBC-Treiber für Microsoft Access] 
Datensätze können nicht gelesen werden. 
Keine Leseberechtigung auf 'Artikel'.,   
SQL state 42000 in SQLExecDirect in access.php on line 14

Ich habe sämtliche Berechtigungen an Daten, Verzeichnissen und auch Servern.