2014-10-10 77 views
13

我需要幫助修復錯誤:SQL state IM014 in SQLConnectSQL state IM002 in SQLConnect找不到數據源名稱,也沒有指定默認驅動程序

我運行相同的腳本,一個在webserver/remote/上,另一個從本地機器嘗試訪問同一個數據庫,但我得到了不同的錯誤信息。

當我從網絡服務器上運行它,我得到

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

哪裏,當我在本地機器上運行它,我得到

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

我用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.in我看起來像下面

[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

DSN體系結構不匹配是因爲應用程序的位數和驅動程序的位數不同,所以您試圖在64位應用程序中使用32位驅動程序,反之亦然。你需要匹配它們才能正常工作。在您的本地機器上,如果您正在使用32位驅動程序切換到64位驅動器並重試。在服務器上,您是否安裝了驅動程序和DSN? – KylePorter 2014-10-16 16:40:28

+0

@KylePorter謝謝你的回覆我不知道DSN,但我知道我的網絡主機添加了「odbc」擴展名。我將向他們詢問有關DSN的信息 – Keven 2014-10-16 17:32:54

+0

僅安裝ODBC驅動程序是不夠的,您還必須在服務器上創建一個要連接的DSN,與本地計算機上的相同。如果您正在部署相同的代碼,那麼您必須確保DSN的設置與本地的相同。 – KylePorter 2014-10-17 18:01:58

回答

0

有可能導致此幾件事情。首先,需要在兩臺機器上聲明DSN,在遠程機器上需要聲明DSN,這取決於它在網絡中的位置,它需要是WAN或LAN地址。其次,你需要確保你有正確的ODBC驅動程序,有32位驅動程序和64位驅動程序。 MySQL連接器附帶兩個。

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

我會嘗試刪除64位驅動程序,添加32位驅動程序,看看是怎麼回事。另外,確保你測試你的ODBC以確保你有連接。如果你比以後有時間檢查編碼。

2

很簡單!

在服務器:

SQL錯誤:[的unixODBC] [驅動程序管理器]數據源名稱未找到,並在SQL

刪除用戶數據源名稱,並定義沒有指定默認驅動程序,SQL狀態IM002它作爲一個SYSTEM數據源名稱。 進入 - >開始 - >設置 - >控制面板 - >管理工具 - > 數據源(ODBC): - 用戶DSN:刪除指定的用戶DSN - 系統DSN:創建一個新的系統DSN

否則,請嘗試安裝與本地安裝相同的32位或64位版本。

本地:

[微軟] [ODBC驅動程序管理器]指定的DSN包含驅動程序和應用程序

32位/ 64位的衝突之間的架構不匹配 - 要麼你安裝一個32位驅動程序版本或使用/配置32位C:\ Windows \ SysWoW64 \

嘗試安裝相同的32位或64位版本作爲本地安裝。

0

首先打開管理工具選項。檢查你的操作系統。如果您使用的是64位,那麼選擇64位的驅動程序。或者它是32位然後選擇32位。

請不要做任何用戶DSN。選擇系統DSN。

例如我做了系統DSN它的名字是「empcon1」,然後在PHP代碼,你應該這樣寫:

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

多數民衆贊成..你會得到連接。

相關問題