2014-10-10 53 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); 

多数民众赞成..你会得到连接。

相关问题