环境:VC++6.0
MySql版本:mysql-5.5.20-win32
MySql连接管理:mysql-connector-odbc-5.2.2-ansi-win32
MySql数据管理:HeidiSQL_7.0
首先是各种软件的安装先安装MySql数据库,其次是Connector和HeidiSQL,这里就不过多介绍了,MySql可以到http://www.mysql.com/处下载。
1.打开HeidiSQL,并登陆数据库如图
2. 新建数据库和表,这里我建立的是test数据库和user_table表
3. 设置表
这个自行设置即可,顺便添加数据到表中。前期工作准备的就差不多了。
4. 设置数据源
在管理工具中找到数据源(ODBC)->添加->MySQL ODBC 5.2a Driver,然后设置我们的数据库以及用户名、密码、端口,
完了之后可以Test一下,失败了再去找问题吧。
5. 打开VC6.0新建MFC基于对话框的程序
其中ListControl控件的styles为Report。
6.在对话框的头文件中添加一下两个头文件
#include <odbcinst.h>
#include <afxdb.h>
进入OnInitDialog函数中,填写一下代码
m_list.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 80);
m_list.InsertColumn(1, _T("userName"), LVCFMT_LEFT, 100);
m_list.InsertColumn(2, _T("userPasswd"), LVCFMT_LEFT, 150);
db.Open(NULL, FALSE, FALSE, "ODBC;DSN=odbcTest;UID=root;PWD=123456");
rs.m_pDatabase = &db;
m_list.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
以上是设置ListControl控件的格式以及打开数据库,其中db和rs定义在头文件中分别是CDatabase和CRecordset类型。
由于在程序中需要频繁调用显示数据库的操作,因此将其封装成一个函数getRecord,如下
m_list.DeleteAllItems();
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM user_table order by id Desc"));
while (!rs.IsEOF())
{
CString varID;
rs.GetFieldValue("id", varID);
m_list.InsertItem(0,varID);
CString varName;
rs.GetFieldValue("userName", varName);
m_list.SetItemText(0, 1, varName);
CString varPasswd;
rs.GetFieldValue("userPasswd", varPasswd);
m_list.SetItemText(0, 2, varPasswd);
rs.MoveNext();
}
rs.Close();
在初始化函数中调用该函数,运行程序可以看到ListControl控件已经可以显示数据库中的数据了。
7. 数据库操作
数据库操作主要是用以下语句实现的
CString sql;
sql.Format(_T("insert into user_table (userName, userPasswd) values('%s', '%s')"), m_userName, m_userPasswd);
db.ExecuteSQL(sql);
只要数据库语句会写,操作一般没问题的。
这里我是用弹出子对话框的形式来添加数据的。
按键被按下时即弹出此对话框,之后将数据返回到主对话框中,用的是全局变量和静态函数的方法,即子对话框通过静态函数将数据返回到主对话框中,在子对话框中添加初始化函数是增加WM_INITDIALOG消息实现的。
其他细节性的东西这里就不赘述了。
参考文章:http://wenku.baidu.com/view/12b4790bbb68a98271fefa4c.html
参考文章:http://hi.baidu.com/hackxhj/item/cd895829d29058e950fd87ba