【数据库】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 + ));
strDir.ReleaseBuffer(); TCHAR szTempPath[MAX_PATH + ] = {'\0'};
sprintf(szTempPath, "DSN=%s!DBQ=%s!DEFAULTDIR=%s!!", CString("SOWM")
, strDir + CString("\\SOWM.mdb"), strDir); int szTempPathLen = strlen(szTempPath);
for (int i = ; 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>以支持数据库操作。
【数据库】MFC ODBC(一)的更多相关文章
- 连数据库是ODBC好还是OLEDB好
1.连数据库是ODBC好还是OLEDB好?2.是不是只有微软的数据库才可以用OLEDB?3.要切换这两种连接,是不是只需要修改连接字符串?谢谢大家了,小弟对这三个问题不解 分享到: 2009-03 ...
- 【数据库】MFC ODBC(二)
三.CRecordset类 1.IsBOF与IsEOF (1)IsBOF 如果记录集没有记录,或已经向前游动到第一个记录之前,则返回非零:否则返回0.详细说明如下: 1)访问Open函数之后,如果记录 ...
- 【数据库】MFC ODBC(三)
4.SQL查询 记录集的建立实际上是一个查询过程,SQL的SELECT语句用来查询数据源.在建立记录集时,CRecordset会根据一些参数构造一个SELECT语句来查询数据源,并用查询的结果创建记录 ...
- 【数据库】MFC ODBC(四)
7.滚动记录 CRecordset提供了几个成员函数用来在记录集中滚动.当用这些函数滚动到一个新记录时,框架会自动地把新记录的内容拷贝到域数据成员中. void MoveNext( ); //前进一个 ...
- MFC+ODBC+SQL Server+Visual C++
利用SQL Server 和MFC实现对数据库的简单管理 工具:SQL Server,VC6.0 步骤如下: 1.建立一个数据库studentinfo,再建立一个表testtable,表设计和初始值如 ...
- 开放数据库互联ODBC配置(odbcconf)
开放数据库互连(ODBC)是微软引进的一种早期数据库接口技术,通过ODBC驱动程序可访问数据库数据:使用ODBC管理器可以完成对数据库的链接操作.笔者利用ODBC接口,将WINDOWS计数器信息写入到 ...
- VMware系统运维(四)SQL Server 2008 R2 新建数据库与ODBC数据
1.新建数据库,右击"新建数据库-." 2.设置数据库名,初始数据库大小,如果要配置数据库优化,可以考虑初始大小与日志大小,点击添加安装完成,即完成数据库新建. 3.ODBC数据源 ...
- VBA连接MySQL数据库以及ODBC的配置(ODBC版本和MySQL版本如果不匹配会出现驱动和应用程序的错误)
db_connected = False '获取数据库连接设置dsn_name = Trim(Worksheets("加载策略").Cells(2, 5).Value) ---- ...
- Access数据库通过ODBC导出到Oracle的两个小问题ora-24801\Ora-01401
问题描述:从access通过odbc导出到oracle出现 ora-24801 非法值 错误 与 Ora-01401 值过大的错误 问题分析:access里面的字段类型为“备注”,导入到ora ...
随机推荐
- mysql删除sql表添加别名及删除sql的注意事项
本文为博主原创,未经允许不得转载: 根据平常的习惯,个人会将操作的表后面添加一个别名,无论是使用还是不使用的时候,均是为了 修改还是扩展sql的时候更加安全,方便,快捷. 今天在写删除的sql时,对表 ...
- axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项
在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的 配置文件进行相互的调用. 在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功 ...
- Kafka 及 PyKafka 的使用
1. Kafka 1. 简介 Kafka 是一种分布式的.分区的.多副本的基于发布/订阅的消息系统.它是通过 zookeeper 进行协调,常见可以用于 web/nginx 日志.访问日志.消息服务等 ...
- POJ 1018 Communication System(DP)
http://poj.org/problem?id=1018 题意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1.m2.m3.....mn个厂家提供生产,而每个厂家生产 ...
- UVa 1606 两亲性分子
https://vjudge.net/problem/UVA-1606 题意:平面上有n个点,每个点为白点或者黑点.现在需放置一条隔板,使得隔板一侧的白点数加上另一侧的黑点数总数最大.隔板上的点可以看 ...
- SVN基本命令总结
1.svn add [path] 预定添加文件或者目录到版本库,这些add的文件会在下一次提交文件时同步到版本服务器. 2.svn commit [path] 提交文件到版本服务器. 3.svn co ...
- Spring boot 中Hibernate 使用
spring.jpa.properties.hibernate.hbm2ddl.auto=有四种配置方式,分别如下: 是hibernate的配置属性,其主要作用是:自动创建.更新.验证数据库表结构.该 ...
- 【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
http://blog.csdn.net/caoshangpa/article/details/51416077 一.在pro中设置运行时库 最近在用Qt5.6.0(VS2013版本)调用一份用Vis ...
- idea运行main方法报错,提示Shorten command line for xxx
在Intell IDEA运行main函数的时候遇到了如下错误: Error running' xxxxxx': Command line is too long. Shorten command li ...
- resin中关于url rewrite来传递jsessionid的问题
最近两天在项目中碰到,一个很奇怪的问题.同一个账号多次切换登录时,会出现这个账号的信息在session中找不到,虽然可以登录成功,但是之后这个用户信息好像没有保存到session中一样,或者是被改变了 ...