"); //-->
ODBC(Open Database Conectivity)即开放式数据库互联,作为Windows开放性结构的一个重要部分已经为很多的Windows程序员所熟悉,
ODBC的工作依赖于数据库制造商提供的驱动程序,使用ODBC API的时候,Windows的ODBC管理程序,
把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句指示DBMS完成数据库访问工作,
因此,ODBC的存在为我们开发应用数据库程序提供了非常强大的能力和灵活性。
为了使ODBC能与数据库一起工作,必须把数据库注册到ODBC驱动程序管理器,这项工作可以通过定义一个DSN或数据源名字来完成。
通常,我们只能手动打开系统控制面板,运行其中的ODBC数据源管理器,手工配置数据源,但是这项工作对用户而言过于复杂,
我们必须考虑用程序替用户完成这些配置工作。
因此许多程序员在发布自己编写的数据库软件时候都希望能有一个优秀的安装程序能够自动设置好ODBC数据源,
虽然现在 InstallShield等一些优秀的安装制作软件可以帮助我们实现此类功能,但毕竟缺少灵活,
程序员不能完全控制它,事实上,我们完全可以自己编写一些程序实现此类功能,
实现的方法有几种,
一种办法是用程序修改Windows注册表,程序员可以用Windows API函数增改HKEY_LOCAL_MACHINESoftwareODBC下的ODBC.INI中的键值,
这种方法比较烦琐。
我现在推荐一种在程序中使用ODBC API的方法,程序员可以在任何时候都可以用Visual C++编写的程序调用这些API函数来设置ODBC数据源。
下面我用MFC写一个程序来演示如何实现这个功能:
首先,打开Visual C++,在File菜单上选New,然后选定MFC AppWizard(exe)类的项目,Project name我们定为try,按下OK键,
下一Step 1屏幕中选Dialog based,由于不必用到后面的选项,此时即可按下Finish键,结果系统将生成一个新的项目。
完成上述工作后,在左侧Workspace窗口中,选择 ResourceView,打开try resources中的Dialog资源,
选择并打开IDD_TRY_DIALOG对话窗口,在Controls菜单窗口中点选按键图标,回到 IDD_TRY_DIALOG对话窗口并点击此窗口,
将生成一个名叫Button1的按键,选中此按键再按鼠标右键,在弹出式菜单上选 Properties选项,
在出现的对话框中把Caption项的Button1值改为Setup ODBC,关闭此对话框,再选中此按键按鼠标右键,
选择ClassWizard,在出现的对话窗口中,Object Ids选IDC_BUTTON1,Messages中双击BN_CLICKED,
此时弹出Add Member Function对话窗,Member function name是OnButton1,按OK键。
在Member functions选项中双击onButton1 ON_IDC_BUTTION1:BN_CLICKED,
在出现的void CTryDlg::OnButton1()函数中用以下ODBC API函数语句替换
//TODO: Add your control notification handler code here这条注释语句:
SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"Microsoft Access Driver (*.mdb)\0","DSN=Try\0 DBQ=E:\\database\\plc.mdb\0 DEFAULTDIR=E:\\database\0\0");
您可以根据您不同的设置需要修改上面的语句,SQLConfigDataSource一般有以下几个许可的参数:
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: 删除省缺的数据源说明部分。
需要注意的是,当我们使用SQLConfigDataSource ODBC API函数时必须声明包含系统的odbcinst.h头文件,
所以我们再选择workspace窗口中FileView打开Header Files中try.h,在其中加入#include "odbcinst.h",
如果不加入这个头文件,系统编译时就会显示undeclared identifier错误,在完成上述步骤后,
假如我们立即编译并Link这个项目,会发现出现下面的错误:
tryDlg.obj : error LNK2001: unresolved external symbol _SQLConfigDataSource@16 Debug/try.exe : fatal error LNK1120: 1 unresolved externals
在vs2008下是要加入一个头文件:#include "afxdb.h"
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)为MYIMAGE;SQLSERVER 数据库服务器名(SERVER)为 MYET;数据库名称(DATABASE)为Image。
以上代码均在WINxp,VS2008上编译通过,您可以灵活应用这些办法,让您编写的软件更易于安装维护和使用。
此文为引用
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。