MFC ODBC(一)

一、动态创建ODBC数据源

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

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数据引擎名称。例如:Microsoft Access Driver (*.mdb)、SQL Server,Microsoft ODBC for Oracle等。

(4)lpszAttributes

指定ODBC数据源属性,包含配置数据源所必要的一组关键字-值的列表。部分关键字描述如下:

DSN:数据源名称;

FILEDSN:文件数据源名称;

DRIVER:数据驱动的描述;例如:SQL Server, ORACLE等。

UID:用户ID;

PWD:UID对应的口令,如果没有口令,也可为空字符串;

SAVEFILE:保存维持当前成功连接的关键字属性值的.dsn文件名称;

DATABASE:数据库名称;

DBQ:数据库文件绝对路径(包含文件名);

DEFAULTDIR:缺省数据库文件路径(不包含文件名);

注意:

1)如果lpszAttributes提供的信息不够完善,在创建过程中就会出现对话框要求用户提供相应信息。

2)每两个Key-Name值之间用‘\0‘隔开,最后一个Key-Name值后面有两个‘\0‘。

3)运行regedit打开注册表,依次打开HKEY_CURRENT_USER->Software->ODBC->ODBC.INI,可以看到已注册的DSN,可以仿照已注册的DSN属性来设置lpszAttributes。

4)DSN的名字必须唯一,如果要注册的DSN已被注册过,那么SQLConfigDataSource就修改原来DSN的属性。

注意:

1、使用SQLConfigDataSource函数时必须声明包含系统的odbcinst.h头文件。

2、使用SQLConfigDataSource函数时必须用到odbccp32.dll,它是Microsoft 提供的32 位ODBC安装和管理的DLL,如果是16 位必须用到odbcinst.dll,odbccp32.dll 有一个import library。解决办法是把odbccp32.lib加到我们的项目中,我们可以打开Project系统菜单项,选Add to Project子菜单,在其中选Files项,打开VC安装目录下的\vc\lib\目录,文件类型选Library Files(.lib) , 选择其中odbccp32.lib后按OK键。同时将ODBCCP32.DLL放于系统子目录下。

举例如下:

CString strDir;
::GetCurrentDirectory(MAX_PATH, strDir.GetBuffer(MAX_PATH + 1));
strDir.ReleaseBuffer();

TCHAR szTempPath[MAX_PATH + 1] = {‘\0‘};
sprintf(szTempPath, "DSN=%s!DBQ=%s!DEFAULTDIR=%s!!", CString("SOWM")
        , strDir + CString("\\SOWM.mdb"), strDir);

int szTempPathLen = strlen(szTempPath);
for (int i = 0; i < szTempPathLen; ++i) {
    if (szTempPath[i] == ‘!‘)
        szTempPath[i] = ‘\0‘;
}

if (!SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN
    , "Microsoft Access Driver (*.mdb)\0"
    , (LPCSTR)szTempPath)) {
    AfxMessageBox("配置ODBC数据源失败!");
    return FALSE;
}

如果要访问局域网上的Access文件,lpszAttributes可加入:Data Source=\\IP地址\\共享文件夹\\SOWM.mdb。



二、连接数据源

举例如下:

//测试是否处于打开状态
if (!m_Database.IsOpen()) {
    TRY
    {
        if (!m_Database.OpenEx(_T("SOWM"), CDatabase::noOdbcDialog))
            AfxMessageBox("Database Opened Failed.\n");
    }
    CATCH (CMemoryException, e)
    {
        TRACE("Database Opened Memory Exception occur.\n");
    }
    CATCH (CDBException, e)
    {
        TRACE("Database Opened DB Exception occur: %s\n", e->m_strError);
    }
    END_CATCH
}

析构函数中加入:

if (m_Database.IsOpen())
    m_Database.Close();

 注意:在stdafx.h中加入#include <afxdb.h>以支持数据库操作。

时间: 2024-12-17 05:15:03

MFC ODBC(一)的相关文章

VS2013 MFC ODBC连接SQL SERVER数据库编程(三)

VS2013 MFC ODBC连接SQL SERVER数据库编程(三) 转载请注明:http://blog.csdn.net/my_acm/article/category/2616577 继上一篇讲完对数据库的链接以及一些说明之后,本文将实现对数据库的增删查改等操作. 如上图所示就是最终完成的一个简单的小程序. 首先添加列表框的NM_CLICK响应程序.鼠标放在列表框上,右键->添加事件处理程序,找到MN_CLICK消息,添加并编辑,如下图所示. 在响应函数里面添加如下代码: 这样就实现了,点

VS2013 MFC ODBC连接SQL SERVER数据库编程(二)

VS2013 MFC ODBC连接SQL SERVER数据库编程(二) 转载请注明:http://blog.csdn.net/my_acm/article/category/2616577 在上一篇中,我已经说明了如何连接SQL SERVER数据库 下面参考http://wenku.baidu.com/link?url=h1rGgnhSmnclH2lFexHmlP_SZ2LUDRy5xM4wrbTfYlRXZLj2o0ugMT_PFGRxA1XI2pm8NUuEcKGQRA6D77ZieDoyM

MFC+ODBC+SQL Server+Visual C++

利用SQL Server 和MFC实现对数据库的简单管理 工具:SQL Server,VC6.0 步骤如下: 1.建立一个数据库studentinfo,再建立一个表testtable,表设计和初始值如下(仅仅是举个例子,后面操作都是基于此表的): 2.建立ODBC数据源 步骤如下: 1.进入计算机管理工具中的ODBC数据源 2.选择添加用户DSN 选择SQL Server Driver驱动,前提是已安装SQL Server Managemant Studio等相关组件工具 然后填写数据源名称和服

MFC ODBC(三)

4.SQL查询 记录集的建立实际上是一个查询过程,SQL的SELECT语句用来查询数据源.在建立记录集时,CRecordset会根据一些参数构造一个SELECT语句来查询数据源,并用查询的结果创建记录集.SELECT语句的句法如下: SELECT rfx-field-list FROM table-name [WHERE m_strFilter][ORDER BY m_strSort] 其中table-name是表名,rfx-field-list是选择的列(字段),WHERE和ORDER BY是

ADO,OLEDB,ODBC,DAO的区别

ODBC(Open Database Connectivity,开放数据库互连) 1992年,微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务.ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC.---出现的最早,但不总是万能. DAO(Data Access Object,数

MFC中找不到记录集类CRecordSet

1.添加类,选择MFC ODBC Consumer,这时会弹出一个对话框“MFC ODBC Consumer Wizard - 项目名称”. 2.点击Data Source按钮,弹出对话框“选择数据源”. 3.点击新建按钮,弹出对话框“创建新数据源”,在列表框中选择“Driver do Microsoft Access”,点击下一步:浏览文件选择你的ACCESS数据库,点击下一步,点击完成,弹出对话框“ODBC Microsoft Access 安装”. 4.点击选择按钮,找到你的ACCESS数

【转载】ADO,OLEDB,ODBC,DAO的区别

原文:ADO,OLEDB,ODBC,DAO的区别 ODBC(Open Database Connectivity,开放数据库互连) 1992年,微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务.ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC.---出现的最早,但不总是万能.

WIN32 DLL中使用MFC

最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修改预编译头文件(stdafx.h) 在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的 #include <afxwin

[转帖]ODBC、OLEDB、ADO、ADO.NET

一文详解ODBC.OLEDB.ADO.ADO.NET之间的关系 2019年01月16日 21:28:38 LoveMIss-Y 阅读数:66更多 所属专栏: 白话C#高级编程 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_27825451/article/details/86515141 相信看到这篇文章的人,心中肯定有这样的想法:ODBC.OLEDB.ADO.ADO.NET貌似都是访问数据库的东东,那么他们之间有什么区别,又有什么联系呢