2014-10-10 24 views
13

Ho bisogno di aiuto per correggere un errore: SQL state IM014 in SQLConnect e SQL state IM002 in SQLConnect.Nome origine dati non trovato e nessun driver predefinito specificato

Eseguo lo stesso script, uno su webserver/remote/ e l'altro dal computer locale che tenta di accedere allo stesso database ma ottengo un messaggio di errore diverso.

quando l'eseguo dal web server ottengo

SQL error: [unixODBC][Driver Manager]Data source name not found, and no default driver specified, SQL state IM002 in SQL

dove come quando ho eseguito sulla macchina locale ottengo

[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application

ho usato il seguente codice in script php per connettersi al Database locale

$odbc['dsn'] = "SageLine50v19"; 
$odbc['user'] = "Peac"; 
$odbc['pass'] = "XXXX"; 
$mysql['host'] = "localhost"; 
$mysql['user'] = "root"; 
$mysql['pass'] = ""; 
$mysql['dbname'] = "sagetest"; 
$mysql['idfield'] = "id"; 


// Step 1: Connect to the source ODBC database 
if ($debug) echo "Connect to " . $odbc['dsn'] . ' as ' . $odbc['user'] . "\n"; 
$conn = odbc_connect($odbc['dsn'], $odbc['user'], $odbc['pass']); 
if (!$conn) { 
die("Error connecting to the ODBC database: " . odbc_errormsg()); 
} 

// loop through each table 
$allTables = odbc_tables($conn); 
$tablesArray = array(); 
while (odbc_fetch_row($allTables)) { 
if (odbc_result($allTables, "TABLE_TYPE") == "TABLE") { 
    $tablesArray[] = odbc_result($allTables, "TABLE_NAME"); 
} 
} 
//print_r($tablesArray);  // to list all tables 

mio ODBC.in I si presenta come di seguito

[ODBC 32 bit Data Sources] 
manager=Sage Line 50 v16 (32 bit) 
t=SQL Server Native Client 10.0 (32 bit) 
s1=Pervasive ODBC Client Interface (32 bit) 
SageLine50v19=Pervasive ODBC Client Interface (32 bit) 
[manager] 
Driver32=C:\Windows\SysWOW64\S16DBC32.dll 
[t] 
Driver32=C:\Windows\system32\sqlncli10.dll 
[s1] 
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll 
[SageLine50v19] 
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll 
+1

La mancata corrispondenza dell'architettura DSN è dovuta al fatto che il controllo dell'applicazione e del guidatore del driver differiscono, si sta tentando di utilizzare un driver a 32 bit con un'applicazione a 64 bit o viceversa. Dovrai abbinarli affinché tutto funzioni correttamente. Sul tuo computer locale, se stai utilizzando un driver a 32 bit, passa a uno a 64 bit e riprova. Sul server, hai installato il driver e il DSN? – KylePorter

+0

@KylePorter grazie per la risposta non sono sicuro di DSN ma so che il mio webhost ha aggiunto l'estensione "odbc". controllerò con loro il DSN – Keven

+0

Non è sufficiente avere solo il driver ODBC installato, è necessario anche creare un DSN sul server a cui connettersi, lo stesso del tuo computer locale. Se stai distribuendo lo stesso codice, devi assicurarti che il DSN sia impostato in modo identico a quello che hai localmente. – KylePorter

risposta

0

Ci sono alcune cose che possono causare questo. Innanzitutto, il DSN deve essere dichiarato su entrambe le macchine, sulla macchina remota deve essere un indirizzo WAN o LAN a seconda di dove risiede nella rete. In secondo luogo è necessario assicurarsi di avere il driver ODBC giusto, ci sono driver a 32 bit e driver a 64 bit. Il connettore MySQL viene fornito con entrambi.

32 bit ODBC: %systemdrive%\Windows\SysWoW64\odbcad32.exe 
64 bit ODBC: %systemdrive%\Windows\system32\odbcad32.exe 

vorrei provare a rimuovere il driver a 64 bit, aggiungere il driver a 32 bit e vedere come va. Inoltre, assicurati di testare il tuo ODBC per assicurarti di avere una connessione. Se dopo di allora, il tempo di controllare la codifica.

2

Molto semplice!

Sul server:

errori SQL: [unixODBC] [Gestione driver] Nome origine dati non trovato e nessun driver predefinito specificato, SQL IM002 stato in SQL

Eliminare il nome utente origine dati e definire è un nome di origine dati SYSTEM. Vai -> Start -> Impostazioni -> Pannello di controllo -> Strumenti di amministrazione -> Origini dati (ODBC): - DSN utente: elimina il DSN utente specificato - DSN di sistema: creare un nuovo DSN di sistema

Altrimenti prova ad installare la stessa versione a 32 bit o 64 bit installata localmente.

A livello locale:

[Microsoft] [Gestione driver ODBC] Il DSN specificato contiene una mancata corrispondenza di architettura tra il driver e applicazioni

32bit/64 bit conflitto - o si installa una versione del driver a 32 bit o si utilizza/configura il 32 bit in C: \ Windows \ SysWoW64 \

Prova ad installare la stessa versione a 32 bit o 64 bit come installata localmente.

0

Prima di tutto aprire l'opzione degli strumenti di amministrazione. Controlla il tuo sistema operativo. Se si utilizza 64-bit, selezionare il driver di 64-bit. Oppure è 32-bit quindi seleziona 32-bit.

Si prega di non fare alcun utente DSN. Seleziona il sistema DSN.

ad es. Ho fatto DSN di sistema il cui nome è "empcon1" poi nel codice PHP si dovrebbe scrivere in questo modo:

$dbNewName = "empcon1"; <br/> 
$dbUserName = "yash"; <br/> 
$dbPassword = "yash";<br/> 
$conn=odbc_connect($dbNewName,$dbUserName,$dbPassword); 

questo è tutto .. otterrete collegati.

Problemi correlati