web-dev-qa-db-fra.com

Nom de la source de données non trouvé et aucun pilote par défaut spécifié

J'ai besoin d'aide pour réparer une erreur: SQL state IM014 in SQLConnect et SQL state IM002 in SQLConnect.

J'exécute le même script, l'un sur webserver/remote/ et l'autre à partir de la machine locale essayant d'accéder à la même base de données, mais je reçois un message d'erreur différent 

Quand je le lance à partir du serveur Web, je reçois 

Erreur SQL: [unixODBC] [Gestionnaire de pilotes] Le nom de la source de données est introuvable et aucun pilote par défaut n'est spécifié, état SQL IM002 dans SQL.

où comme quand je l'exécute sur la machine locale je reçois 

[Microsoft] [Gestionnaire de pilotes ODBC] Le DSN spécifié contient une incompatibilité d'architecture entre le pilote et l'application.

J'ai utilisé le code suivant dans le script php pour me connecter à la base de données 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

MonODBC.iniressemble à ci-dessous

[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
13
Keven

Très simple!

Sur le serveur:

Erreur SQL: [unixODBC] [Gestionnaire de pilotes] Le nom de la source de données est introuvable et aucun pilote par défaut n'est spécifié, état SQL IM002 dans SQL.

Supprimez le nom de la source de données USER et définissez-le en tant que nom de la source de données SYSTEM . Allez à -> Démarrer -> Paramètres -> Panneau de configuration -> Outils d’administration -> Sources de données (ODBC): - DSN utilisateur: supprime le DSN utilisateur spécifié - DSN système: créer un nouveau DSN système

Sinon, essayez d'installer la même version 32bits ou 64bits que celle installée localement.

Localement:

[Microsoft] [Gestionnaire de pilotes ODBC] Le DSN spécifié contient une incompatibilité d'architecture entre le pilote et l'application.

Conflit 32 bits/64 bits - soit vous installez une version du pilote 32 bits, soit vous utilisez/configurez le 32 bits sous C:\Windows\SysWoW64 \

Essayez d'installer la même version 32bits ou 64bits que celle installée localement.

2
Malbordio

Commencez par ouvrir l'option des outils d'administration. Vérifiez votre système d'exploitation. Si vous utilisez 64 bits, sélectionnez le pilote 64 bits. Ou il est 32 bits, puis sélectionnez 32 bits.

S'il vous plaît ne faites aucun utilisateur DSN. Sélectionnez le DSN du système.

par exemple. J'ai créé System DSN dont le nom est "empcon1" puis dans PHP le code que vous devriez écrire comme ceci:

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

c'est tout .. Vous allez vous connecter.

1
Yash

Cela peut être causé par quelques facteurs. Tout d'abord, le DSN doit être déclaré sur les deux machines, sur la machine distante, il doit s'agir d'une adresse WAN ou d'un réseau local, en fonction de son emplacement sur le réseau. Deuxièmement, vous devez vous assurer que vous disposez du bon pilote ODBC, des pilotes 32 bits et des pilotes 64 bits. Le connecteur MySQL est livré avec les deux.

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

Je voudrais essayer de supprimer le pilote 64 bits, en ajoutant le pilote 32 bits et voir comment ça se passe. Assurez-vous également de tester votre ODBC pour vous assurer que vous disposez d'une connexion. Si vous avez plus de temps après, il est temps de vérifier le codage.

0
Rotti