5888|1

161

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

网络开发笔记11_MFC访问Access数据库 [复制链接]

一 引言
 其实也没想说点啥,就说一下这文章的作用。我们前面已写了PC机的TCP网络通信程序,可以把开发板发出的数据接收到了,我们今天把MFC连接数据库说了,我们的数据采集与存储也就完成一大半了,但然今天我只讲数据库的连接,因为要讲完还需要用到别的知识点,也就是线程,也就是说我们这个程序完成的时候,就学会了MFC编程的三个重大要点(网络+数据库+线程),为什么要用到线程,在下一张节里我在说。
 在这里我也将得不是太细,要深入学习的朋友,请查阅相关资料。

二 MFC连接数据库方法
 MFC连接数据库有多种方法,可根据自己的喜好和熟悉成度来选,有通过ODBC、ADO等。后者理应方便一些。
 不过今天我用前者-ODBC,这也不难的


三 什么是ODBC
 开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

四 用MFC打开数据库的方法
 1.直接打开发
 我们先建一个MFC工程,使用列表框和按纽构建如图1界面
 
图1

我们在OK按纽的事件中打开数据库。
在#include "connectDBDlg.h"中加入#include <afxdb.h>
void CConnectDBDlg::OnButton1()
{
CString strConnect;
strConnect.Format((_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID
=;PWD=;DBQ=D:\\ sjcj.mdb")));
CDatabase db;
if(db.Open(NULL,false,false,strConnect,false))
 {
   …………………………..
 }
db.Close();
}
2.间接打开
 通过数据源来打开,打开控制面版管理工具数据源用户 DSN添加Microsoft Access Driver(*.mdb),出现如图2

 
图2
数据源名:我真sjcjDB,选择,选们之前建在D盘下的sjcj.mdb,确定
改写程序
void CConnectDBDlg::OnButton1()
{
 CDatabase db;
 if(db.Open(_T("sjcjDB"),false,false,_T("ODBC;"),false))
 {
 …………………………………
 }
}

1.jpg (6.37 KB, 下载次数: 0)

1.jpg

2.jpg (26.82 KB, 下载次数: 0)

2.jpg

网络开发笔记11_MFC访问Access数据库.pdf

194.62 KB, 下载次数: 225

 
点赞 关注

回复
举报

161

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

五 读取数据并显示
 CDatabase db;
 if(db.Open(_T("sjcjDB"),false,false,_T("ODBC;"),false))
 {
  CRecordset  rs(&db);
  CString strSql;
  rs.Open(AFX_DB_USE_DEFAULT_TYPE,  _T("Select adcVal from adcTbl"));
  //打开表
  if(rs.IsOpen())
        {
            rs.MoveFirst();//移动到第一条记录
   CString strVal;
            while(!rs.IsEOF())//没到表尾
            {
                //读取记录
                rs.GetFieldValue(_T("adcVal"), strVal);
    ((CListBox*)GetDlgItem(IDC_LIST2))->AddString(strVal);//显示在列表框
                rs.MoveNext();//下移一条
            }
        }
        db.Close();
}
运行程序如图3
 
图3
此时我们的程序就已成功访问数据库了。

六 数据的添加
我们改一下程序界面,如图4
 
图4
 查询功能给我们刚才一样,插入功能是将我们Value里的值插到数据库。改插入的事件代码。
 为方便我们插入数据,我们新建一个类,续承于CRecordset,新建的方法,工具栏插入类,如图5
 
图5
Name:我写CAdcInf,Base class: CRecordset,确定弹出数据库相关选项如图6
 
图6
ODBC:选我们才建的sjcjDB,Recordset type:先Dynaset,接下来两个OK
在connectDBDlg.h中加入#include "AdcInf.h"
在AdcInf.h 中加入#include <afxdb.h>
void CConnectDBDlg::OnButton2()
{
 // TODO: Add your control notification handler code here
  CDatabase db;
 if(db.Open(_T("sjcjDB"),false,false,_T("ODBC;"),false))
 {
  CAdcInf rs(&db);
  CString strSql;
  rs.Open(AFX_DB_USE_DEFAULT_TYPE,  _T("Select adcId,adcVal from adcTbl"));
  if(rs.IsOpen())
        {
            rs.MoveLast();   
   CString strVal;
   UINT i;
   i=rs.m_adcId;
   i++;   
   rs.Edit();
   rs.AddNew();
   rs.m_adcId=i;
   ((CEdit*)GetDlgItem(IDC_EDIT2))->GetWindowText(strVal);
   rs.m_adcVal=strVal;
   rs.Update();
        }
        db.Close();
    }

}

七 程序运行效果
插入如图7,查寻如图8
  
图7,8
添加数据后数据库图如图9
  图9

 

3.jpg (10.16 KB, 下载次数: 2)

3.jpg

4.jpg (20.84 KB, 下载次数: 0)

4.jpg

5.jpg (32.68 KB, 下载次数: 0)

5.jpg

6.jpg (35.48 KB, 下载次数: 0)

6.jpg

7.jpg (32.23 KB, 下载次数: 0)

7.jpg

8.jpg (19.77 KB, 下载次数: 0)

8.jpg
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表