用MFC_ODBC操作Access数据库

合集下载

Win8系统上使用ODBC连接Access2013数据库

Win8系统上使用ODBC连接Access2013数据库

在Win8系统上使用ODBC连接Access2013数据库
一、使用access2013创建数据库及数据库表
1、打开Access2013,点击空白桌面数据库
2、自定义数据库名以及数据库存储位置
Access支持.accdb和.mdb两种格式,例如:这里我们取名为DBTest.mdb
文件名和路径都选好后,点击创建,数据库就建好了
3、开始建立数据库表选择“表设计”
设置表字段及属性
设置username为主键。

在灰色部分点击鼠标右键,进行选择。

表建好后,Ctrl+s保存表,就会提示你为你的数据库表取名。

按以上步骤就完成了access数据库及数据库表的建立
二、使用ODBC连接Access2013数据库
1、找到管理工具
打开控制面板,在搜索中输入odbc
2、打开odbc开始进行连接操作
点击添加
如图下图进行选择,然后点击完成。

自定义数据源名称
选择之前建立DBTest.accdb的数据库
点击确定
按下图进行操作,就完成了odbc连接access2013数据库的操作。

如何通过ODBC将Access数据库文件

如何通过ODBC将Access数据库文件

如何通过ODBC将Access数据库文件(.mdb)导入sql server2000(一)建立ODBC立数据源打开”控制面板“下”管理工具“中的”数据库源“;按”添加“添加一个新的数据源,在选择栏里选”Driver do microsoft Access (*.mdb)”,完成后将出现一个框在”数据库源“里面输入你想写的名称,我们在此建立的数据源名称为“Access导入sql”选择好数据库即可建立了(二)导入SQL2000打开SQL2000企业管理器,进入数据库,新建一个空的数据库“twt001”;按鼠标右键,选择“所有任务”下“导入数据”,按“下一步”继续,在数据库源下拉但中选择”Driver do microsoft Access(*.mdb)“【如果用户/系统下拉列表没有DSN,新建一个DSN文件,选择文件DSN,选择刚刚新建的DSN文件】按”下一步“;将导入到sql数据库中"目的"不需要修改,选择服务器(一般下为自己的本机“local“,也可以选择服务器地址或者局域网地址,确定你的权限是否可以操作,),“使用WINDOWS 身份验证“指用自己的系统管理员身份操作,“使用SQL身份操作验证“可以用于网站的操作,推荐用后者;选上“使用SQL身份操作验证“后,填写你的用户名和密码,我自己选择的是系统默认号码“sa“,“****“,数据库选择刚新建的“twt001“,按“下一步“;这一步的两个单项选择,“从数据源复制表和视图“与“用一条查询指令指定要传输的数据“,选择前者,按“下一步“继续;这里将出现你自己ACCESS数据库的表,按“全选“或自己希望导入的表后,下一步;“DTS导入/导出向导“,看“立即运行“被选中按“下一步“,按“下一步“继续;“完成”当出现“已经成功把XXX个表导入到数据库“的字样,而且所有的表前面都有绿色的勾,就表示成功导入所有数据,如果中途出现问题或者表前面有红色的叉的话,说明该表没有成功导入,这时就要回去查看自己的操作是否正确了.点"确定"数据修改 (重要,)1,由于SQL2000里面没有“自动编号“,所以你的以“自动编号“设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的“标示“选择“是“,种子为“1“,增量为“1“,2,另外,ACCESS2000转换成SQL2000后,原来属性为“是/否“的字段将被转换成非空的“bit“,这时候你必须修改成自己想要的属性了;。

MFC通过ADO操作Access数据库

MFC通过ADO操作Access数据库

MFC通过ADO操作Access数据库我在《VC知识库在线杂志》第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读、写Excel表格文件”和“直接通过DAO读、写Access文件”,先后给大家介绍了ODBC和DAO两种数据库访问技术的基本使用方法,这次要给大家介绍的是ADO数据库访问技术的使用方法。

ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。

ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。

由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。

关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。

让我们直接步入主题:如何掌握ADO这种数据库访问技术。

ADO的操作方法和前面讲过的DAO的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用VC6.0做了一个示例程序——AdoRWAccess,这个示例程序可以直接通过ADO来操作Access数据库,示例程序的运行效果如下图所示:在示例程序中我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库,这也和上两篇文章的示例源码中的库结构相兼容。

下面让我们看看ADO数据库访问技术使用的基本步骤及方法:首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。

MFC ODBC数据库访问技术

MFC ODBC数据库访问技术

4)用CDatabase::ExecuteSQL()执行SQL语句
对于返回结果集的一般查询,使用CRecordset很容 易。然而,可以不用CRecordset执行不返回结果集 的SQL语句,而是通过调用CDatabase类的 CDatabase::ExecuteSQL()成员函数执行。其函数 原型如下:
MFC ODBC数据库访问技术
在Visual C++中,MFC封装的ODBC数据库 类包括CDatabase(数据库类)、 CRecordSet(记录集类)和CrecordView (记录视图类),更为用户提供了切实可行 的解决方案。
1.1 MFC的ODBC过程
使用MFC ODBC类访问数据库,主要有以下几个步 骤: 1.建立数据库 建立数据库就是用户根据自己的需要设计数据库中 的表及各表之间的依赖关系。要想设计一个完整的 数据库,首先必须了解数据库的基本知识。
void ExecuteSQL(LPCTSTR lpszSQL);
Throw(CEBException);
参数lpszSQL是一个带SQL语句字符串的指针。
的使用
CRecordset类派生于CObject类。虽然CDatabase类允许对一 个数据库执行SQL语句,但实际上是CRecordset 类提供了应 用程序与数据交互的实际操作。CRecordset类用来封装数据 库的查询,包括记录的插入、修改、删除等操作。
记录集对象一般都可以进行如下的操作:在 记录间滚动、更新记录并设定锁定模式、以 记录信进行过滤、限制对数据源可选记录的 选择、对记录排序、当完成操作后调用 Close()函数销毁对象等。
3.CRecordView类的使用
CRecordView类对象直接与CRecordset(记录 集)类对象连接,为该记录集提供显示的视图。 它是数据库操作的界面,提供了以下几个操 作:移动到第一个记录、下一个记录、前一 个记录、最后一个记录,还可以更新数据库 中当前视图所显示记录。

VS2015与Access数据库ODBC连接

VS2015与Access数据库ODBC连接

VS2015环境下与Access数据库的ODBC连接开发环境和工具:win10家庭版+vs2015+Access2010。

1.首先在Access2010 建立好自己的数据库,这里不详细介绍了,记住保存的路径。

第一步是登陆数据源(1)打开控制面板->管理工具->ODBC数据源32位,在用户选项卡下点击添加(2)选择图中所示驱动程序(这也是与VC6.0的不同)(3)起一个数据源名(记住这个名,以后会用到),说明可以随便稍作描述。

点击数据库下的选择,选择已经建好的Aceess数据库、表,点击确定、确定。

至此数据源的登陆完成。

接下来要到VS2015 的环境中添加与数据库有关的类2。

添加表类。

与VC6.0不同的是,VS2015里面其实是有专门的ODBC使用者设置,(1)右击类视图下的工程名->添加->类,(2)选择MFC下的MFC ODBC使用者,直接点击添加;(3)然后来到这个界面,点击数据源,(4)出现登录名和密码,这是在高选项中设置的,我的没有设置过,不用管,直接点击确定;(5)切换到机器数据源选项卡;选择所需要的数据源(6)选择一个数据源中的Access数据表,点击确定;(7)接下来起一个方便记忆的类名,选择动态集;在这说一下动态集与快照的特点记录集主要分为快照(Snapshot)和动态集(Dynaset)两种。

CRecordset类对这两种支持。

这两种记录集的区别在于它们对别的应用改变数据源记录采取的是不一样的处理方法。

快照型(Snapshot)记录集提供了对数据的静态视。

快照是个很形象的术语,就像是对数据源的某些记录照了一张照片一样。

当别的用户改变了记录时(包括修改、添加和删除),快照中的记录并不受影响,意思就是,快照不反映别的用户对数据源记录的改变。

直到调用了CRecordset::Requery重新查询后,快照才会反映变化。

对于像产生报告或执行计算这样的不希望中途变动的工作,快照是很有用的。

MFC-Access数据库连接 (1)

MFC-Access数据库连接 (1)
4、其次调用遍历数据库方法AccessDBApp::GetResult(_ConnectionPtr m_pConnection,CString sql),用m_Recordset接收遍历结果
5、定义一个_variant_t对象var和一个CString对象result
while(!m_pRecordset->adoEOF)//当下一条记录不为空
try{
m_pRecordset->MoveFirst();
m_pRecordset->Move(long(curSel));//先移动到第一条记录,然后相对第一条记录移动记录指针以找到需修改目标
m_pRecordset->Delete(adAffectCurrent);//参数adAffectCurrent为删除当前记录
1、在头文件中定义一个_ConnectionPtr对象m_pConnection,用于连接上数据库;一个_RecordsetPtr对象m_pRecordset,用于遍历和接收数据库数据
2、在应用类中include一个AccessDBApp.h头文件
3、首先调用连接数据库方法AccessDBApp::GetConnection(),它会返回一个_ConnectionPtr类型的值,用m_pConnection接收
---------修改记录:
可以将记录指针移动要修改记录的位置处,直接用PutCollect(字段名,值)将新值写入并Update()更新数据库即可。也可以直接查找到要修改的记录然后用PutCollect(),Update()更新数据到数据库。
try{
{
var = m_pRecordset->GetCollect("字段名");

简介MFC访问数据库的几种方式

简介MFC访问数据库的几种方式

简介MFC访问数据库的几种方式简介MFC访问数据库的几种方式2010-04-22 09:06从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口。

本文主要介绍以下五种: 1.ODBC API;2.MFC ODBC类;3.MFC DAO 类;(数据访问对象)4.MFC的OLE/DB;5.ActiveX数据对象(ADO)。

6.RDO远程数据访问1.开放数据库连接(ODBC API):提供了一个通用的编程接口,允许程序与多种不同的数据库连接。

它为Oracle,SQL Server,MS Excel等都提供了驱动程序,使得用户可以使用SQL语句对数据库进行直接的底层功能操作。

在使用ODBC API时,用户须引入的头文件为"sql.h","sqlext.h","sqltypes.h"。

用ODBC API创建数据库应用程序遵循一定的基本步骤:第一步是分配ODBC环境,使一些内部结构初始化。

完成这一步,须分配一个SQLHENV类型的变量在ODBC环境中做句柄使用。

第二步是为将要使用的每一个数据源分配一个连接句柄,由函数SQLALLocHandle()完成。

第三步是使用SQLConnect()把连接句柄与数据库连接,可以先通过SQLSetConnectAttr()设置连接属性。

然后就可以进行SQL语句的操作,限于篇幅,相关的函数就不具体介绍了,读者可以参考相关书籍。

操作完成后,用户取回相应的结果,就可以取消与数据库的连接。

最后需要释放ODBC环境。

ODBC API的特点是功能强大丰富,提供了异步操作,事务处理等高级功能,但相应的编程复杂,工作量大。

2.MFC ODBC类:MFC1.5后的版本里引入封装了ODBC 功能的类。

通过这些类提供与ODBC的接口,使得用户可以不须处理ODBC API中的繁杂处理就可以进行数据库操作。

MFC_ODBC_数据库访问技术

MFC_ODBC_数据库访问技术

MFC_ODBC_数据库访问技术16.2 MFC ODBC 数据库访问技术16.2.1概述ODBC是⼀种使⽤SQL的程序设计接⼝。

使⽤ODBC让程序的编写避免了与数据库相连的复杂性。

Studio为⼤多数标准的数据库格式提供了32位的ODBC驱动器,Paradox、ForPro、Excel、Oracle等。

如果⽤户需要⽤其他的数据库格式,⽤户需要相应的ODBC驱动以及DBMS。

MFC的ODBC类对较复杂的ODBC API进⾏了封装,提供了简化的调⽤接⼝,从⽽⼤⼤⽅便了数据库应⽤程序的开发。

程序员不必了解ODBC API和SQL的具体细节,利⽤ODBC类就可以完成对数据库的⼤部分操作。

MFC 的ODBC类主要包括如下5类:● CDatabase类:主要功能是建⽴与数据源地联接。

● CRecordset类:代表从数据源选择的⼀组记录(记录集)● CRecordView类:提供了⼀个表单视图与某个记录集直接相连,利⽤对话框数据交换机制(DDX)在记录集与表单视图的空间之间传输数据。

● CFieldExchange类:⽀持记录字段数据交换(DFX)应的的数据库的表的字段之间的数据交换。

● CDBException类:代表ODBC类产⽣的异常。

16.2.2使⽤MFC ODBC编程建⽴应⽤程序编程模型相对于使⽤ODBC API,使⽤MFC ODBC访问数据库简单得多,其步骤如下:●⾸先创建数据库并在系统中设置好;●使⽤CDatabase打开数据源的连接,如果利⽤AppWizard⽣成⼀个ODBC数据库应⽤程序,则会⾃动完成操作。

●使⽤ClassWizard想到加⼊由CRecordset类派⽣的⽤户记录集,完成对数据库表的绑定。

●创建记录积累对象,如果利⽤AppWizard⽣成⼀个ODBC数据库应⽤程序,则会⾃动在⽂档类中创建。

●使⽤记录集对象对数据库进⾏遍历、增加、删除、和修改等操作。

●使⽤CDatabase类的ExecuteSQL函数直接执⾏SQL命令。

利用DSN连接ACCESS数据库

利用DSN连接ACCESS数据库

利用DSN连接ACCESS数据库1、打开控制面板-管理工具-数据源(ODBC)2、选择系统DSN----添加选择第二项,Driver do Microsoft Access(*mdb)按完成3、在数据源名的地方起个名,我们起个ccc4、单击选择,找到你计算机上的数据库文件,我的在e:\asp\lianxi.mdb,最后确定5、所有的都确定6、接下来我们就可以使用我们所建立的连接了7、接下来我们用下面的文件来测试一下<html><body><h2 align="center">我的通讯录</h2><%'以下连接数据库,建立一个Connection对象实例connDim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open "ccc"//这个地方使用刚才起的数据源的名字'以下建立记录集,建立一个Recordset对象实例rsDim rsSet rs=conn.Execute("Select * From lianxi") //是数据表的名字'以下利用表格显示记录集中的记录%><table border="1" width="100%" align="center"><tr bgcolor="#E0E0E0"><th>姓名</th><th>性别</th><th>年龄</th><th>电话</th><th>E-mail</th><th>简介</th><th>添加日期</th></tr><%Do While Not rs.Eof '只要不是结尾就执行循环%><tr><td><%=rs("strName")%></td><td><%=rs("strSex")%></td><td><%=rs("intAge")%></td><td><%=rs("strTel")%></td><td><a href="mailto:<%=rs("strEmail")%>"><%=rs("strEmail")%></a> </td><td><%=rs("strIntro")%></td><td><%=rs("dtmSubmit")%></td></tr><%rs.MoveNext '将记录指针移动到下一条记录Loop%></table></body></html>下面是我的数据表的格式表名为lianxi.mdb。

MFC_ODBC访问数据库

MFC_ODBC访问数据库

主要内容撒:的撒旦将ODBC API封装在类CDatabase、CRecordSet、CFieldExchange、CRecordView和CDBException中使用MFC ODBC开发数据库应用程序的一般步骤使用AppWizard访问数据库使用类CDatabase连接数据库使用类CRecordSet打开记录集、获取数据使用类CRecordSet的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()和IsEOF()进行记录集的遍历使用类CRecordSet的函数AddNew和Update增加记录使用类CRecordSet 的函数Edit和Update修改记录使用类CRecordSet的函数Delete删除记录使用类CDatabase的函数ExecuteSQL直接执行SQL命令使用类CDatabase 的函数BeginTrans、CommitTrans和Rollback处理事务目录MFC OBDC技术 (3)概述 (3)CDatabase类操作数据源 (3)CFieldExchange类处理数据交换 (6)CRecordView类显示记录 (6)CDBException类处理异常 (7)使用MFC ODBC编程建立应用程序 (7)MFC ODBC编程模型概述 (7)通过AppWizard建立数据库应用程序 (8)使用CDatabase类方法打开数据源 (8)使用CRecordste类打开记录集 (10)绑定记录集 (12)参数化记录集和查询 (13)遍历记录集合 (15)书签定位和绝对定位 (16)获取记录集的数据 (18)添加记录 (19)删除记录 (21)修改记录 (21)直接执行SQL语句(增加、删除表等) (22)事务处理 (23)使用多记录集 (25)MFC OBDC技术概述MFC的ODBC类对较复杂的ODBC API进行了封装,提供了简化的调用接口。

vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008)

vs2010版本的C++OBDC方式连接数据库(ACCESS和SQL2008)
: CRecordset(pdb)
{
m_stuid = L"";
m_stuname = L"";
m_stuclass = L"";
m_usualscore = 0;
m_testscore = 0;
m_totalscore = 0;
m_nFields = 6;
m_nDefaultType = dynaset;
首先是用ACCESS方式连接数据库:
以前VC6.0怎么连接相信大家都能够得到了,他是通过首先打开控制面板->管理工具->数据源(ODBC)
就到了图一界面:
图一
然后点击右边的添加按钮:
很多书里面都叫添加时候选第二项,也就是图二里面所以深色背景那项:
图二
Vc6.0的操作就是这样选择。但在VS2010里面就不对。我用的是VS2010
}
/////////////////////////////////////////////////////////////////////////////
// Cscore诊?断?
#ifdef_DEBUG
voidCscore::AssertValid()const
{
CRecordset::AssertValid();
而不管是这里讲的ODBC模式连接SQL 还是ADO方式这种比较方便的方式连接都需要登录名和密码。你在单击上做练习的话 当然是不需要什么登录名的了,window验证,开机就可以用自然很方便,但是其他软件要访问它,必然要给他权限和接口,所以选择混合模式,设置SQL登录方式中用户名sa的密码。注意:密码一定要复杂不然还通不过。这是其一。
图十一

MFC和ACCESS数据库的连接

MFC和ACCESS数据库的连接

MFC和ACCESS数据库的连接(C_Answers团队开发学生信息管理系统所用)1.通常在应用类(APP类)中进行数据库的连接。

(不在dialog类中,,因为要在出现对话框前已经建立好数据库的连接)第一步:数据库操作准备1)导入ADO动态链接库。

在stdafx.h中。

在工程的stdafx.h中加入如下语句:#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")这一句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会我们声称msado15.tlh和msado15.tl两个C++头文件来定义ADO库。

即加载ADO动态连接库。

其中no_namespace表明不使用命名空间,rename("EOF","adoEOF")表明把ADO中用到的EOF改为adoEOF,防止命名冲突。

注意:改代码需要在一行中完成,如果写成两行或者多行,末行要加上"\"符号,表示把这几行看成一行。

2)初始化OLE/COM环境,在应用类(app)的lnitlnstance成员函数中。

方法:在应用类的lnitlnstance成员函数中,添加AfxOlenit函数(在退出应用时,该函数也将负责COM资源的释放)BOOL CMy13App::InitInstance(){AfxEnableControlContainer();//添加的初始化OLE/COM环境代码if(!AfxOleInit()){AfxMessageBox("初始化OLE DLL失败!");return FALSE;}第二步:连接数据库1)先在APP头文件中声明一个connection指针。

mfc odbc 编程

mfc odbc 编程

MFC (Microsoft Foundation Classes) 是一种微软开发的跨平台应用程序框架,用于创建Windows 下的客户端和服务器应用程序。

ODBC (Open Database Connectivity) 是微软的开放数据库连接标准,允许应用程序与各种数据库连接。

在MFC 中使用ODBC 进行数据库编程是一个常见的做法。

以下是一个简单的步骤来实现MFC ODBC 编程:1. **设置ODBC 数据源**:在Windows 系统中,你需要首先设置ODBC 数据源,这将告诉应用程序如何与数据库连接。

2. **创建MFC 应用程序**:使用MFC 创建一个应用程序,你可以选择一个MFC 模板,例如"MFC ODBC AppWizard" 模板。

3. **连接到ODBC 数据源**:在你的MFC 应用程序中,你可以使用`CDatabase` 类来连接到ODBC 数据源。

例如:```cpp// 初始化ODBC 库CODBC::Initialize();// 连接到ODBC 数据源CDatabase db;if (!db.Open(NULL, // 默认ODBC 数据源"Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\my.mdb", // 数据库路径CDatabase::modeReadOnly)) // 只读模式{// 处理连接错误}```4. **执行查询和更新**:一旦你连接到数据库,你可以执行查询和更新。

例如:```cpp// 查询数据CRecordset rs(&db);if (!rs.Open(CRecordset::forwardOnly, "SELECT * FROM myTable")){// 处理查询错误}else{// 处理查询结果while (!rs.IsEOF()){// 处理每一行数据rs.MoveNext();}}// 更新数据CString query = "UPDATE myTable SET myField = 'new value' WHERE someField = 1";db.ExecuteSQL(query);```5. **处理错误和异常**:在数据库编程中,错误和异常处理是非常重要的。

MFC+ODBC操作Access数据库

MFC+ODBC操作Access数据库

UpdateData(false); m_pt->Invalidate(); } 注:如果要修改窗口标题,可以去 CMainFrame 类找到 PreCreateWindow()利用 cs 变 量来设置,在函数 PreCreateWindow()添加如下代码: cs.style &= ~FWS_ADDTOTITLE; cs.lpszName = "0706034138 张新亮";//引号里可以换成任何你想的名称。
m_set.AddNew(); UpdateData(true); m_set.m_column1= m_e1; m_set.m_column2 = m_e2; m_set.m_column3 = m_e3; m_set.m_column4 = m_e4; m_set.m_column5 = m_e5; m_set.m_VC__ = m_e6; UpdateData(false); m_set.Update(); m_set.Close(); m_pt->Invalidate(); } } void CTestDlg::OnButtonAlter() { // TODO: Add your control notification handler code here if (m_set.IsOpen()) { m_set.Close(); } m_set.Open(); if (!m_set.CanUpdate()) { AfxMessageBox(_T("无法更新")); } else { UpdateData(true); for (int i=0;i<m_set.GetRecordCount();i++) { if(strcmp(m_set.m_column1,m_e1)) { m_set.MoveNext(); } else { m_set.Edit(); m_set.m_column1 = m_e1;

mfc使用ado连接access数据库

mfc使用ado连接access数据库

1.设置数据源打开控制面板--->系统和安全--->管理工具--->ODBC Data Sources(32 bit)这里需要注意的是,vc6.0是32位的,因此这里的数据源也必须是32位的,否则是连接不上的,这里我使用的是ACCESS数据库,数据源的配置如下:2.创建包含数据库的MFC对话框(其它也可以)工程,新建ADOConn类在工程中我们需要新建一个普通类ADOConn然后在ADOConn类头文件中加入以下导入声明和变量、函数声明:ADOConn.h---------------------------------------------------------------------------------#import "c:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")//引入ADO库文件public:_ConnectionPtr m_pConnection;//连接对象指针_RecordsetPtr m_pRecordset;//记录集对象指针_CommandPtr m_pCommand;//命令对象指针ADOConn();virtual ~ADOConn();BOOL OnInitADOConn(CString Connstr);//初始化连接数据库BOOL ExecuteSQL(CString strSQL);//执行SQL语句BOOL ExecuteProc(CString ProcName);//执行存储过程BOOL GetCollect(CString FieldName,CString & strDest);//获得某个字段的值 BOOL GetRecordSet(CString strSQL);//获得记录集int GetRecordCount();//获得记录数//判断表TableName中是否存在字段KeyName的值为KeyValue的记录 BOOL RecordExist(CString TableName,CString KeyName,CString KeyValue); BOOL MoveFirst();//移动到第一条记录BOOL MoveNext();//移动到下一条记录BOOL Close();//关闭记录集BOOL CloseADOConnection();//关闭连接void dump_com_error(_com_error &e);//错误详细信息ADOConn.h---------------------------------------------------------------------------------然后在ADOConn类源文件中加入函数实现:ADOConn.cpp---------------------------------------------------------------------------------ADOConn::ADOConn()//构造函数{}ADOConn::~ADOConn()//析构函数{}BOOL ADOConn::OnInitADOConn(CString ConnStr)//初始化连接数据库{try{m_pRecordset.CreateInstance("ADODB.Recordest");m_pCommand.CreateInstance("mand");m_pConnection.CreateInstance("ADODB.Connection");_bstr_t strConnect=(_bstr_t)ConnStr;m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);AfxMessageBox("数据库连接成功");return true;}catch(_com_error e){AfxMessageBox("数据库连接失败");return false;}}BOOL ADOConn::ExecuteSQL(CString strSQL)//执行SQL语句{try{m_pConnection->BeginTrans();m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);m_pConnection->CommitTrans();return true;}catch(_com_error e){m_pConnection->RollbackTrans();AfxMessageBox("执行SQL语句失败");return false;}}BOOL ADOConn::ExecuteProc(CString ProcName)//执行存储过程{m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandText=_bstr_t(ProcName);m_pCommand->Execute(NULL,NULL,adCmdStoredProc);return true;}catch(_com_error e){AfxMessageBox("执行存储过程失败");return false;}}BOOL ADOConn::GetCollect(CString FieldName,CString & strDest)//获得某个字段的值{VARIANT vt;try{vt=m_pRecordset->GetCollect(_variant_t(FieldName));switch(vt.vt){case VT_BSTR:strDest=(LPCSTR)_bstr_t(vt);break;case VT_DECIMAL:strDest.Format("%d",vt.intVal);break;case VT_DATE:{DATE dt=vt.date;COleDateTime da=COleDateTime(dt);strDest.Format("%d-%d-%d %d: %d: %d",da.GetYear(),da.GetMonth(),da. GetDay(),da.GetHour(),da.GetMinute(),da.GetSecond());break;}case VT_NULL:strDest="";break;}return true;}catch(_com_error e){AfxMessageBox(e.ErrorMessage());return false;}return true;}BOOL ADOConn::GetRecordSet(CString strSQL)//获得记录集{m_pCommand->CommandText=(_bstr_t)strSQL;m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandType=adCmdText;m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdText);return true;}catch(_com_error e){AfxMessageBox("执行select语句失败");return false;}}int ADOConn::GetRecordCount()//获得记录数{DWORD nRows = 0;nRows=m_pRecordset->GetRecordCount();if(nRows==-1){nRows=0;if(m_pRecordset->adoEOF!=VARIANT_TRUE) m_pRecordset->MoveFirst();while(m_pRecordset->adoEOF!=VARIANT_TRUE){nRows++;m_pRecordset->MoveNext();}if(nRows>0)m_pRecordset->MoveFirst();}return nRows;}//判断表TableName中是否存在字段KeyName的值为KeyValue的记录BOOL ADOConn::RecordExist(CString TableName,CString KeyName,CString KeyValue) {CString countstr;countstr="select * from "+TableName+"where"+KeyName+"=\'"+KeyValue+"\'"; BOOL ret =GetRecordSet(countstr);if(ret){int ret2=GetRecordCount();if(ret2) return true;else return false;}else return false;}BOOL ADOConn::MoveFirst()//移动到第一条记录{try{m_pRecordset->MoveFirst();return true;}catch(_com_error e){AfxMessageBox("结果集移到第一个失败");return false;}}BOOL ADOConn::MoveNext()//移动到下一条记录{try{m_pRecordset->MoveNext();return true;}catch(_com_error e){AfxMessageBox("结果集移到下一个失败");return false;}}BOOL ADOConn::Close()//关闭记录集{try{m_pRecordset->Close();return true;}catch(_com_error e){AfxMessageBox("关系结果集失败");return false;}}BOOL ADOConn::CloseADOConnection()//关闭连接{try{if(m_pConnection->State){m_pConnection->Close();m_pConnection=NULL;return true;}else{AfxMessageBox("关闭数据库失败");return false;}}catch(_com_error e){AfxMessageBox("关闭数据库失败");return false;}}void ADOConn::dump_com_error(_com_error &e) //错误详细信息{CString ErrorStr;_bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());ErrorStr.Format( "/n/tADO Error/n/tCode = %08lx/n/tCode meaning= %s/n/tSource = %s/n/tDescription = %s/n/n",e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource,(LPCTSTR)bstrDescription );//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息::OutputDebugString((LPCTSTR)ErrorStr);#ifdef _DEBUGAfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);#endif}ADOConn.cpp---------------------------------------------------------------------------------3.编写代码连接数据库(这里我用的是ACCESS数据库)这里我们可以在任意.CPP(源文件)中声明ADOConn ado;然后在其他.CPP中使用的时候,只需要在头部加上extern ADOConn ado;当然,在定义的类中同样可以使用,举例如下:然后进行连接数据库的代码如下://进行数据库连接if(!AfxOleInit()){AfxMessageBox("OLE initialzation failed");return FALSE;}CString str="DSN=rapidquery";//这个字符串中的rapidquery就是我们之前设置的数据源的名称ado.OnInitADOConn(str);//调用dao对象去连接数据库,连接成功会提示,连接失败也会提示。

mfc访问mysql数据库的方法

mfc访问mysql数据库的方法

mfc访问mysql数据库的方法MFC是Microsoft Foundation Classes的缩写,是一种用于开发Windows应用程序的C++框架。

在MFC中,我们可以使用各种方法来访问MySQL数据库。

一种常见的方法是使用ODBC(Open Database Connectivity)来连接和操作数据库。

首先,我们需要在项目中配置ODBC数据源。

可以通过控制面板的ODBC 数据源管理器来完成这一步骤。

在配置完成后,我们可以在MFC应用程序中使用CDatabase类来连接到MySQL数据库。

下面是一个简单的示例代码:```#include <afxdb.h>// ...void AccessMySQLDatabase(){CDatabase database;// 构建连接字符串CString strConnect;strConnect.Format(_T("ODBC;DSN=MySQLDataSourceName;UID=Username;PWD=P assword"));// 连接数据库if(database.Open(NULL, FALSE, FALSE, strConnect)){// 执行SQL查询或更新语句CString strSQL;strSQL.Format(_T("SELECT * FROM TableName"));CRecordset recordset(&database);if(recordset.Open(CRecordset::forwardOnly, strSQL)){// 遍历记录集并获取数据while(!recordset.IsEOF()){// 通过GetFieldValue方法获取字段值CString fieldValue;recordset.GetFieldValue(_T("FieldName"), fieldValue); // 处理数据...recordset.MoveNext();}recordset.Close();}// 关闭数据库连接database.Close();}}```上述代码通过CDatabase类连接到MySQL数据库,并执行了一个简单的SELECT语句来获取表中的数据。

用MFC ODBC操作Access数据库

用MFC ODBC操作Access数据库

用MFC ODBC操作Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟摘要:本文简要介绍了MFC ODBC的工作原理,并且通过一个应用实例,讨论了利用MFC ODBC技术实现对Access数据源的显示,在此基础上,分析了如何设计以达到利用MFC ODBC来实现修改、增加、删除Access数据源中的记录的功能。

关键词:VC;MFC ODBC;Access;数据库MFC ODBC数据库简述开放数据互连(Open Database Connectivity,简称ODBC)是一种数据库的互操作平台,通过经严格定义的各个级别的ODBC接口和客户系统的初始装置,能够为应用程序提供数据库类型透明性和位置透明性,让应用程序的编写者避免了与数据源相联的复杂性。

MFC的数据库扩展部分封装了使用ODBC数据资源的细节,应用程序可以直接使用MFC中的数据库扩展类,来操纵ODBC驱动程序管理器,访问数据库。

进行MFC ODBC数据库开发时,所需的基础工具就是MFC ODBC数据库类的使用。

利用MFC ODBC开发就是利用MFC ODBC数据库类来操纵ODBC数据源。

Visual C++的大多数ODBC访问是通过MFC来完成的。

Visual C++的MFC类库定义了几个数据库类,在利用MFC编程时常常用到,它们是CDatabase(数据库类)、CRecordSet(记录集类)、和CRecordView(可视记录集类)。

对于MFC ODBC数据库类来说,CDatabase类对象表示一个同数据源的连接,通过它可以对数据源进行操作。

而CRecordSet对象代表从数据源中选择的一组记录的集合,也就是通常所说的记录集对象。

CRecordSet对象通常用于两种形式:动态集(dynasets)和快照集(snapshots)。

动态集能与其他用户所做的更改保持同步,快照集则是数据的一个静态视图。

利用ODBC操作数据库

利用ODBC操作数据库

一,数据库文件的建立
首先建立一个数据库,打开office access软件,我用的是10版本的,
打开后新建数据库,在表中输入你所需要建立的数据库。

建立好之后保存,2010版本的access默认保存的是accdb类型的文件,这也就意味的后期对odbc数据源的添加也要进行一定的变动,当然,如果你利用的是07之前的office,大可不用担心。

二,ODBC数据源的添加
首先,打开控制面板-管理工具-ODBC数据源(32位)。

接下来,对用户数据源进行添加。

在这,要注意由于建立的是accdb文件,所以你要选择下面的支持此文件的驱动程序,不能像上课演示一样只选择支持mdb文件的驱动。

接下来,对数据源名进行命名,选择数据库
然后在找到你的数据库文件所保存的路径,选择这个文件,点击确定即可。

三,通过MFC ODBC操作access数据库
首先,打开vc++6.0,然后建立mfc,然后选择单文件或者多文件,接下来,要选择基于数据库支持的文件,ODBC中选择你所添加的数据源。

然后,选择你所建立的表
点击OK,然后就可以进行对MFC的编辑了,
建立静态文本以及编辑框,然后通过类向导,对编辑框成员变量进行添加,在这对成员变量的名字点击下拉框,根据你的编辑框所对应的数据,进行点击选择,
最后,进行程序的验证即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用MFC ODBC操作Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟摘要:本文简要介绍了MFC ODBC的工作原理,并且通过一个应用实例,讨论了利用MFC ODBC技术实现对Access数据源的显示,在此基础上,分析了如何设计以达到利用MFC ODBC来实现修改、增加、删除Access数据源中的记录的功能。

关键词:VC;MFC ODBC;Access;数据库MFC ODBC数据库简述开放数据互连(Open Database Connectivity,简称ODBC)是一种数据库的互操作平台,通过经严格定义的各个级别的ODBC接口和客户系统的初始装置,能够为应用程序提供数据库类型透明性和位置透明性,让应用程序的编写者避免了与数据源相联的复杂性。

MFC的数据库扩展部分封装了使用ODBC数据资源的细节,应用程序可以直接使用MFC中的数据库扩展类,来操纵ODBC驱动程序管理器,访问数据库。

进行MFC ODBC数据库开发时,所需的基础工具就是MFC ODBC数据库类的使用。

利用MFC ODBC开发就是利用MFC ODBC数据库类来操纵ODBC数据源。

Visual C++的大多数ODBC访问是通过MFC来完成的。

Visual C++的MFC类库定义了几个数据库类,在利用MFC编程时常常用到,它们是CDatabase(数据库类)、CRecordSet(记录集类)、和CRecordView(可视记录集类)。

对于MFC ODBC数据库类来说,CDatabase类对象表示一个同数据源的连接,通过它可以对数据源进行操作。

而CRecordSet对象代表从数据源中选择的一组记录的集合,也就是通常所说的记录集对象。

CRecordSet对象通常用于两种形式:动态集(dynasets)和快照集(snapshots)。

动态集能与其他用户所做的更改保持同步,快照集则是数据的一个静态视图。

每一种形式在记录被打开时都提供一组记录,区别在于,当用户在一个动态集里滚动到一条记录时,有其他用户或是应用程序中的其他记录集所做的更改就会相应地显示出来。

CRecordView类对象能以控制的形式显示数据库记录。

这个视图是直接连接到一个CRecordSet对象的表视图。

一个应用实例本实例是某项目中的一部分,目的是实现MFC ODBC数据库与Access数据表格之间的相互操作。

包括用Visual C++中的MFC ODBC技术实现对Access数据表格的内容的显示、添加、修改和删除的功能。

1、ODBC数据源的创建笔者使用的操作系统为Windows XP,工具是Visual C++6.0。

此例中建立的Access表格取名为“plc”。

在“控制面板”中双击“管理工具”图标,然后在新出现的窗口中双击“数据源(ODBC)”,在弹出的对话框中选中“用户DSN”中的“dBASE Files”,单击“添加”按钮,从弹出的对话框中选中“Microsoft AccessDriver(*.mdb)”。

单击“完成”后,将弹出一个新的对话框,在数据源名及说明后的编辑框中填入表格名“plc”。

在命名数据源之后,需要把它连接到一个数据库。

单击“选择”,如图1所示,得到存储在数据目录中plc.mdb的拷贝文件,选中之,单击“确定”关闭此对话框。

然后单击“确定”,完成数据源的创建。

用MFC ODBC操作Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟2、使用AppWizard创建一个数据库应用程序笔者开始从AppWizard开始创建一个新的MFC AppWizard(exe)项目。

命名为Jh,然后遵从以下步骤:1)在MFC AppWizard第一步对话框中,选择“单个文档”。

2)在MFC AppWizard第二步对话框中,选择“查看数据库不使用文件支持”,再单击“Data Source”。

3)在RecordSet Type组框中,选择Dynaset。

在Data Source组框中,单击ODBC单选按钮,然后从下拉列表中选择plc,如图2所示,单击ok,在弹出的新的对话框中选中message,即为本项目所要操作的表。

以后几步接收缺省值,单击“完成”即可。

至此,已创建一个应用程序,并且在程序中自行生成一个数据源和数据源中的一个表的相关程序,其程序清单如下:class CJhSet : public Crecordset//基于CRecordset的CjhSet新类{public:CJhSet(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(CJhSet)// Field/Param Data//{{AFX_FIELD(CJhSet, CRecordset)//对应表中一些被绑定字段的变量CString m_baudrate;CString m_type;CString m_unit;CString m_number;CString m_address;CString m_istart;CString m_iend;CString m_ostart;CString m_oend;//}}AFX_FIELD// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CJhSet)public:virtual CString GetDefaultConnect(); // 返回被连接的数据源名称virtual CString GetDefaultSQL(); // 返回数据源中所选表名称virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support//}}AFX_VIRTUAL// Implementation#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif};3、实现程序的显示记录的功能一旦AppWizard完成编写这些文件,它将启动对话框编辑器,这样就可以设计自己的表单了。

CRecordView应用程序围绕着充当应用程序主窗口的对话框而创建。

笔者也将使用像表单一样的对话框来显示存储在plc数据库记录域中的值。

如图3所示来放置静态文本框与编辑文本框。

CJHSet类的成员变量如图4所示。

所有的变量均为CString对象。

由AppWizard创建的每个变量的类型一般与相应数据库域的类型相似。

除了创建成员变量,AppWizard还编写了一组数据交换函数——类似于对话框的DDX函数——来在用来显示信息的控件与定义于CRecordSet类中的数据库域之间交换信息。

为了实现数据传输,就要把每个控件与代表数据库域的CJHSet变量联系起来。

笔者通过使用CJHView 来成员变量m_pSet来指向应用程序的CJHSet对象。

选择每个资源ID(笔者这里未修改编辑框的默认ID),并单击Add Variable,从下拉表中直接选择相应的成员变量名。

全部设置好之后单击OK,至此,运行程序,就可以实现简单的与数据库之间的数据显示功能。

用MFC ODBC操作Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟4、实现程序的添加、修改和删除记录的功能在实现上述功能之前,需要按“插入->资源->DIALOG->新建”建立一个新的对话框(与图1所示对话框类似),以建立添加、修改的对象。

并为此对话框建立一个基于CDialog基础类的新的类CAddDlg。

其ID为IDD_DIALOG1。

然后在JhView.cpp中加“#include "AddDlg.h"”,并为“添加记录(IDC_ADD)”键编写程序代码如下。

其中已经作了详细的注解。

void CJhView::OnAdd(){//建立一个新的添加对话框CAddDlg dlg;if(dlg.DoModal()==IDOK){//增加一条新的记录m_pSet->AddNew();//把对话框中的记录传递到记录集中m_pSet->m_baudrate=dlg.m_br;m_pSet->m_type=dlg.m_ty;m_pSet->m_unit=dlg.m_un;m_pSet->m_number=dlg.m_nu;m_pSet->m_address=dlg.m_add;m_pSet->m_istart=dlg.m_is;m_pSet->m_iend=dlg.m_ie;m_pSet->m_ostart=dlg.m_os;m_pSet->m_oend=dlg.m_oe;m_pSet->Update(); //把新的记录存在数据源里m_pSet->MoveLast(); //指定当前记录为最后一条记录UpdateData(false); //清空已输入内容}}修改记录部分,应该先读出当前的记录,使其显示在添加/修改对话框中,即:dlg.m_br=m_pSet->m_baudrate;dlg.m_ty=m_pSet->m_type;dlg.m_un=m_pSet->m_unit;dlg.m_nu=m_pSet->m_number;dlg.m_add=m_pSet->m_address;dlg.m_is=m_pSet->m_istart;dlg.m_ie=m_pSet->m_iend;dlg.m_os=m_pSet->m_ostart;dlg.m_oe=m_pSet->m_oend;余下的与添加记录代码相同,除了不要定位“m_pSet->MoveLast();”而已。

删除记录只是需要使用Delete()成员函数删除当前记录之后移到下一个记录即可。

程序清单如下:void CJhView::OnDel(){try//试着删除一条记录{m_pSet->Delete();}catch(CDBException*error){AfxMessageBox(error->m_strError);error->Delete();m_pSet->MoveFirst();UpdateData(FALSE);return;}//移到下一个记录m_pSet->MoveNext();//测试是否为文件末尾,是,则使用MoveLast(),而不是使用MoveNext()if(m_pSet->IsEOF())m_pSet->MoveLast();UpdateData(FALSE);}对多个记录集的操作与对单个记录集的操作类似,只是增加了CRecordSet类的派生类。

相关文档
最新文档