当前位置: 首页 > 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…...

为什么AI Coding、Skills、Agent智能体都偏爱Markdown?

为什么AI Coding、Skills、Agent智能体都偏爱Markdown&#xff1f; 更多问题讨论和资料获取&#xff0c;请关注文章最后的微信公众号 从ChatGPT的输出到GitHub Copilot的提示&#xff0c;从Claude的记忆存储到智能体的工作流配置——Markdown无处不在。这不是巧合&#xff0c;…...

不止是收发数据:挖掘常兴串口调试助手V5.01的5个隐藏效率神器(自动回复/进制转换/批量发送)

挖掘常兴串口调试助手V5.01的5个隐藏效率神器 在嵌入式开发领域&#xff0c;串口调试工具早已超越了简单的数据收发功能。常兴串口调试助手V5.01作为一款专业级工具&#xff0c;集成了多项提升开发效率的实用功能。本文将深入解析五个常被忽视但极具价值的隐藏功能&#xff0c;…...

嵌入式通信协议SPI/I2C/UART原理与应用

嵌入式通信协议原理图解与技术解析1. 串行通信协议基础1.1 SPI通信协议SPI(Serial Peripheral Interface)是一种全双工、同步串行通信协议&#xff0c;采用主从架构设计。其核心特点包括&#xff1a;四线制结构&#xff1a;SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(片选…...

农业气象监测系统—实时感知・远程管控・智能预警

在农业现代化向纵深推进的当下&#xff0c;气象数据已成为农业生产的 “核心指挥棒”。烟台中盾信息科技有限公司&#xff08;下称 “烟台中盾科技”&#xff09;紧扣农业农村发展需求&#xff0c;以物联网、大数据技术为基石&#xff0c;打造农业气象监测系统&#xff0c;构建…...

AlertDialog高斯模糊进阶指南:Android12新特性与兼容方案对比

AlertDialog高斯模糊进阶指南&#xff1a;Android12新特性与兼容方案对比 在移动应用设计中&#xff0c;视觉层次的营造往往决定了用户体验的优劣。当用户与AlertDialog交互时&#xff0c;背景的高斯模糊效果能够有效聚焦注意力&#xff0c;同时保持界面连贯性。Android 12引入…...

OpenClaw多任务调度:GLM-4.7-Flash并行处理文件与邮件

OpenClaw多任务调度&#xff1a;GLM-4.7-Flash并行处理文件与邮件 1. 为什么需要多任务调度 上周我需要同时处理两个紧急任务&#xff1a;整理三个月积累的会议录音文字稿&#xff0c;以及给二十多位合作伙伴发送定制化跟进邮件。手动操作需要至少6小时&#xff0c;而第二天早…...

用Docker三分钟搞定Hive伪分布式环境(附本地开发调试技巧)

用Docker三分钟搞定Hive伪分布式环境&#xff08;附本地开发调试技巧&#xff09; 在数据分析和处理领域&#xff0c;Hive作为基于Hadoop的数据仓库工具&#xff0c;因其能够处理海量数据并提供类SQL查询能力而广受欢迎。然而&#xff0c;传统的Hive环境搭建往往需要配置复杂的…...

提示工程架构师实战手册:2025年基于最新趋势的AI项目设计指南

提示工程架构师实战手册&#xff1a;2025年基于最新趋势的AI项目设计指南 1. 引入与连接&#xff1a;从“写Prompt”到“设计提示系统”的认知跃迁 1.1 一个真实的AI项目痛点 2024年底&#xff0c;某头部电商公司的智能客服项目陷入瓶颈&#xff1a; 用户发“这件衣服洗了会缩水…...

Java 从入门到精通(八):抽象类和接口到底怎么选?看懂之后,面向对象才算真的入门

Java 从入门到精通&#xff08;八&#xff09;&#xff1a;抽象类和接口到底怎么选&#xff1f;看懂之后&#xff0c;面向对象才算真的入门 学到封装、继承、多态之后&#xff0c;很多人会有一种“好像差不多懂了”的感觉。 会定义类&#xff0c;会 new 对象&#xff0c;也知道…...

RWKV7-1.5B-g1a实操手册:基于CSDN GPU平台的完整调用流程

RWKV7-1.5B-g1a实操手册&#xff1a;基于CSDN GPU平台的完整调用流程 1. 模型简介 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构的多语言文本生成模型&#xff0c;特别适合中文场景下的轻量级应用。这个1.5B参数的版本在保持较高生成质量的同时&#xff0c;对硬件要求非常友好&am…...