啊,上一篇说完怎么连接数据库后;
来实现以如何用MFC对数据库mysql进行增删改查;
首先打开你的数据库选择新建数据库并且插入表;
我插入的表名是stu;数据库这边就完事了;
首先创建一个基于对话框的应用程序;
然后进行布局;
为了方便叙述
我直接偷懒这么布局了;
一,插入功能
在Dialog文件夹中选择插入Dialog;
再对插入的对话框进行布局;
然后我们给这个对话框添加类;(我的类名是add)
再给这编辑框添加变量;我添加的变量名为na和ch;变量选择值变量;
然后实现出点击添加按钮会弹出这个模态对话框的功能;
双击添加按钮;
加上头文件
写上代码;
add dlg;
dlg.DoModal();
不理解可以看之前的文章;
然后我们要做到这个插入的对话框的功能的话;
我们再双击插入的对话框中确定这个按钮进入事件处理程序;
在最上面加头文件;
#include "winsock.h"
#include "mysql.h"
然后开始写事件处理程序;
首先要获取两个编辑框的内容:
GetDlgItem(IDC_EDIT1)->GetWindowText(na);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch);
能理解吧,黑色的是编辑框ID和变量名;
然后定义连接;
const char name[] = "root";
const char pswd[] = "root";
const char host[] = "localhost";
const char table[] = "stu";
unsigned int port = 3306;
MYSQL_RES* res;
MYSQL_ROW row;
MYSQL mysqlCon;
mysql_init(&mysqlCon);
第一行和第二行是你的数据库用户名和密码;
第三行是固定的数据库连接的名字;
第四行是表名;
第五行是端口号,也是固定的;
后面的直接写上就行;
然后判断数据库连接是否成功;
mysql_init(&mysqlCon);
if (!mysql_real_connect(&mysqlCon, host, name, pswd, table, port, NULL, 0))
{
AfxMessageBox(_T("访问数据库失败!"));
}
else
{
mysql_query(&mysqlCon, "SET USER GBK"); //设置字符集
AfxMessageBox(_T("访问数据库成功!"));
}
这样准备工作就做好了;
然后我们把编辑框的值拿出来;
char* x = (char*)na.GetBuffer();
char* y = (char*)ch.GetBuffer();
有这两个值后,我们就开始把他写入数据库中
char insert[1000];
sprintf_s(insert, "insert into stu(name, sorce ) values (\'%s\', \'%s\')", x, y);
绿色的是sql语句,差不多能理解就好;
最后我们再判断一下是否插入成功;
if (mysql_query(&mysqlCon, insert) == 0)
{
AfxMessageBox(_T("添加成功!"));
CDialog::OnCancel();
}
else {
AfxMessageBox(_T("添加失败!"));
}
这样的话添加功能就完成了;
二,删除功能;
开始的步骤全都一样;
然后我的布局是这样;
添加类(我的是del)添加变量(我的是na2);
中间的步骤不重复了;
直接双击这个确定按钮进入事件处理程序;
其实过程还是一样的;
不过我没有判断是否这个学生是否存在之类的功能(因为方便哈)
第一步先把获取的值改掉吧(改成na2);
GetDlgItem(IDC_EDIT1)->GetWindowText(na2)
应该是na2了吧;
再改一个sql语句;
sprintf_s(insert, "delete from stu WHERE name='%s'", x);
其余和上面全一样;
直接就复制粘贴改这两地方个就完全OK;
三,修改功能
修改也是一样,就改这两个地方其他不用变;
修改的sql语句;
sprintf_s(insert, "UPDATE stu SET sorcer='%s' WHERE name='%s'",x, y);
四,查询功能
查询的sql语句可能复杂一些;
先看下我的布局
给两个编辑框添加变量na3,box;
然后
我直接上代码吧;
CString select_sql_by_user;
select_sql_by_user.Format(_T("select name,sorce from stu where name = \'%s\'"), na3);
int ress = mysql_query(&mysqlCon, (char*)(LPCTSTR)select_sql_by_user);
if (ress == 0) //检测查询成功
{
res = mysql_store_result(&mysqlCon);
if (mysql_num_rows(res) == 0) //查询结果为空
{
AfxMessageBox(_T("学生不存在"));
}
else
{
row = mysql_fetch_row(res);
box = TEXT("姓名:");
box = box+row[0];
box = box + TEXT("成绩:");
box = box + row[1];
}
}
else
{
AfxMessageBox(_T("访问失败!"));
}
UpdateData(FALSE);
如果前面的理解了,其实这个也不难理解,可以吧row看成一个数组,存放的就是数据库的信息;
然后就完全做完了这四个功能;
但也是最最最基本的功能,其余需要添加的,就要自己想办法添加了;
OK,结束;
转载:https://blog.csdn.net/weixin_46726346/article/details/106851760