MFC通过ODBC连接Mysql程序

 

安装建立mysql,连接ODBC以及通过MFC拖控件这些过程网上很多,就不写了,说一下我的mysql中有database mytest 内有表格mytable,如下:

1、先通过vs2005建立一个MFC工程,vs自动生成文件如图:

2、打开stdafx.h头文件,添加如下语句

#include <odbcinst.h>
#include “afxdb.h”

这两个头文件应该是定义了后面用到的数据库操作类CDataBase、CRecodSet .etc的。

3、剩下的基本都是在ODBCTestDlg.cpp文件操作

  打开数据库进行数据显示:

  在OnInitDialog函数中添加如下语句

  

1 m_list.InsertColumn(1, _T("Name"), LVCFMT_LEFT,80);//在Listctrl控件上添加列,与数据库table对应。
2 m_list.InsertColumn(2, _T("Sex"), LVCFMT_LEFT,80);
3 m_list.InsertColumn(3, _T("Grade"), LVCFMT_LEFT,80);
4 CString cmdStr = _T("SELECT * FROM mytable order by Name Desc");
5 m_show(cmdStr);
1
m_show()函数中的内容完全可以全部放在OnInitDialog()中,但考虑到后面操作数据库时,每次都要写同样的操作,故将其写一函数中
 
 1 // get data from database and show them in list control
2 void CODBCTestDlg::m_show(CString cmdStr)
3 {
4 m_list.DeleteAllItems();
5 CDatabase db;
6 db.Open(NULL,FALSE,FALSE,L"ODBC;DSN=mydb;UID=root;PWD=123456");
7 CRecordset rs( &db );
8 rs.Open( CRecordset::forwardOnly, (L"%s", cmdStr));
9 //short nFields = rs.GetODBCFieldCount();
10 while(!rs.IsEOF())
11 {
12
13 CString varName;
14 rs.GetFieldValue(L"Name", varName);
15 m_list.InsertItem(0, varName);
16 CString varSex;
17 rs.GetFieldValue(L"Sex", varSex);
18 m_list.SetItemText(0, 1, varSex);
19 CString varGrade;
20 rs.GetFieldValue(L"Grade", varGrade);
21 m_list.SetItemText(0, 2, varGrade);
22 rs.MoveNext();
23 }
24 m_list.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // | LVS_SINGLESEL);
25 rs.Close();
26 db.Close();
27 }
 
 
1
这样已经可以在ListCtrl中显示数据库中得内容了。

4、操作数据库

  a、点击ListCtrl在Edit control中显示对应内容,为ListCtrl添加响应函数

  

 
 1 void CODBCTestDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
2 {
3 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
4 // TODO: Add your control notification handler code here
5
6 #if 0
7 LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
8 if (lpNMItemActivate != NULL)
9 {
10 nItem = lpNMItemActivate->iItem;
11 }
12 LV_ITEM lvitem = {0};
13 lvitem.iItem =nItem;
14 lvitem.iSubItem = 0;
15 lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
16 m_list.GetItem(&lvitem);
17 m_control_edit_name.SetWindowText(lvitem.pszText);
18 #endif
19 int nIndex;
20 CString name, sex, grade;
21 //nIndex = m_list.GetSelectionMark();
22 nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
23 if(-1 == nIndex)
24 nIndex = 0;
25 name = m_list.GetItemText(nIndex, 0);
26 sex = m_list.GetItemText(nIndex, 1);
27 grade = m_list.GetItemText(nIndex, 2);
28 m_control_edit_name.SetWindowText(name);
29 m_control_edit_sex.SetWindowText(sex);
30 m_control_edit_grade.SetWindowText(grade);
31
32 *pResult = 0;
33 }
 

  b、在mysql 中add数据函数

  

 
 1 void CODBCTestDlg::OnBnClickedAdd()
2 {
3 // TODO: Add your control notification handler code here
4 CDatabase db;
5 db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
6 CString str, Name, Sex, Grade;
7 m_control_edit_name.GetWindowText(Name);
8 m_control_edit_sex.GetWindowText(Sex);
9 m_control_edit_grade.GetWindowText(Grade);
10 //str = L"insert into mytable values('" + Name +L"','" + Sex +L"','" + Grade + L"')";
11 str.Format(L"insert into mytable values('%s','%s','%s')", Name, Sex, Grade);
12 db.ExecuteSQL(str);
13 db.Close();
14 CString cmdStr = _T("SELECT * FROM mytable order by name Desc");
15 m_show(cmdStr);
16 }
 

  c、在mysql中alter数据函数

 
 1 void CODBCTestDlg::OnBnClickedAlter()
2 {
3 // TODO: 在此添加控件通知处理程序代码
4 int nIndex;
5 CString name, sex, grade, newName, newSex, newGrade;
6 CString dataToAlter;
7 CDatabase db;
8 db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD="));
9 nIndex = m_list.GetSelectionMark();
10 if(-1 == nIndex)
11 {
12 AfxMessageBox(L"select a row data!");
13 }
14 else
15 {
16 name = m_list.GetItemText(nIndex, 0);
17 sex = m_list.GetItemText(nIndex, 1);
18 grade = m_list.GetItemText(nIndex, 2);
19 }
20 m_control_edit_name.GetWindowText(newName);
21 m_control_edit_sex.GetWindowText(newSex);
22 m_control_edit_grade.GetWindowText(newGrade);
23 if(newName.IsEmpty() || newSex.IsEmpty() || newGrade.IsEmpty())
24 {
25 AfxMessageBox(L"Name,Sex,Grade all cannot be empty");
26 }
27 dataToAlter.Format(L"update mytable set Name='%s', Sex='%s', Grade='%s'\
28 where Name='%s' and Sex='%s' and Grade='%s'",\
29 newName, newSex, newGrade, name, sex, grade);
30 db.ExecuteSQL(dataToAlter);
31 db.Close();
32 CString cmdStr = _T("select * from mytable order by Name Desc");
33 m_show(cmdStr);
34 }
 

  d、在mysql中delete数据函数

 
 1 void CODBCTestDlg::OnBnClickedDelete()
2 {
3 // TODO: Add your control notification handler code here
4 int nIndex;
5 CString name, sex, grade, dataToDel;
6 CDatabase db;
7 db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
8 nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
9 //if(-1 == nIndex)
10 // nIndex = 0;
11 if(-1 != nIndex)
12 {
13 name = m_list.GetItemText(nIndex, 0);
14 sex = m_list.GetItemText(nIndex, 1);
15 grade = m_list.GetItemText(nIndex, 2);
16 }
17 else
18 {
19 m_control_edit_name.GetWindowText(name);
20 m_control_edit_sex.GetWindowText(sex);
21 m_control_edit_grade.GetWindowText(grade);
22 }
23
24 dataToDel.Format(L"delete from mytable where Name='%s' and Sex='%s'", name, sex);
25 db.ExecuteSQL(dataToDel);
26 db.Close();
27 CString cmdStr = _T("select * from mytable order by Name Desc");
28 m_show(cmdStr);
29
30 }
 

  e、在mysql中select数据函数(当时写find的没改)

 
 1 void CODBCTestDlg::OnBnClickedFind()
2 {
3 // TODO: Add your control notification handler code here
4 CDatabase db;
5 db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=mydb;UID=root;PWD=123456"));
6 CString Name, str;
7 m_control_edit_name.GetWindowText(Name);
8 str.Format(_T("select * from mytable where Name= '%s' Desc"), Name);
9 db.ExecuteSQL(str);
10 db.Close();
11 m_show(str);
12 }
 

到这里这个MFC连接mysql的程序基本完成。

MFC通过ODBC连接Mysql程序的更多相关文章

  1. MFC通过ODBC连接mysql(使用VS2012编写MFC)

    原创文章,转载请注明原文:MFC通过ODBC连接mysql(使用VS2012编写MFC) By Lucio.Yang 1.ODBC连接mysql 首先ODBC是什么呢? 开放数据库互连(Open Da ...

  2. 使用ODBC连接MySQL和EXCEL

    1.安装ODBC 安装MySQL的时候,可以直接把ODBC一并安装了.如果没有安装的话,则在 https://dev.mysql.com/downloads/connector/odbc/ 下载相应的 ...

  3. MFC与C#连接MYSQL乱码问题

    MYSQL数据库编码为:latin1 问题现象:插入中文乱码,及用中文作参数无法得到相应数据 如select * from userinfo where username='李小明' MFC中解决方法 ...

  4. ODBC连接mysql

    配置/etc/odbc.ini 执行命令:isql freeswitch freeswitch 123456 -v 第一个报错: [08S01][unixODBC][MySQL][ODBC 5.3(w ...

  5. Node.js 连接mySQL程序

    环境:Oracle Enterprise Linux R5U7 安装mySQL 关于离线安装,下次在尝试,目前先来在线安装,过程如下: $ rpm -qa | grep -i mysql $ wget ...

  6. ODBC连接MySQL出现"E_FAIL"错误

    ODBC不能处理这种格式的数据:0000-00-00,将其更新为正常的时间即可解决

  7. MFC连接MySQL

    其实,以前弄过sql,mysql应该是顺理成章很简单的事情,但很无奈,傻傻地弄了很久,还请教了别人,别人告诉我的跟我在网上查到的都是一样的,但还是不行,归根接地就是“mysql-connector-o ...

  8. Powerdesigner 连接mysql 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 SQLSTATE = IM014

    系统环境: WIN7 64位系统, 用Powerdesigner 连接MySQL 逆向工程时 报错 "在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 SQLSTATE = IM01 ...

  9. Delphi XE8中的DBExpress使用ODBC方式连接MySQL 5.6.24 X64!!!!

    Delphi:XE2.XE8 MySQL:5.6.24 X64 今天准备做一个使用数据库的REST程序,最开始使用XE2,后来使用XE8,但是我遇到一个让我头疼的问题,就是无法连接我要使用的数据库,这 ...

随机推荐

  1. php常用数学函数

    php常用数学函数1. bcadd 任意精度数的相加2. bcsub 任意精度数的减法3. bcmul 乘法, bcdiv除法 4. bcmod 取余数. (比%功能更强大)5. bcpow 幂函数运 ...

  2. CentOS 下安装apt-get

    CentOS 下安装apt-get 最近在学习Linux系统时,网上好多帖子都是用apt-get里下载rpm包,于是就在Google上找了个CentOS下安装apt-get的方法 1.下载地址:htt ...

  3. 单链表,循环链表,双向链表(C++实现)

    首先是单链表(带附加表头),实现类代码如下: template<class T> struct LinkNode{//链表节点 T data; LinkNode *link; LinkNo ...

  4. 用PHP提取MYSQL二进制日志的SQL语句

    上一篇说道,在从日志提取出SQL语句的时候,碰到了一句SQL跨了N行无法提取.后来在网上搜了两句shell: sed -n '/^INSERT /,/;/p' log.sql > log_ins ...

  5. 【转】Python BeautifulSoup 中文乱码解决方法

    这篇文章主要介绍了Python BeautifulSoup中文乱码问题的2种解决方法,需要的朋友可以参考下 解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输 ...

  6. PHP学习过程_Symfony_(2)

    今天正式学习Symfony;首先推荐一篇文章"十分钟学习Symfony"(这是我们老大写的,由于那些搞seo的家伙的粘贴复制也不写出处,老大干脆把代码库给清理了,不过幸好我提前fo ...

  7. placeholder的美化

    之前在介绍HTML5的placeholder属性时,曾实现了一些页面例子让大家参考,但这些例子里的背景文字都是灰色的,样式很单一,其实它们可以做的更好看.CSS3里提供了专门的规则属性来美化用plac ...

  8. hdu_4742_Pinball Game 3D(cdq分治+树状数组)

    题目链接:hdu_4742_Pinball Game 3D 题意: 给你n个点,让你求三维的LIS,并且求出有多少种组合能达到LIS. 题解: 求三维的LIS,典型的三维偏序问题,x排序,解决一维,c ...

  9. hdu_5873_Football Games(xjb搞)

    题目链接:hdu_5873_Football Games 题意: 有n个队,每个队都会给其他队打一场,赢一场得2分,平局得一分,输了不得分,然后给你全部比赛结束后的得分,问你是否有假分 题解: 可以知 ...

  10. Django中使用Bootstrap

    一.在Django中引用Bootstrap模版 1.首先下载bootsrtap代码(http://v3.bootcss.com/getting-started/#download),并将下载后的文件放 ...