当前位置: 首页 > news >正文

MFC 基于数据库的管理系统

文章目录

  • 初始化
    • 设置菜单
  • 添加数据库类
    • 创建数据库
    • 配置数据库
  • 全部代码

初始化

创建文件选择基于CListView
在这里插入图片描述

初始化数据

public:CListCtrl& m_list;
CSQLView::CSQLView() noexcept:m_list(GetListCtrl())
{// TODO: 在此处添加构造代码}
void CSQLView::OnInitialUpdate()
{CListView::OnInitialUpdate();m_list.ModifyStyle(0, LVS_REPORT);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_list.InsertColumn(0, L"id", LVCFMT_LEFT, 100);m_list.InsertColumn(1, L"姓名", LVCFMT_LEFT, 100);m_list.InsertColumn(2, L"性别", LVCFMT_LEFT, 100);m_list.InsertColumn(3, L"年龄", LVCFMT_LEFT, 100);m_list.InsertColumn(4, L"部门", LVCFMT_LEFT, 100);m_list.InsertColumn(5, L"岗位", LVCFMT_LEFT, 100);m_list.InsertColumn(6, L"薪资", LVCFMT_LEFT, 100);
//修改数据库CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql=L"select * from user";//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"查询失败");return;}mysql.StoreResult();int i = 0;//显示有问题while (mysql.FetchRow()){m_list.InsertItem(i,(wchar_t*)(mysql.m_mysql_row[0]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[1]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[2]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[3]));}
}

设置菜单

添加
在这里插入图片描述在这里插入图片描述
创建添加类
在这里插入图片描述 每一个控件都添加控件变量
在这里插入图片描述

class CAddDlg : public CDialogEx
{DECLARE_DYNAMIC(CAddDlg)public:CAddDlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CAddDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ADD_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString m_strName;CString m_strSex;int m_nAge;CString m_strDeparment;CString m_strJob;float m_fSalary;afx_msg void OnBnClickedAdd();};

// CAddDlg.cpp: 实现文件

//#include "pch.h"
#include "SQL.h"
#include "CAddDlg.h"
#include "afxdialogex.h"// CAddDlg 对话框IMPLEMENT_DYNAMIC(CAddDlg, CDialogEx)CAddDlg::CAddDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_ADD_DLG, pParent), m_strName(_T("")), m_strSex(_T("")), m_nAge(0), m_strDeparment(_T("")), m_strJob(_T("")), m_fSalary(0)
{}CAddDlg::~CAddDlg()
{
}void CAddDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_strName);DDX_Text(pDX, IDC_EDIT1, m_strSex);DDX_Text(pDX, IDC_EDIT3, m_nAge);DDX_Text(pDX, IDC_EDIT4, m_strDeparment);DDX_Text(pDX, IDC_EDIT5, m_strJob);DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}BEGIN_MESSAGE_MAP(CAddDlg, CDialogEx)ON_BN_CLICKED(IDC_ADD, &CAddDlg::OnBnClickedAdd)END_MESSAGE_MAP()// CAddDlg 消息处理程序void CAddDlg::OnBnClickedAdd()
{UpdateData();EndDialog(IDOK);
}
//添加
void CSQLView::OnAdd()
{CAddDlg dlg;if (IDCANCEL == dlg.DoModal())return;CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"insert into user(name,sex,age,department,job,salary) value (\'%s\',\'%s\',%d,\'%s\',\'%s\',%f);",dlg.m_strName,dlg.m_strSex,dlg.m_nAge,dlg.m_strDeparment,dlg.m_strJob,dlg.m_fSalary);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0,sql.GetBuffer(),sql.GetLength(),str,sizeof(str),NULL,NULL);int error=mysql.Query(str);if(error){MessageBox(L"添加失败");return;}MessageBox(L"添加成功");//插入到列表int nCount = m_list.GetItemCount();CString str1;str1.Format(L"%d", nCount);m_list.InsertItem(nCount, str1);m_list.SetItemText(nCount, 1, dlg.m_strName);m_list.SetItemText(nCount, 2, dlg.m_strSex);str1.Format(L"%d", dlg.m_nAge);m_list.SetItemText(nCount, 3, str1);m_list.SetItemText(nCount, 4, dlg.m_strDeparment);m_list.SetItemText(nCount, 5, dlg.m_strJob);str1.Format(L"%.2f", dlg.m_fSalary);m_list.SetItemText(nCount, 6, str1);}

删除
在这里插入图片描述

//删除
void CSQLView::OnDelete()
{POSITION pos=m_list.GetFirstSelectedItemPosition();int nSel = m_list.GetNextSelectedItem(pos);if (nSel<0){MessageBox(L"先选中在删除");return;}CString strDelete = m_list.GetItemText(nSel, 1);CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"delete from user where name=\'%s\';", strDelete);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"删除失败");return;}m_list.DeleteItem(nSel);
}

修改
在这里插入图片描述
在这里插入图片描述
设置添加对话框
在这里插入图片描述添加修改类
在这里插入图片描述// CModifyDlg 对话框

class CModifyDlg : public CDialogEx
{DECLARE_DYNAMIC(CModifyDlg)public:CModifyDlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CModifyDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MODIFY_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString m_strName;CString m_strSex;int m_nAge;CString m_strDeparment;CString m_strJob;float m_fSalary;afx_msg void OnBnClickedModify();
};
#include "pch.h"
#include "SQL.h"
#include "CModifyDlg.h"
#include "afxdialogex.h"// CModifyDlg 对话框IMPLEMENT_DYNAMIC(CModifyDlg, CDialogEx)CModifyDlg::CModifyDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MODIFY_DLG, pParent), m_strName(_T("")), m_strSex(_T("")), m_nAge(0), m_strDeparment(_T("")), m_strJob(_T("")), m_fSalary(0)
{}CModifyDlg::~CModifyDlg()
{
}void CModifyDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_strName);DDX_Text(pDX, IDC_EDIT1, m_strSex);DDX_Text(pDX, IDC_EDIT3, m_nAge);DDX_Text(pDX, IDC_EDIT4, m_strDeparment);DDX_Text(pDX, IDC_EDIT5, m_strJob);DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}BEGIN_MESSAGE_MAP(CModifyDlg, CDialogEx)ON_BN_CLICKED(IDC_MODIFY, &CModifyDlg::OnBnClickedModify)
END_MESSAGE_MAP()// CModifyDlg 消息处理程序void CModifyDlg::OnBnClickedModify()
{// TODO: 在此添加控件通知处理程序代码UpdateData();EndDialog(IDOK);
}
void CSQLView::OnModify()
{CModifyDlg dlg;//获取数据POSITION pos = m_list.GetFirstSelectedItemPosition();int nSel = m_list.GetNextSelectedItem(pos);if (nSel < 0){MessageBox(L"先选中在修改");return;}int workid = _wtoi(m_list.GetItemText(nSel, 0));dlg.m_strName = m_list.GetItemText(nSel,1);dlg.m_strSex= m_list.GetItemText(nSel, 2);dlg.m_nAge= _wtoi(m_list.GetItemText(nSel, 3));dlg.m_strDeparment= m_list.GetItemText(nSel, 4);dlg.m_strJob= m_list.GetItemText(nSel, 5);dlg.m_fSalary = _wtof(m_list.GetItemText(nSel, 6));if (IDCANCEL == dlg.DoModal())return;//修改数据库CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"update user set sex=\'%s\',age=%d,department=\'%s\',job=\'%s\',salary=%f where name =\'%s\';",dlg.m_strSex, dlg.m_nAge, dlg.m_strDeparment, dlg.m_strJob, dlg.m_fSalary, dlg.m_strName);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"跟新失败");return;}
}

添加数据库类

创建数据库

//创建管理数据
create database mangerdata;//创建用户表
create table user(
workid int primary key auto_increment,
name varchar(10) not null default '',
sex char(1) not null default '',
age tinyint unsigned not null default 0,
department varchar(10) not null default '',
job varchar(10) not null default '',
salary float not null default 0.0
);

配置数据库

在这里插入图片描述

导入数据库头文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述 设置静态链接
在这里插入图片描述
在这里插入图片描述将dll放入X64Debug中
在这里插入图片描述

产看连接MySQL函数
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

#include “mysql.h”

class CMySQL
{
public:CMySQL();~CMySQL();
public://连接数据库BOOL Connect(const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long client_flag);//执行SQL语句int Query(const char* str);//保存结果集MYSQL_RES* StoreResult();//检索结果集MYSQL_ROW FetchRow();
private:MYSQL* m_mysql;MYSQL_RES*  m_mysql_res;
public:MYSQL_ROW m_mysql_row;
};
#include "pch.h"
#include "CMySQL.h"#pragma comment(lib,"libmysql.lib")CMySQL::CMySQL()
{m_mysql = mysql_init(NULL);
}CMySQL::~CMySQL()
{
}BOOL CMySQL::Connect(const char * host, const char * user, const char * passwd, const char * db, unsigned int port, const char * unix_socket, unsigned long client_flag)
{if (NULL == mysql_real_connect(m_mysql, host, user, passwd, db, port, unix_socket, client_flag)){return FALSE;}return TRUE;}int CMySQL::Query(const char * str)
{return mysql_real_query( m_mysql,str,strlen(str));
}//保存结果集
MYSQL_RES * CMySQL::StoreResult()
{m_mysql_res=mysql_store_result(m_mysql);return m_mysql_res;
}MYSQL_ROW CMySQL::FetchRow()
{m_mysql_row=mysql_fetch_row(m_mysql_res);return m_mysql_row;
}

全部代码

// SQLView.cpp: CSQLView 类的实现

//#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "SQL.h"
#endif#include "SQLDoc.h"
#include "SQLView.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif#include "CAddDlg.h"
#include "CMySQL.h"
#include "CModifyDlg.h"// CSQLViewIMPLEMENT_DYNCREATE(CSQLView, CListView)BEGIN_MESSAGE_MAP(CSQLView, CListView)// 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CListView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CListView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CListView::OnFilePrintPreview)ON_COMMAND(IDM_ADD, &CSQLView::OnAdd)ON_COMMAND(IDM_DELETE, &CSQLView::OnDelete)ON_COMMAND(IDM_MODIFY, &CSQLView::OnModify)
END_MESSAGE_MAP()// CSQLView 构造/析构CSQLView::CSQLView() noexcept:m_list(GetListCtrl())
{// TODO: 在此处添加构造代码}CSQLView::~CSQLView()
{
}BOOL CSQLView::PreCreateWindow(CREATESTRUCT& cs)
{// TODO: 在此处通过修改//  CREATESTRUCT cs 来修改窗口类或样式return CListView::PreCreateWindow(cs);
}void CSQLView::OnDraw(CDC* /*pDC*/)
{CSQLDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: 在此处为本机数据添加绘制代码
}void CSQLView::OnInitialUpdate()
{CListView::OnInitialUpdate();m_list.ModifyStyle(0, LVS_REPORT);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_list.InsertColumn(0, L"id", LVCFMT_LEFT, 100);m_list.InsertColumn(1, L"姓名", LVCFMT_LEFT, 100);m_list.InsertColumn(2, L"性别", LVCFMT_LEFT, 100);m_list.InsertColumn(3, L"年龄", LVCFMT_LEFT, 100);m_list.InsertColumn(4, L"部门", LVCFMT_LEFT, 100);m_list.InsertColumn(5, L"岗位", LVCFMT_LEFT, 100);m_list.InsertColumn(6, L"薪资", LVCFMT_LEFT, 100);//修改数据库CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql=L"select * from user";//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"查询失败");return;}mysql.StoreResult();int i = 0;//显示有问题while (mysql.FetchRow()){m_list.InsertItem(i,(wchar_t*)(mysql.m_mysql_row[0]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[1]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[2]));m_list.InsertItem(i, (wchar_t*)(mysql.m_mysql_row[3]));}}//添加
void CSQLView::OnAdd()
{CAddDlg dlg;if (IDCANCEL == dlg.DoModal())return;CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"insert into user(name,sex,age,department,job,salary) value (\'%s\',\'%s\',%d,\'%s\',\'%s\',%f);",dlg.m_strName,dlg.m_strSex,dlg.m_nAge,dlg.m_strDeparment,dlg.m_strJob,dlg.m_fSalary);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0,sql.GetBuffer(),sql.GetLength(),str,sizeof(str),NULL,NULL);int error=mysql.Query(str);if(error){MessageBox(L"添加失败");return;}MessageBox(L"添加成功");//插入到列表int nCount = m_list.GetItemCount();CString str1;str1.Format(L"%d", nCount);m_list.InsertItem(nCount, str1);m_list.SetItemText(nCount, 1, dlg.m_strName);m_list.SetItemText(nCount, 2, dlg.m_strSex);str1.Format(L"%d", dlg.m_nAge);m_list.SetItemText(nCount, 3, str1);m_list.SetItemText(nCount, 4, dlg.m_strDeparment);m_list.SetItemText(nCount, 5, dlg.m_strJob);str1.Format(L"%.2f", dlg.m_fSalary);m_list.SetItemText(nCount, 6, str1);}//删除
void CSQLView::OnDelete()
{POSITION pos=m_list.GetFirstSelectedItemPosition();int nSel = m_list.GetNextSelectedItem(pos);if (nSel<0){MessageBox(L"先选中在删除");return;}CString strDelete = m_list.GetItemText(nSel, 1);CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"delete from user where name=\'%s\';", strDelete);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"删除失败");return;}m_list.DeleteItem(nSel);
}void CSQLView::OnModify()
{CModifyDlg dlg;//获取数据POSITION pos = m_list.GetFirstSelectedItemPosition();int nSel = m_list.GetNextSelectedItem(pos);if (nSel < 0){MessageBox(L"先选中在修改");return;}int workid = _wtoi(m_list.GetItemText(nSel, 0));dlg.m_strName = m_list.GetItemText(nSel,1);dlg.m_strSex= m_list.GetItemText(nSel, 2);dlg.m_nAge= _wtoi(m_list.GetItemText(nSel, 3));dlg.m_strDeparment= m_list.GetItemText(nSel, 4);dlg.m_strJob= m_list.GetItemText(nSel, 5);dlg.m_fSalary = _wtof(m_list.GetItemText(nSel, 6));if (IDCANCEL == dlg.DoModal())return;//修改数据库CMySQL mysql;if (FALSE == mysql.Connect("localhost", "root", "123456", "mangerdata", 3306, NULL, NULL)){MessageBox(L"连接数据库失败");return;}mysql.Query("set names GBK");//设置编码//插入数据CString sql;sql.Format(L"update user set sex=\'%s\',age=%d,department=\'%s\',job=\'%s\',salary=%f where name =\'%s\';",dlg.m_strSex, dlg.m_nAge, dlg.m_strDeparment, dlg.m_strJob, dlg.m_fSalary, dlg.m_strName);//转换成窄字符串char str[500] = { 0 };WideCharToMultiByte(CP_ACP, 0, sql.GetBuffer(), sql.GetLength(), str, sizeof(str), NULL, NULL);int error = mysql.Query(str);if (error){MessageBox(L"跟新失败");return;}}

// CAddDlg 对话框

class CAddDlg : public CDialogEx
{DECLARE_DYNAMIC(CAddDlg)public:CAddDlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CAddDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ADD_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString m_strName;CString m_strSex;int m_nAge;CString m_strDeparment;CString m_strJob;float m_fSalary;afx_msg void OnBnClickedAdd();};

// CAddDlg.cpp: 实现文件

//#include "pch.h"
#include "SQL.h"
#include "CAddDlg.h"
#include "afxdialogex.h"// CAddDlg 对话框IMPLEMENT_DYNAMIC(CAddDlg, CDialogEx)CAddDlg::CAddDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_ADD_DLG, pParent), m_strName(_T("")), m_strSex(_T("")), m_nAge(0), m_strDeparment(_T("")), m_strJob(_T("")), m_fSalary(0)
{}CAddDlg::~CAddDlg()
{
}void CAddDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_strName);DDX_Text(pDX, IDC_EDIT1, m_strSex);DDX_Text(pDX, IDC_EDIT3, m_nAge);DDX_Text(pDX, IDC_EDIT4, m_strDeparment);DDX_Text(pDX, IDC_EDIT5, m_strJob);DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}BEGIN_MESSAGE_MAP(CAddDlg, CDialogEx)ON_BN_CLICKED(IDC_ADD, &CAddDlg::OnBnClickedAdd)END_MESSAGE_MAP()// CAddDlg 消息处理程序void CAddDlg::OnBnClickedAdd()
{UpdateData();EndDialog(IDOK);
}

// CModifyDlg 对话框

class CModifyDlg : public CDialogEx
{DECLARE_DYNAMIC(CModifyDlg)public:CModifyDlg(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CModifyDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MODIFY_DLG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:CString m_strName;CString m_strSex;int m_nAge;CString m_strDeparment;CString m_strJob;float m_fSalary;afx_msg void OnBnClickedModify();
};

// CModifyDlg.cpp: 实现文件

//#include "pch.h"
#include "SQL.h"
#include "CModifyDlg.h"
#include "afxdialogex.h"// CModifyDlg 对话框IMPLEMENT_DYNAMIC(CModifyDlg, CDialogEx)CModifyDlg::CModifyDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MODIFY_DLG, pParent), m_strName(_T("")), m_strSex(_T("")), m_nAge(0), m_strDeparment(_T("")), m_strJob(_T("")), m_fSalary(0)
{}CModifyDlg::~CModifyDlg()
{
}void CModifyDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_strName);DDX_Text(pDX, IDC_EDIT1, m_strSex);DDX_Text(pDX, IDC_EDIT3, m_nAge);DDX_Text(pDX, IDC_EDIT4, m_strDeparment);DDX_Text(pDX, IDC_EDIT5, m_strJob);DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}BEGIN_MESSAGE_MAP(CModifyDlg, CDialogEx)ON_BN_CLICKED(IDC_MODIFY, &CModifyDlg::OnBnClickedModify)
END_MESSAGE_MAP()// CModifyDlg 消息处理程序void CModifyDlg::OnBnClickedModify()
{// TODO: 在此添加控件通知处理程序代码UpdateData();EndDialog(IDOK);
}
#pragma once
#include "mysql.h"
class CMySQL
{
public:CMySQL();~CMySQL();
public://连接数据库BOOL Connect(const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long client_flag);//执行SQL语句int Query(const char* str);//保存结果集MYSQL_RES* StoreResult();//检索结果集MYSQL_ROW FetchRow();
private:MYSQL* m_mysql;MYSQL_RES*  m_mysql_res;
public:MYSQL_ROW m_mysql_row;};
#include "pch.h"
#include "CMySQL.h"#pragma comment(lib,"libmysql.lib")CMySQL::CMySQL()
{m_mysql = mysql_init(NULL);
}CMySQL::~CMySQL()
{
}BOOL CMySQL::Connect(const char * host, const char * user, const char * passwd, const char * db, unsigned int port, const char * unix_socket, unsigned long client_flag)
{if (NULL == mysql_real_connect(m_mysql, host, user, passwd, db, port, unix_socket, client_flag)){return FALSE;}return TRUE;}int CMySQL::Query(const char * str)
{return mysql_real_query( m_mysql,str,strlen(str));
}//保存结果集
MYSQL_RES * CMySQL::StoreResult()
{m_mysql_res=mysql_store_result(m_mysql);return m_mysql_res;
}MYSQL_ROW CMySQL::FetchRow()
{m_mysql_row=mysql_fetch_row(m_mysql_res);return m_mysql_row;
}

相关文章:

MFC 基于数据库的管理系统

文章目录 初始化设置菜单 添加数据库类创建数据库配置数据库 全部代码 初始化 创建文件选择基于CListView 初始化数据 public:CListCtrl& m_list;CSQLView::CSQLView() noexcept:m_list(GetListCtrl()) {// TODO: 在此处添加构造代码}void CSQLView::OnInitialUpdate() {C…...

EfficientNet论文笔记

EfficientNet论文笔记 通过NAS平衡了channel&#xff0c;depth&#xff0c;resolution&#xff0c;发现在相同的FLOPs下&#xff0c;同时增加 depth和 resolution的效果最好。 数据集效果小于resolution怎么办&#xff1f; EfficientNet—b0框架 表格中每个MBConv后会跟一个…...

系统学习Linux-SSH远程服务(二)

概念 安全外壳协议&#xff0c;提供安全可靠的远程连接 特点 ssh是工作在传输层和应用层的协议 ssh提供了一组管理命令 ssh 远程登陆 scp 远程拷贝 sftp 远程上传下载 ssh-copy-id ssh keygen 生成 提供了多种身份验证机制 身份验证机制 密码验证 需要提供密码 密…...

PyTorch训练RNN, GRU, LSTM:手写数字识别

文章目录 pytorch 神经网络训练demoResult参考来源 pytorch 神经网络训练demo 数据集&#xff1a;MNIST 该数据集的内容是手写数字识别&#xff0c;其分为两部分&#xff0c;分别含有60000张训练图片和10000张测试图片 图片来源&#xff1a;https://tensornews.cn/mnist_intr…...

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度道路瑕疵&#xff08;裂纹&#xff08;Crack&#xff09;、检查井&#xff08;Manhole&#xff09;、网&#xff08;Net&#xff09;、裂纹块&#xff08;Patch-Crack&#xff09;、网块&#xff08;Patch-Net&#xff09;、坑洼块&#x…...

【裸辞转行】是告别,也是新的开始

一年多了没有更新&#xff0c;是因为去年身体加心理因素辞职了&#xff0c;并且大概率不会再做程序员了&#xff0c;嗯。本来觉得可能再也不会打开 CSDN 了&#xff0c;想了想&#xff0c;还是来做个告别吧&#xff0c;任何事情都该有始有终才对。 回忆碎碎念 是在去年的 11 …...

了解交换机接口的链路类型(access、trunk、hybrid)

上一个章节中讲到了vlan的作用及使用&#xff0c;这篇了解一下交换机接口的链路类型和什么情况下使用 vlan在数据包中是如何体现的&#xff0c;在上一篇的时候提到测试了一下&#xff0c;从PC1去访问PC4的时候&#xff0c;只从E0/0/2发送给了E0/0/3这是&#xff0c;因为两个接…...

Android系统启动流程分析

当按下Android系统的开机电源按键时候&#xff0c;硬件会触发引导芯片&#xff0c;执行预定义的代码&#xff0c;然后加载引导程序(BootLoader)到RAM&#xff0c;Bootloader是Android系统起来前第一个程序&#xff0c;主要用来拉起Android系统程序&#xff0c;Android系统被拉起…...

如何在Ubuntu上安装OpenneBula

OpenNebula是一个开源云计算平台&#xff0c;允许我们在完全虚拟化云中组合和管理VMware和KVM虚拟机 第1步&#xff1a;安装MariaDB数据库服务器 OpenNebula还需要一个数据库服务器来存储其内容。 安装MariaDB&#xff1a; 1 2 sudo apt update sudo apt install mariadb-s…...

解决MySQL中分页查询时多页有重复数据,实际只有一条数据的问题

0 前言 有一个离奇的BUG&#xff0c;在查询时&#xff0c;第一页跟第二页有一个共同的数据。有的数据却不显示。 后来发现是在SQL排序时没用主键排序。 解决&#xff1a;使用主键排序 以下是我准备的举例&#xff0c;可以自己试试。 1 数据准备 SET NAMES utf8mb4; SET FORE…...

【数据结构】时间复杂度---OJ练习题

目录 &#x1f334;时间复杂度练习 &#x1f4cc;面试题--->消失的数字 题目描述 题目链接&#xff1a;面试题 17.04. 消失的数字 &#x1f334;解题思路 &#x1f4cc;思路1&#xff1a; malloc函数用法 &#x1f4cc;思路2&#xff1a; &#x1f4cc;思路3&…...

京东自动化功能之商品信息监控是否有库存

这里有两个参数,分别是area和skuids area是地区编码,我这里统计了全国各个区县的area编码,用户可以根据实际地址进行构造skuids是商品的信息ID填写好这两个商品之后,会显示两种状态,判断有货或者无货状态,详情如下图所示 简单编写下python代码,比如我们的地址是北京市…...

【SwitchyOmega】SwitchyOmega 安装及使用

文章目录 安装教程使用教程 安装教程 SwitchyOmega 谷歌商店下载链接&#xff1a;https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hlen-US 在谷歌商店搜索 SwitchyOmega&#xff0c; 选择 Proxy SwitchyOmega 点击 Add t…...

CentOS5678 repo源 地址 阿里云开源镜像站

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$r…...

【LLM】Langchain使用[二](模型链)

文章目录 1. SimpleSequentialChain2. SequentialChain3. 路由链 Router Chain Reference 1. SimpleSequentialChain 场景&#xff1a;一个输入和一个输出 from langchain.chat_models import ChatOpenAI #导入OpenAI模型 from langchain.prompts import ChatPromptTempla…...

简单机器学习工程化过程

1、确认需求&#xff08;构建问题&#xff09; 我们需要做什么&#xff1f; 比如根据一些输入数据&#xff0c;预测某个值&#xff1f; 比如输入一些特征&#xff0c;判断这个是个什么动物&#xff1f; 这里我们要可以尝试分析一下&#xff0c;我们要处理的是个什么问题&…...

【MongoDB】SpringBoot整合MongoDB

【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…...

关于游戏引擎(godot)对齐音乐bpm的技术

引擎默认底层 1. _process(): 每秒钟调用60次&#xff08;无限的&#xff09; 数学 1. bpm1分钟节拍数量60s节拍数量 bpm120 60s120拍 2. 每拍子时间 60/bpm 3. 每个拍子触发周期所需要的帧数 每拍子时间*60(帧率&#xff09; 这个是从帧数级别上对齐拍子的时间&#x…...

【Go】实现一个代理Kerberos环境部分组件控制台的Web服务

实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群&#xff0c;除了集成了一些自定义的服务以外&…...

Spring Security 6.x 系列【63】扩展篇之匿名认证

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 本系列Spring Authorization Server 版本 1.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 概述2. 配置3. Anonymo…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...