ODBC连接发生错误:未发现数据源名称并且未指定默认驱动程序
程序在使用ODBC方式连接数据库时发生错误:
ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序。
什么原因造成的呢?
本人使用《Delphi+SQL Server数据库应用实例完全解析》 附带例程测试,发现不能连接数据库。
提示通信模块驱动问题。
环境:win7_x86 + SQL Server2000 + Delphi 7.
解决方法:
SQL Server 2000
1. 通过数据库->所有任务->还原数据库。
2. 安全性设置->登录-> 设置默认数据为 xqwy。
ODBC
1. 打开控制面板-> ODBC 数据源管理器
2. 添加-> 选择 SQL Server
3. Name: 数据库名称 Description: 数据库描述 Server:计算机名称
4. 下一步 保存 确定。
5. 测试: Delphi 7 创建ADOCon 控件,双击控件。
6.Use Connection String -> build
7. 连接: 使用数据源名称:xqwy
用户名:sa
密码:sa
测试连接->测试连接成功。
Delphi7 ADO 代码:config.pas
1 unit config; 2 3 interface 4 uses 5 SysUtils,forms; 6 type 7 TXQWYConfig=class //定义连接管理类 8 public 9 class function getConnectionStr:string; //定义类的方法,得到连接字符串 10 end; 11 implementation 12 class function TXQWYConfig.getConnectionStr; 13 begin 14 //result:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=XQWY;Data Source=(local)'; 15 result:='Provider=MSDASQL.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=XQWY;Data Source=xqwy'; 16 end; 17 end.
================================ 参考资料 ==================================
首先说明下程序的运行环境。操作系统是win8 64位的,.net 4.0的程序。
进展一,打开控制面板的“数据源”工具,在“驱动程序”中并未发现对应的驱动程序名称,于是,下载安装64位ODBC驱动程序,并根据驱动程序列表中的驱动名称,修改了对应的odbc连接字符串。测试后依然提示以上错误。甚至根据高手指点,使用了64位系统专用的odbc连接字符串,依然错误。
进展二,突然想到会不会和.net程序有关?因为部分控件兼容性问题,程序虽然运行在64位操作系统下,但实际上是以32位方式运行。这个会不会是问题的根本呢?尝试下载32位的odbc驱动,并安装。测试连接,成功!
原因分析:结合之前看到的现象(win8 64位系统中的“设置odbc数据源”工具居然分为32位和64位两个程序),猜想原因:win8 64位系统中的odbc驱动分为32位和64位分开管理,32位方式运行的程序只会调用32位的odbc驱动,同理,64位的程序只能调用64位的odbc驱动。