Visual C++实现自动配置ODBC数据源

原创 2007年09月19日 16:41:00
 

为了使ODBC能与数据库起工作,必须把数据库注册到ODBC驱动程序管理器,这项工作可以通过定义一个DSN或数据源名字来完成。通常,我们只能手动打开系统控制面板,运行其中的ODBC数据源管理器,手工配置数据源,这次做公司里的手机借用信息管理系统老大要求程序运行的时候自动完成数据源的配置,我做为一个才用VC写程序一周时间的菜鸟,只好边找资料便做,网上的资料百分之八十都是重复的,其实做完后觉得是一个很简单的事情,结果在上面浪费了45个小时。我把找的资料和一些需要注意的东西放到空间里来,或许下次和那些刚学VC的人有些帮助。

一、我写的最简单的代码段(加入到你要使用到数据库或者是程序启动初始化的文件函数里),没有写错误处理部分,是不完整的,但是可以用了,为了敢时间就注意将就着用一下把。在下个系统下个版本里修改一下。代码段如下:

if(!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access Driver (*.mdb)/0",

                                    "DSN=mobilephone/0"

                                                   "Description=mobilephone/0"

                                                   "DBQ=////smcrdsvr//样机登记//mobilephone.mdb/0"

                                                   "FIL=MS Access/0"

                                                   "DriverId=25/0"))       

     {   

       MessageBox("注册数据源DSN失败!");    

     }

1、  要注意" /0",只要是字符串的地方都需要加是,负责你只有使劲找错误,但是错误提示你还没办法找到错误出处,我就在这个上面花了很长时间。

2、  在填写数据库路径的时候要在每一个“/”前再加一个”/”,这样才能够让MFC认出这个是路径的信息。

3、  如果你用的是Access 2003(我就是用的这个做的程序),那么用来设置数据库路径的"DBQ=////smcrdsvr//样机登记//mobilephone.mdb/0"一定为能够把其中的DBQ改为” DataDirectory” DefaultDir之类的,我开始按网上的资料做结果就因为没有用DBQ而是用的DefaultDir弄了好久都没有对。但是其他的数据库可能又不一样。我没有试过。

4、  DriverId的值不同的数据库有不同的值,同样的数据库有可能因为版本不一样也会不同。大家注意区分。

二、网上资料:

  1 SQLConfigDataSource 函数说明

  ODBC API提供了动态创建数据源的函数SQLConfig DataSource。该函数的原型如下:

BOOL SQLConfigDataSource ( HWND hwndParent,WORD fRequest,

LPCSTR lpszDriver,LPCSTR lpszAttributes );

   参数说明如下:

  (1)参数hwndParent用于指定父窗口句柄,在不需要创建数据源对话框时,可以将该参数指定为NULL

  (2)参数fRequest用于指定函数的操作内容,取值如下:

  ODBC_ADD_DSN 加入一个新的用户数据源;

  ODBC_CONFIG_DSN:修改一个存在的用户数据源;

  ODBC_REMOVE_DSN:除一个存在的用户数据源;

   ODBC_ADD_SYS_DSN:增加一个新的系统数据源;

  ODBC_CONFIG_SYS_DSN:配置或者修改一个存在的系统数据源;

  ODBC_REMOVE_SYS_DSN:删除一个存在的系统数据源;

  ODBC_REMOVE_DEFAULT_DSN:删除省缺的数据源说明部分。

  (3)参数lpszDriver用于指定ODBC数据源的驱动

  程序类别,例如,为了指定Access数据源,该参数应赋以字符串“Microsoft Access Driver (*.mdb)/0;对SQL Server数据源,则应赋以字符串“SQL Server”。

  (4)参数lpszAttributes用于指定ODBC数据源属性。例如:

  ① Access数据源:

"DSN= MYIMAGE/0 DBQ=D://ImageProcess//image.mdb/0

DEFAULTDIR= D://ImageProcess/0/0"

  说明:该字符串指定数据源名称(DNS)MYIMAGE;数据库文件(DBQ)D://ImageProcess//image.mdb ;缺省数据库文件路径(DEFAULTDIR) D://ImageProcess

  ② SQL SERVER数据源:

"DSN=MYIMAGE/0 SERVER=MYET/0 DATABASE=Image"

  说明:该字符串指定数据源名称(DSN)MYIMAGESQLSERVER 数据库服务器名(SERVER) MYET;数据库名称(DATABASE)为Image

  2 .两个需要注意的问题

  (1)当我们使用SQLConfigDataSource ODBC API函数时必须声明包含系统的odbcinst.h头文件,所以我们再选择workspace窗口中FileView打开Header FilesImageprocess.h,在其中加入#includeodbcinst.h”。

  (2SQLConfigDataSource 这个API函数时候必须用到odbccp32.dll,它是Microsoft 提供的32 ODBC安装和管理的DLL,如果是16 位必须用到odbcinst.dllodbccp32.dll 有一个import library,所以解决的办法就是把这个odbccp32.lib加到我们的项目中,我们可以打开

Project系统菜单项,选Add to Project子菜单,在其中选Files项,打开VC安装目录下的/vc/lib/目录,文件类型选Library Files(.lib) 选择其中odbccp32.lib后按OK键。

  3 .程序代码

  从上文看出设置参数lpszAttributes时需要设置数据库文件的路径,为了方便用户的使用,可以将数据库文件保存到该项目的debug文件夹下,通过程序实现自动获取数据库文件路径的功能,代码如下:

CString szPath;

GetModuleFileName(NULL,sPath.GetBufferSetLength

(MAX_PATH+1),MAX_PATH);

szPath.ReleaseBuffer ();

int nPos;

nPos=szPath.ReverseFind (’//’);

szPath=szPath.Left (nPos);

CString szFile = sPath + "//image.mdb";

char szAtr[256];

sprintf(szAtr,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ","MYIMAGE",

szFile,szPath);

int nlen;

nlen = strlen(szAtr);

for (int i=0; i<nlen; i++)

{

if (szAtr [i] == ’!’)

szAtr [i] = ’/0’;

}

if (FALSE == SQLConfigDataSource(NULL,

ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)/0",

(LPCSTR)szAtr))

AfxMessageBox("SQLConfigDataSource Failed");

  编译并运行程序后,可以通过控制面板的ODBC数据源管理器或注册表查看运行结果,就会看到数据库已经成功的注册了。

为什么要配置数据源ODBC

1.敲完学生和机房后,只知道配置ODBC数据源是为了连接vb与SQL 实现vb与数据库的完美交互,那么为什么要配置ODBC那: 主要是方便管理 1 你肯定要链接数据库 2 那么你肯定要用户名和密码 ...
  • wrs120
  • wrs120
  • 2016年08月18日 13:35
  • 2936

mysql怎样配置ODBC数据源

http://download.csdn.net/detail/kexinyu915/5242898 事先配置相应的环境 mysql(mysql安装程序) mysql...
  • xingxiupaioxue
  • xingxiupaioxue
  • 2016年01月09日 14:43
  • 1509

配置SQL Server 2008 数据源(ODBC编程)

配置SQL Server 2008 数据源(ODBC编程) 1. 了解要配置的数据源服务器名称,以及数据库和对应表。 2. 打开控制面板,点击管理工具。 3. 双击数据源。 4...
  • u012025054
  • u012025054
  • 2014年05月28日 10:11
  • 5628

Mysql ODBC 数据源配置

一: 打开控制面板 - 管理工具 - 数据源(ODBC) 二:打开驱动程序选项卡,查找是否有mysql驱动 三:如果存在,跳过此步骤。如果不存在首先安装mysql ODBC...
  • kalision
  • kalision
  • 2014年12月12日 11:29
  • 4269

添加和使用ODBC数据源

1.添加用户DSN         我使用的是VC++6.0连接SQL Server2000数据库。首先将SQL Server2000正确进行安装,并且安装它的SP3和SP4补丁。在安装SP3补丁的...
  • chenbinqq
  • chenbinqq
  • 2013年12月07日 16:14
  • 1653

win10操作系统的ODBC数据源配置sqlserver数据库

ODBC数据源全称是开放数据库互连(Open Database Connectivity),在微软公司开放的数据库结构中的一部分,其实就是一个应用程序的接口,主要用于提供数据库的编写应用程序的能力。 ...
  • cuiyaoqiang
  • cuiyaoqiang
  • 2016年02月21日 17:42
  • 12441

Windows系统创建ODBC数据源

Windows下创建ODBC数据源
  • hao2244
  • hao2244
  • 2015年05月13日 09:29
  • 2146

【数据库】——ODBC数据源管理器 和 三种DSN(还记得是自己用过吗?)

ODBC数据源管理器 ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的...
  • z15732621736
  • z15732621736
  • 2015年08月13日 21:40
  • 1376

MySQL ODBC驱动安装和配置数据源

----------------------------------------------------------------------------------------------------...
  • cn130404
  • cn130404
  • 2017年07月05日 08:59
  • 3534

自动安装并配置ODBC的思路与实现(自动创建MysqlDSN )

一、如何自动注册ODBC数据源 其实都是用到一个函数:SQLConfigDataSource。 这里举两个有代表性的例子: 1 2 3 4 ...
  • educast
  • educast
  • 2014年01月13日 16:01
  • 3679
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Visual C++实现自动配置ODBC数据源
举报原因:
原因补充:

(最多只允许输入30个字)