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,depth,resolution,发现在相同的FLOPs下,同时增加 depth和 resolution的效果最好。 数据集效果小于resolution怎么办? EfficientNet—b0框架 表格中每个MBConv后会跟一个…...
系统学习Linux-SSH远程服务(二)
概念 安全外壳协议,提供安全可靠的远程连接 特点 ssh是工作在传输层和应用层的协议 ssh提供了一组管理命令 ssh 远程登陆 scp 远程拷贝 sftp 远程上传下载 ssh-copy-id ssh keygen 生成 提供了多种身份验证机制 身份验证机制 密码验证 需要提供密码 密…...
PyTorch训练RNN, GRU, LSTM:手写数字识别
文章目录 pytorch 神经网络训练demoResult参考来源 pytorch 神经网络训练demo 数据集:MNIST 该数据集的内容是手写数字识别,其分为两部分,分别含有60000张训练图片和10000张测试图片 图片来源:https://tensornews.cn/mnist_intr…...
基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度道路瑕疵(裂纹(Crack)、检查井(Manhole)、网(Net)、裂纹块(Patch-Crack)、网块(Patch-Net)、坑洼块&#x…...
【裸辞转行】是告别,也是新的开始
一年多了没有更新,是因为去年身体加心理因素辞职了,并且大概率不会再做程序员了,嗯。本来觉得可能再也不会打开 CSDN 了,想了想,还是来做个告别吧,任何事情都该有始有终才对。 回忆碎碎念 是在去年的 11 …...
了解交换机接口的链路类型(access、trunk、hybrid)
上一个章节中讲到了vlan的作用及使用,这篇了解一下交换机接口的链路类型和什么情况下使用 vlan在数据包中是如何体现的,在上一篇的时候提到测试了一下,从PC1去访问PC4的时候,只从E0/0/2发送给了E0/0/3这是,因为两个接…...
Android系统启动流程分析
当按下Android系统的开机电源按键时候,硬件会触发引导芯片,执行预定义的代码,然后加载引导程序(BootLoader)到RAM,Bootloader是Android系统起来前第一个程序,主要用来拉起Android系统程序,Android系统被拉起…...
如何在Ubuntu上安装OpenneBula
OpenNebula是一个开源云计算平台,允许我们在完全虚拟化云中组合和管理VMware和KVM虚拟机 第1步:安装MariaDB数据库服务器 OpenNebula还需要一个数据库服务器来存储其内容。 安装MariaDB: 1 2 sudo apt update sudo apt install mariadb-s…...
解决MySQL中分页查询时多页有重复数据,实际只有一条数据的问题
0 前言 有一个离奇的BUG,在查询时,第一页跟第二页有一个共同的数据。有的数据却不显示。 后来发现是在SQL排序时没用主键排序。 解决:使用主键排序 以下是我准备的举例,可以自己试试。 1 数据准备 SET NAMES utf8mb4; SET FORE…...
【数据结构】时间复杂度---OJ练习题
目录 🌴时间复杂度练习 📌面试题--->消失的数字 题目描述 题目链接:面试题 17.04. 消失的数字 🌴解题思路 📌思路1: malloc函数用法 📌思路2: 📌思路3&…...
京东自动化功能之商品信息监控是否有库存
这里有两个参数,分别是area和skuids area是地区编码,我这里统计了全国各个区县的area编码,用户可以根据实际地址进行构造skuids是商品的信息ID填写好这两个商品之后,会显示两种状态,判断有货或者无货状态,详情如下图所示 简单编写下python代码,比如我们的地址是北京市…...
【SwitchyOmega】SwitchyOmega 安装及使用
文章目录 安装教程使用教程 安装教程 SwitchyOmega 谷歌商店下载链接:https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hlen-US 在谷歌商店搜索 SwitchyOmega, 选择 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 场景:一个输入和一个输出 from langchain.chat_models import ChatOpenAI #导入OpenAI模型 from langchain.prompts import ChatPromptTempla…...
简单机器学习工程化过程
1、确认需求(构建问题) 我们需要做什么? 比如根据一些输入数据,预测某个值? 比如输入一些特征,判断这个是个什么动物? 这里我们要可以尝试分析一下,我们要处理的是个什么问题&…...
【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次(无限的) 数学 1. bpm1分钟节拍数量60s节拍数量 bpm120 60s120拍 2. 每拍子时间 60/bpm 3. 每个拍子触发周期所需要的帧数 每拍子时间*60(帧率) 这个是从帧数级别上对齐拍子的时间&#x…...
【Go】实现一个代理Kerberos环境部分组件控制台的Web服务
实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群,除了集成了一些自定义的服务以外&…...
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…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...





添加修改类
// CModifyDlg 对话框

设置静态链接
将dll放入X64Debug中