web-dev-qa-db-ja.com

データソース名が見つからず、デフォルトのドライバーが指定されていません

エラーの修正についてサポートが必要です:SQL state IM014 in SQLConnectおよびSQL state IM002 in SQLConnect

同じスクリプトをwebserver/remote/で実行し、もう1つはローカルマシンから同じデータベースにアクセスしようとしていますが、異なるエラーメッセージが表示されます。

Webサーバーから実行すると、

SQLエラー:[unixODBC] [ドライバーマネージャー]データソース名が見つからず、デフォルトのドライバーが指定されていません。SQL状態のSQL状態IM002

ローカルマシンで実行したときのように

[Microsoft] [ODBC Driver Manager]指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています

PHPスクリプトで次のコードを使用してローカルデータベースに接続しました

$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

私のODBC.iniは以下のようになります

[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
16
Kinfe

とてもシンプル!

サーバー上:

SQLエラー:[unixODBC] [ドライバーマネージャー]データソース名が見つからず、デフォルトのドライバーが指定されていません。SQL状態のSQL状態IM002

USERデータソース名を削除し、それをSYSTEMデータソース名として定義します。移動->スタート->設定->コントロールパネル->管理ツール->データソース(ODBC):-ユーザーDSN:指定したユーザーDSNを削除-システムDSN:新しいシステムDSNを作成

または、ローカルにインストールされているものと同じ32ビットまたは64ビットのバージョンをインストールしようとします。

ローカル:

[Microsoft] [ODBC Driver Manager]指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています

32ビット/ 64ビットの競合-32ビットのドライバーバージョンをインストールするか、C:\ Windows\SysWoW64 \で32ビットを使用/構成します

ローカルにインストールされているものと同じ32ビットまたは64ビットのバージョンをインストールしてみてください。

3
Malbordio

まず、管理ツールオプションを開きます。オペレーティングシステムを確認します。 64ビットを使用している場合は、64ビットのドライバーを選択します。または、32ビットの場合、32ビットを選択します。

ユーザーDSNを作成しないでください。システムDSNを選択します。

例えば名前が「empcon1」のシステムDSNを作成し、PHPコードで次のように記述します。

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

それですべて..接続されます。

1
Yash

これにはいくつかの原因があります。まず、両方のマシンでDSNを宣言する必要があります。リモートマシンでは、ネットワーク内の場所に応じてWANまたはLANアドレスにする必要があります。次に、DSNを宣言する必要があります。正しいODBCドライバー、32ビットドライバーと64ビットドライバーがあります。MySQLコネクタは両方に付属しています。

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

64ビットドライバーを削除し、32ビットドライバーを追加して、それがどのようになるかを確認します。また、ODBC=をテストして、接続していることを確認してください。それ以降は、コーディングを確認してください。

1
Rotti

私の場合、他の場所で見つけたコードを使用して、PHPスクリプトをMS Access 2003データベース(.mdbファイル)に接続しようとしていました。

$dbName = "C:\\DB\\myAccessFile.mdb";
if (!file_exists($dbName)) {
    die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; charset=UTF-8; DBQ=$dbName; Uid=myUserName; Pwd=secret;");

// use the connection here
$result = $db->query('SELECT * FROM tableName');
$counter = 1;
while ($row = $result->fetch()) {
    echo $row["firstName"] . " " . $row['lastName'];
    echo '<br/>';
    $counter = $counter + 1;
    if ($counter == 50) {
       break;
    }
}

// and now we're done; close it
$sth = null;
$dbh = null;

オペレーティングシステム:Windows 10 Pro。

WAMPサーバーのバージョン:3.1.9

次の図に示すように、コードで指定されているドライバーがODBCダイアログボックスのドライバー名と完全に一致していることを確認してください。

enter image description here

0
jgarcias