MFC通过ODBC连接Mysql程序
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程序的更多相关文章
- MFC通过ODBC连接mysql(使用VS2012编写MFC)
原创文章,转载请注明原文:MFC通过ODBC连接mysql(使用VS2012编写MFC) By Lucio.Yang 1.ODBC连接mysql 首先ODBC是什么呢? 开放数据库互连(Open Da ...
- 使用ODBC连接MySQL和EXCEL
1.安装ODBC 安装MySQL的时候,可以直接把ODBC一并安装了.如果没有安装的话,则在 https://dev.mysql.com/downloads/connector/odbc/ 下载相应的 ...
- MFC与C#连接MYSQL乱码问题
MYSQL数据库编码为:latin1 问题现象:插入中文乱码,及用中文作参数无法得到相应数据 如select * from userinfo where username='李小明' MFC中解决方法 ...
- ODBC连接mysql
配置/etc/odbc.ini 执行命令:isql freeswitch freeswitch 123456 -v 第一个报错: [08S01][unixODBC][MySQL][ODBC 5.3(w ...
- Node.js 连接mySQL程序
环境:Oracle Enterprise Linux R5U7 安装mySQL 关于离线安装,下次在尝试,目前先来在线安装,过程如下: $ rpm -qa | grep -i mysql $ wget ...
- ODBC连接MySQL出现"E_FAIL"错误
ODBC不能处理这种格式的数据:0000-00-00,将其更新为正常的时间即可解决
- MFC连接MySQL
其实,以前弄过sql,mysql应该是顺理成章很简单的事情,但很无奈,傻傻地弄了很久,还请教了别人,别人告诉我的跟我在网上查到的都是一样的,但还是不行,归根接地就是“mysql-connector-o ...
- Powerdesigner 连接mysql 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 SQLSTATE = IM014
系统环境: WIN7 64位系统, 用Powerdesigner 连接MySQL 逆向工程时 报错 "在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 SQLSTATE = IM01 ...
- Delphi XE8中的DBExpress使用ODBC方式连接MySQL 5.6.24 X64!!!!
Delphi:XE2.XE8 MySQL:5.6.24 X64 今天准备做一个使用数据库的REST程序,最开始使用XE2,后来使用XE8,但是我遇到一个让我头疼的问题,就是无法连接我要使用的数据库,这 ...
随机推荐
- pageoffice 开发笔记
开发环境:vs2015,mvc,razor pageoffice版本:Server-Version=3.2.0.1 OCX-Version=2,0,4,6 开发模式:pageofficeLink方式 ...
- Oracle Day 08 游标与例外的总结
1.游标的使用(cursor) 基本格式: 定义游标: cursor 游标名 is select语句; 打开游标: open 游标名; loop(循环) fetch ... into ...; ...
- sublime text 设置
https://packagecontrol.io/installation#Simple 下载 php 自动补全 点击菜单栏的:Preferences: 选择:Setting-User项: 然后在大 ...
- [转]cmd-bat批处理命令延时方法
批处理延时启动的几个方法 方法一:ping 缺点:时间精度为1秒,不够精确 @echo off @ping 127.0.0.1 -n 6 >nul start gdh.txt 方法二:vbs s ...
- Windows Shell(外壳)编程相关
Windows Shell名字空间介绍: http://blog.csdn.net/kingcom_xu/article/details/18943 Windows Shell 外壳编程基础教程(C# ...
- laravel php artisan migrate 数据迁移时出现的[HY000][1045]错误
(zz找了块一个小时才发现)主要的错误在于.env文件和database.php的配置不匹配. 1.找到.env文件 2.更改数据库表账密 3.改database.php的数据库账密 4.完成
- 关于linux修改max user processes limits的问题
我们都知道,ulimit -u 可以设置max user processes limits,但是往往在设置的过程中,这样直接修改,不仅只能临时生效,重启之后又无效了,而且老是会失败. 而一般来说,修改 ...
- 跨域资源共享(Cross-Origin Resource Sharing)
目前中文方面的资料还比较少,能搜索到的那仅有的几篇相关介绍,也几乎是雷同的,其中C#方面的更是少之又少. XMLHttpRequest接口是Ajax的根本,而Ajax考虑到安全性的问题,是禁止跨域访问 ...
- SSM
今天内容安排 1:复习mybatis 2:复习springMVC 3:springMVC+spring+mybatis组合起来,搭建一个web应用开发的框架 4:用户管理系统,针对用户的CRUD操作, ...
- 一般增广路方法求网络最大流(Ford-Fulkerson算法)
/* Time:2015-6-18 接触网络流好几天了 写的第一个模版————Ford-Fulkerson算法 作用:求解网络最大流 注意:源点是0 汇点是1 如果题目输入的是1到n 请预处理减1 * ...