#define ODBCTEXT _T("DSN=数据库管理UID=saPWD=123")
//数据库管理 ODBC 开启失败与成功
//ODBC 只能采用 [系统DSN]方式
BOOL CWizardsDlg::IsOpenODBC()
{
int bol=0
CDatabase odbc
TRY
{
odbc.OpenEx(ODBCTEXT,CDatabase::openReadOnly|CDatabase::noOdbcDialog)
return TRUE
}
CATCH_ALL(e)
{
return FALSE
}
END_CATCH_ALL
}
//使用方法
void CWizardsDlg::OnButton5()
{
//1=OK2=CANCEL
if(!IsOpenODBC())
{
if(MessageBox("数据库管理 ODBC 开启失败。","数据库管理",MB_OKCANCEL)==1)
{
OnButton5()
}
else
{
MessageBox("数据库开启失败。强行进入,某些功能不能实现。","数据库管理",MB_OK)
}
}
else
{
MessageBox("数据库管理 ODBC 开启成功。","数据库管理",MB_OK)
}
}
在ODBC 的[系统DSN]设置 ”数据库管理,ACCESS”
下面我用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的按键,选中此按键再按鼠标右键,在d出式菜单上选Properties选项,在出现的对话框中把Caption项的Button1值改为Setup ODBC,关闭此对话框,再选中此按键按鼠标右键,选择ClassWizard,在出现的对话窗口中,Object Ids选IDC_BUTTON1,Messages中双击BN_CLICKED,此时d出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=TryDB0DBQ=D:Database
try.mdb0DEFAULTDIR=D:DATABASE00")
您可以根据您不同的设置需要修改上面的语句,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
有些人可能因为找不出错误而放弃了,其实这是因为当我们使用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键,然后重新编译即可通过,运行这个程序,将d出对话窗,按下Setup ODBC按键,之后,您就可以通过控制面板的ODBC数据源管理器或注册表查看运行结果,您会发现,您的数据库已经成功的注册了。
以上代码均在WIN98,VC6.0上编译通过,您可以灵活应用这些办法,让您编写的软件更易于安装维护和使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)