关于自动配置ODBC数据库的问题

zhxu0926 2010-02-09 07:14:48
看看下面的文章,我是这么做的,然后打包的程序安装完后双击桌面快捷方式,它提示在桌面找不上数据库,这很显然它默认在桌面找数据库,我把数据库放桌面就可以了,我想怎样让它到我安装程序的文件夹中自动找数据库,因为安装完成的时候数据库是在安装目录下存在的

做一个软件,一个基本的标准是易用性。数据库自动连接和配置就是一个普遍的问题。在使用软件时,用户希望拿来就可以用,并不想做配置数据库、连接数据源的工作。尤其是一些非计算机专业的甚至有些吃力。我也曾经吃过这方面的亏,今天在做一个程序时查了很多资料,最终还是解决了这个问题。(我使用的是vc++做的,后台数据库是access)
在App的Initnstance中添加如下代码,在在程序运行开始时执行,连接数据源。
SQLConfigDataSource(NULL,ODBC_ADD_DSN,
"Microsoft Access Driver (*.mdb)",
"DSN=CaiPiaoData\0"
"Description=彩票数据源\0"
"FileType=Access\0"
"DBQ=.\\data.mdb\0"//数据库名称
);

要注意的是,当我们使用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

  有些人可能因为找不出错误而放弃了,其实这是因为当我们使用SQLConfigDataSource 这个API函数时候必须用到odbccp32.dll,它是Microsoft提供的32位ODBC安装和管理的DLL,如果是16位必须用到odbcinst.dll,odbccp32.dll有一个import library,所以解决的办法就是把这个odbccp32.lib加到我们的项目中,我们可以打开Project系统菜单项,选Add to Project子菜单,在其中选Files项,打开VC安装目录下的vclib目录,文件类型选Library Files(.lib), 选择其中Odbccp32.lib后按OK键,然后重新编译即可通过,运行这个程序,将弹出对话窗,按下Setup ODBC按键,之后,您就可以通过控制面板的ODBC数据源管理器或注册表查看运行结果,您会发现,您的数据库已经成功的注册了。
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxu0926 2010-02-10
  • 打赏
  • 举报
回复
谢谢楼上,不过本人比较菜,能能说的具体一点,怎么去用它
xsc2001 2010-02-09
  • 打赏
  • 举报
回复
象Access数据库的数据源你可以程序运行时自动创建,或者根本就不用建ODBC数据源。每次连接数据库时自动生成连接字符串就行了。我给你一个用ADO连接ACCESS数据库时生成连接串的函数:

//****************************************************************************************//
//函数 GetConnSrc
//主要功能: 得到连接Access数据库的ADO连接字符串
//参数列表:
// 1、CString strPath:路径名
// 2、CString strFn:Access文件名
//返回值:
//备注:
//****************************************************************************************//
CString GetConnSrc(CString strPath, CString strFn)
{

CString strRet = "DRIVER=Microsoft Access Driver (*.mdb);UID=admin;UserCommitSync=Yes;";
strRet += "Threads=3;SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;";
strRet += "FIL=MS Access;DriverId=25;DefaultDir=";
strRet += strPath;
strRet += ";DBQ=";
strRet += strPath;
strRet += strFn;

return strRet;
}

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧