文章出处: 星魂工作室    独孤残云

MFC以ADO连接数据库的方法大致分为如下几个步骤:

1.在Stdafx.h中引入相应的dll文件

#import "c:/program files/common files/system/ado/msado15.dll" / no_namespace / rename ("EOF", "adoEOF")

2.在相应的App文件中声明连接变量

_ConnectionPtr m_pConnection; //多为public类型

3.在相应的App文件的InitInstance()函数中构建变量m_pConnection的实例

AfxOleInit();//初始化相应的Com环境(这一句是必不可少的!!!) m_pConnection.CreateInstance(__uuidof(Connection)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。(在后面的代码中我们省略这一步,以此类推) try { // 打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown); } catch(_com_error e) { AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!"); return FALSE; }

4.在相应的Dlg文件中声明相应的连接变量

_ConnectionPtr m_pConnection; _CommandPtr m_pCommand; _RecordsetPtr m_pRecordset;

5.在相应的Dlg的OnInitDialog()中声明ListControl的风格

(   此之前一定要记得为相应的ListControl控件添加相应的变量m_List !!!   )

DWORD dwStyle; // 设置新风格 dwStyle=::GetWindowLong(m_List.m_hWnd,GWL_STYLE); dwStyle|=LVS_REPORT | LVS_SHOWSELALWAYS | LVS_EDITLABELS; ::SetWindowLong(m_List.m_hWnd,GWL_STYLE,dwStyle); dwStyle=m_List.GetExtendedStyle(); dwStyle|=LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT; m_List.SetExtendedStyle(dwStyle); m_List.InsertColumn(0,"Columnname1",LVCFMT_CENTER,60); m_List.InsertColumn(1,"Columnname2",LVCFMT_CENTER,60); //初始化ListControl控件的各个列

6.声明相应的读取数据库函数ReadList()

void CMyClass::ReadList() { UpdateData(); m_List.DeleteAllItems();//首先将ListControl中已有的数据清空,而后重新从数据库读入,以实现刷新效果 CString SQL,Columnname1,Columnname2......; /*****************************通过以下两句代码即可实现实质上的以SQL语句操控数据库***************************/ SQL.Format("select /*列名*/,MajorName from Tablename where mdbColumnname1='%s'",m_Columnname1); /*声明相应的SQL语句*/ m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ /*********************************************************************************************************************************/ int Counter=0; if(!(m_pRecordset->BOF))//若记录集指针未指向数据库中的首元素 { m_pRecordset->MoveFirst();//则将其指向首元素位置 while (!m_pRecordset->adoEOF)//若记录集指针未指向数据库中的尾元素,则循环永远不会结束 { Columnname1=(char*)(_bstr_t)m_pRecordset->GetCollect("mdbColumnname1"); Columnname1=(char*)(_bstr_t)m_pRecordset->GetCollect("mdbColumnname2"); //............................... m_List.InsertItem(Counter,0); m_List.SetItemText(Counter,0,Columnname1);//其中的Counter为行号;0为列号即字段号 m_List.SetItemText(Counter,1,Columnname2);//同上 //........................................... m_pRecordset->MoveNext(); Counter++; } } UpdateData(false); }

7.声明相应的添加记录函数AddList()

void CMyClass::AddList() { CString SQL,m_Columnname1,m_Columnname2........;//声明SQL暂存字符串及其他可能用到的数据库字段暂存变量 UpdateData(); int editmajorno=atoi(dlg.m_editmajorno); SQL.Format("Insert into .../*Tablename*/... (/*Columnnames*/.......) Values (........)",m_Columnname1,m_Columnname2,.......); theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ ReadList(SQL); }

8.声明相应的删除记录函数DelList()

void CMyClass::DelList() { // TODO: Add your control notification handler code here CString SQL; POSITION pos=m_List.GetFirstSelectedItemPosition(); int n=m_List.GetNextSelectedItem(pos); char m_ID[30]={'/0'}; m_List.GetItemText(n,0,m_ID,sizeof(m_ID)); SQL.Format("Delete from Tablename where ID='%s'",m_ID); theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText); ReadList(SQL); }

9.声明相应的修改记录函数UpdList();

void CMAJOR::OnUpdmajor() { CString SQL; POSITION pos=m_List.GetFirstSelectedItemPosition(); int n=m_List.GetNextSelectedItem(pos); char m_ID[30]={'/0'}; m_List.GetItemText(n,0,m_ID,sizeof(m_ID)); UpdateData(); SQL.Format("Update tablename Set Columnname1='%s',Columnname2='% s',......",m_Columnname1,m_Columnname2......); theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);/*记录集指针执行SQL语句*/ ReadList(SQL); }

10.以下是针对于ListControl的一些常用函数(补充中。。。)

1>m_List.InsertColumn(0,"name",LVCFMT_CENTER,60);

说明:该函数可快速实现ListControl控件相应字段的初始化

参数一:字段索引

参数二:字段名称

参数三:字段显示方式(样例中为居中显示)

参数四:字段默认宽度(样例中为60)

2>POSITION pos=m_List.GetFirstSelectedItemPosition();

说明:获得控件中当前选中记录的位置

int n=m_List.GetNextSelectedItem(pos);

说明:由位置转化得到当前选中记录的行数

m_List.GetItemText(n,0,m_ID,sizeof(m_ID));

说明:获得当前选中记录中的某一个字段名
     参数一:行数
     参数二:列数

参数三:字段名的暂存变量

参数四:暂存变量的长度

VC(MFC)以ADO连接数据库(基于控件ListControl)相关推荐

  1. 深入浅出VC++串口编程--基于控件

    深入浅出VC++串口编程之基于控件源代码下载 MSComm控件 Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSCo ...

  2. VC++中combo box(组合框)控件使用说明/MFC COMBOBOX的使用

    转自:不知道... Combo Box (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项,同时也可以直接 ...

  3. MFC中使用TAB Control控件

    2019独角兽企业重金招聘Python工程师标准>>> MFC中使用TAB Control控件 MFC中使用TAB Control控件(转) 假如我现在有个SDI程序,View是Fo ...

  4. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  5. MFC设置对话框背景色及控件颜色

    MFC设置对话框背景色及控件颜色 一.使用背景图片更改对话框背景色 在对话框源文件void CxxDlg::OnPaint()函数中 if (IsIconic()) { (这里省略) } else { ...

  6. 力控组态软件后台组件Ado组件的控件方法及常用命令

    力控组态软件后台组件Ado组件的控件方法及常用命令 先在SQL SERVER中建立一个表Table_1,包含3个字段: d_t 日期时间型 int_1 整数型 float_1 浮点型 1.在配置> ...

  7. MySQL的ADO控件_力控组态软件后台组件Ado组件的控件方法1

    力控组态软件ForceControl V7.0后台组件Ado组件的控件方法1 AddNew() 函数描述: 新添加一条数据 返回值: int 0- 失败 1- 成功 参数: 无 说明: 新添加一条数据 ...

  8. 【android免root脚本制作】基于控件的操作——auto.js进阶

    在[android免root脚本制作]自动坐标操作手机--京东金融程序金果摇钱树自动收金果 之后,想要做进一步优化,因为基于坐标点击如何屏幕被移动之类就会点击错位,不同手机还需去适配坐标,甚是麻烦,所 ...

  9. wincc mysql ado,wincc中的Ado及dataGrid控件的问题

    主题:wincc中的Ado及dataGrid控件的问题 楼主 2013-03-26 18:23:02 在wincc的VBS中通过代码访问ADO对象产生的数据集,能不能绑定到datagrid控件上显示 ...

最新文章

  1. 每日一题题目29:五个数字能组成多少互不重复的四位数
  2. Deep learning:二十二(linear decoder练习)
  3. 数据结构与算法 / 散列表(HashTable)
  4. Can't load AMD 64-bit .dll on a IA 32-bit platform
  5. linux文件句柄满了 现象_Linux 离奇磁盘爆满,如何解决? | 原力计划
  6. sqlserver获取前一天的日期_Java8新特性时间日期库DateTime API及示例
  7. 用VB使用花式画笔实现流动的选取框
  8. 解决git 命令出现end问题
  9. 干货 | 华为内部几近满分的项目管理PPT
  10. 2017年CSTQB/ISTQB认证考试时间表
  11. 匿名四轴上位机使用方法
  12. 程序员必须唱我哪些算法?
  13. Creator 拓展展Button组件 增加点击音效 默缩放。点击间隔
  14. 如何实现开票申请及其审核功能
  15. 软件企业需要每年年审吗?
  16. 深入了解 vue-cli
  17. PADS2007下快速布局布线PCB_本人总结
  18. 未来广播电视新技术的发展和应用
  19. flickr php,php – 获取Flickr集
  20. 2020年中国新基建七大产业链全景图

热门文章

  1. python定义变量类型_一、python基础之数据类型与变量
  2. 如何安装以及配置jdk8的环境变量(建议收藏)
  3. 结构体03:结构体指针
  4. 使用Maven前夕(Maven项目架构管理工具、配置环境变量、阿里云镜像、本地仓库)
  5. 实验4-1-4 求整数的位数及各位数字之和 (15 分)
  6. Angular 父子组件之间的通讯,自定义组件实现星星评分功能
  7. vue族谱架构_【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系...
  8. Data Lake Analytics的Geospatial分析函数 1
  9. 【每日一博】asynchat 异步socket命令/响应处理器
  10. 《Visual Studio Code权威指南》读后总结