在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

通过ODBC/JDBC连接程序和数据库时,异常报错“在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”的解决办法

在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

本机:64位win7,64位JDK,做Web实验用32位myeclipse不管是Access还是SQLServer连接数据库都出问题后,我终于明白当初做Java实验为啥连不上Access数据库但SQLServer没问题了,现在完美解决,哈哈!

原因:

64位win7操作系统ODBC版本默认为64位(建立的SQLServer数据源也为64位),需对应64位JDK及64位office(access),用myeclipse时也应对应64位myeclipse版本才可使用

若为32位myeclipse,与数据库连接时应对应32位ODBC数据源(建立的SQLServer数据源为32位)

解决方法:
X:\Windows\SysWOW64\odbcad32.exe 
例如:
去C:/windows/syswow64文件夹下,打开odbcad.exe,这样打开的就是32位版本的odbc
利用这个为odbc创建系统 DSN 连接SQLServer或Access,Access后缀应为mdb
注意此时应把jdk路径设置为32位jdk所在路径,若用myeclipse也应使用32位版本myeclipse

注:
64位版的位置:C:\windows\system32\odbcad32.exe
32位版的位置:C:\windows\sysWOW64\odbcad32.exe

数据库建立并运行成功后,将JDK再改回64位好像对数据库也无影响了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
Delphi通过注册表在程序增减和修改数据源,具体代码部分摘录://建立一个Registry实例,设置根键值为HKEY_LOCAL_MACHINE    if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then    //找到Software\ODBC\ODBC.INI\ODBC Data Sources    WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)')    //注册一个DSN名称    else    //创建键值失败    begin    memo1.lines.add('增加ODBC数据源失败');    exit;    end;    CloseKey;    if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then    //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息    begin    WriteString( 'DBQ', 'C:\Demo\orders.mdb' );    //指定数据库目录    WriteString( 'Description', '新Access数据源' );    //数据源描述    WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );    //驱动程序DLL文件,根据系统安装的目录不同而不同。    WriteInteger( 'DriverId', 25 );    //驱动程序标识    WriteString( 'FIL', 'Ms Access;' );    //Filter依据    WriteInteger( 'SafeTransaction', 0 );    //支持的事务操作数目    WriteString( 'UID', '' );    //用户名称    bData[0] := 0;    WriteBinaryData( 'Exclusive', bData, 1 );    //非独占方式    WriteBinaryData( 'ReadOnly', bData, 1 );    //非只读方式    end    else    //创建键值失败    begin    memo1.lines.add('增加ODBC数据源失败');    exit;    end;    CloseKey;    if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then    //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,写入DSN数据库引擎配置信息    begin    WriteString( 'ImplicitCommitSync', 'Yes' );    WriteInteger( 'MaxBufferSize', 512 );    //缓冲区大小    WriteInteger( 'PageTimeout', 10 );    //页超时    WriteInteger( 'Threads', 3 );    //支持的线程数目    WriteString( 'UserCommitSync', 'Yes' );    memo1.Lines.add('操作成功!');    end;   请下载完整实例的源码包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值