windows程序设计——飞机大战笔记(Access数据库的使用)
2017-07-19 18:24
447 查看
//////////////////2015/07/22///////////////////
/////////////////by xbw /////////////////////////
////////////////环境 VS2013/////////////////
为了登陆界面的注冊用的数据库鼓捣的一天了,必须得写篇文章发泄一下了。
昨天发表的文章还是存在一点bug的。不足之处非常easy就看出来了。这种。今天有改动了一下,是大改哦
这就是改动的地方,资料查了半天。才知道MFC调用数据库有这么多方法,这个呢是适合我的。
由于我的定义是
CDaoDatabase db; //数据库
CDaoRecordset RecSet(&db); //记录集
头文件 #include "afxdao.h"
唉,不多说了,直接上完整代码,贴出来好心疼,大家互相交流学习吧,,,。,,
中间太多凝视的部分,由于改了又改,不怕辛苦,弄出来了真的非常开心,,。。,,给你们分享了。
这个注冊部分呢也改动了。;;
直接上代码吧;;。。
这段代码让我哭笑不得,,出了个bug。在群里跟别人分享都说这要是加上开机自己主动启动就无敌了。事实上没这么可怕。仅仅是死循环。一直显示该用户已存在,避免这个的方法是什么清楚吧。就是不要反复注冊。开玩笑了。你仅仅要把break那个地方取消凝视就好了,千万不要乱用哦。要维护好网络安全哦;;;;;;
好了,我也是个渣渣,仅仅能整理资料,并不能讲的非常透彻,,,。,,制作登陆账号注冊的能够试试此代码;;;不错的哦。。;
累死咯,不玩了,,,,接下来弄一下MFC套接字,争取把数据放到server上,用client调用server注冊。,,。,
有懂的给我留言吧,谢谢啦;;;;
/////////////////by xbw /////////////////////////
////////////////环境 VS2013/////////////////
为了登陆界面的注冊用的数据库鼓捣的一天了,必须得写篇文章发泄一下了。
昨天发表的文章还是存在一点bug的。不足之处非常easy就看出来了。这种。今天有改动了一下,是大改哦
int first = 1; while (!Dbset.IsEOF()) // 有没有到表结尾 { Dbset.GetFieldValue(_T("Name"), var); Sname = (LPCSTR)var.pbstrVal; Dbset.GetFieldValue(_T("Psw"), var); Spsw = (LPCSTR)var.pbstrVal; Dbset.GetFieldValue(_T("Score"), var); Sscore = (LPCSTR)var.pbstrVal; if (Sname.Compare(m_logname) == 0 && Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致 { MessageBox(_T("登入成功!"), _T("温情提示")); CDialog::OnOK(); first = 0; break; } else { Dbset.MoveNext(); } } if (first) { MessageBox(_T("用户或password错误!"), _T("温情提示")); }
这就是改动的地方,资料查了半天。才知道MFC调用数据库有这么多方法,这个呢是适合我的。
由于我的定义是
CDaoDatabase db; //数据库
CDaoRecordset RecSet(&db); //记录集
头文件 #include "afxdao.h"
唉,不多说了,直接上完整代码,贴出来好心疼,大家互相交流学习吧,,,。,,
// loading.cpp : 实现文件
//
#include "stdafx.h"
#include "PlaneGame.h"
#include "loading.h"
#include "afxdialogex.h"
#include "afxdao.h"
#include "zhuce.h"
// loading 对话框
IMPLEMENT_DYNAMIC(loading, CDialogEx)
CDaoDatabase db; //数据库
CDaoRecordset RecSet(&db); //记录集
loading::loading(CWnd* pParent /*=NULL*/)
: CDialogEx(loading::IDD, pParent)
, open(false)
, open1(false)
, m_logname(_T(""))
, m_logpsw(_T(""))
{
CString Filepath = _T("Database.mdb");
CDaoRecordset Dbset(&db);
CFileFind Ffind;
BOOL flag = Ffind.FindFile(Filepath);
Ffind.Close();
if (!flag)
{
CString sqlcmd = _T("CREATE TABLE DataTable(Name VARCHAR(20),Psw VARCHAR(20),Score VARCHAR(20))");
db.Create(Filepath);
db.Execute(sqlcmd);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable", 0));
Dbset.AddNew();
Dbset.SetFieldValue(_T("Name"), _variant_t(_T("plucky")));
Dbset.SetFieldValue(_T("Psw"), _variant_t(_T("MFC_py")));//设置初始username和password
Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0")));
Dbset.Update();
Dbset.Close();
db.Close();
}//这样就创建好了数据库文件,并且设置了初始化账号
}
loading::~loading()
{
}
void loading::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDIT3, m_logname);
DDX_Text(pDX, IDC_EDIT4, m_logpsw);
}
BEGIN_MESSAGE_MAP(loading, CDialogEx)
ON_WM_NCHITTEST()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDCANCEL, &loading::OnBnClickedCancel)
ON_BN_CLICKED(IDOK, &loading::OnBnClickedOk)
ON_BN_CLICKED(IDOK2, &loading::OnBnClickedOk2)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, &loading::OnNMClickSyslink1)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK2, &loading::OnNMClickSyslink2)
END_MESSAGE_MAP()
// loading 消息处理程序
//鼠标拖动窗体移动
//CDaoDatabase db; //数据库
//CDaoRecordset RecSet(&db); //记录集
LRESULT loading::OnNcHitTest(CPoint point)
{
// TODO: 在此加入消息处理程序代码和/或调用默认值
ScreenToClient(&point);
CRect rc;
GetClientRect(&rc);
if (rc.PtInRect(point))
{
return HTCAPTION;
}
else
{
return CDialogEx::OnNcHitTest(point);
}
}
HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
//CFont font;
//font.CreatePointFont(200, _T("宋体"), NULL);
//GetDlgItem(IDC_STATIC)->SetFont(&font);
// TODO: 在此更改 DC 的不论什么特性
//在OnInitDialog()函数中加入:
// TODO: 在此加入额外的初始化代
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(200, 100, 50));
pDC->SetBkMode(RGB(200, 100, 50)); //设置背景透明
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
// TODO: 假设默认的不是所需画笔。则返回还有一个画笔
//return hbr;
return 0;
}
void loading::OnBnClickedCancel()
{
// TODO: 在此加入控件通知处理程序代码
open = FALSE;
CDialogEx::OnCancel();
}
void loading::OnBnClickedOk()
{
// TODO: 在此加入控件通知处理程序代码
// CString Filepath = _T("Database.mdb");
// CDaoRecordset Dbset(&db);
// CFileFind Ffind;
// BOOL flag = Ffind.FindFile(Filepath);
// Ffind.Close();
/*if (!flag)
{
CString sqlcmd = _T("CREATE TABLE DataTable(Name VARCHAR(20),Psw VARCHAR(20),Score VARCHAR(20))");
db.Create(Filepath);
db.Execute(sqlcmd);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable", 0));
Dbset.AddNew();
Dbset.SetFieldValue(_T("Name"), _variant_t(_T("plucky")));
Dbset.SetFieldValue(_T("Psw"), _variant_t(_T("MFC_py")));//设置初始username和password
Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0")));
Dbset.Update();
Dbset.Close();
db.Close();
}//这样就创建好了数据库文件,并且设置了初始化账号*/
/*CString sPath;
GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos = sPath.ReverseFind('\\');
sPath = sPath.Left(nPos);
CString strFile = sPath + _T("\\Database.mdb");
db.Open(strFile); // 打开已创建的demo数据库及DemoTable表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT* FROM DataTable"), NULL);*/
//UpdateData(TRUE);
//CString m_tablefield, m_searchSQL;
//if (m_sfield.Compare("姓名") == 0)
//{
// m_tablefield.Format("Name");
//}
/*UpdateData(true);
CDaoRecordset Dbset(&db);
CString Filepath =_T( "Database.mdb");
CString Sname, Spsw,Sscore;
_variant_t varname, varpsw,varscore;
db.Open(Filepath);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);
varname = Dbset.GetFieldValue(_T("Name"));
varpsw = Dbset.GetFieldValue(_T("Psw"));
varscore = Dbset.GetFieldValue(_T("Score"));
Sname = (LPCSTR)_bstr_t(varname);
Spsw = (LPCSTR)_bstr_t(varpsw);
Sscore = (LPCSTR)_bstr_t(varscore);
Dbset.Close();
db.Close();
if (Sname.Compare(m_logname)==0&&Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致
{
MessageBox(_T("登入成功!"), _T("温情提示"));
CDialog::OnOK();
}
else
{
MessageBox(_T("用户或password错误!"), _T("温情提示"));
return;
}*/
UpdateData(true);
COleVariant var; // 字段类型
var.ChangeType(VT_BSTR, NULL);
//CString strName, strAge, strFile;
CString Sname, Spsw, Sscore;
CDaoRecordset Dbset(&db);
CString Filepath = _T("Database.mdb");
db.Open(Filepath);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);
int first = 1; while (!Dbset.IsEOF()) // 有没有到表结尾 { Dbset.GetFieldValue(_T("Name"), var); Sname = (LPCSTR)var.pbstrVal; Dbset.GetFieldValue(_T("Psw"), var); Spsw = (LPCSTR)var.pbstrVal; Dbset.GetFieldValue(_T("Score"), var); Sscore = (LPCSTR)var.pbstrVal; if (Sname.Compare(m_logname) == 0 && Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致 { MessageBox(_T("登入成功!"), _T("温情提示")); CDialog::OnOK(); first = 0; break; } else { Dbset.MoveNext(); } } if (first) { MessageBox(_T("用户或password错误!"), _T("温情提示")); }
db.Close();
Dbset.Close();
/*UINT nIndex = 0;
CString TempStr;
COleVariant OleVariant;
// 删除列表控件全部记录
BookList.DeleteAllItems();
// 定义记录集对象,并打开记录集
CDaoRecordset Record(&db);
Record.Open(dbOpenDynaset, L"SELECT * FROM BOOK");
// 移动到第一条记录
Record.MoveFirst();
while (!Record.IsEOF())
{
// 在列表控件加入记录
TempStr.Format(L"%d", nIndex + 1);
this->BookList.InsertItem(nIndex, TempStr);
for (int i = 1; i <= 3; i++)
{
Record.GetFieldValue(i, OleVariant);
this->BookList.SetItemText(nIndex, i, OleVariant.bstrVal);
}
Record.GetFieldValue(4, OleVariant);
TempStr.Format(L"%d", OleVariant.uintVal);
this->BookList.SetItemText(nIndex, 4, TempStr);
// 移到下一条记录Record.MoveNext () ;nIndex++ ;
}
// 关闭记录集
Record.Close();*/
}
void loading::OnBnClickedOk2()
{
open1 = FALSE;
// TODO: 在此加入控件通知处理程序代码
}
void loading::OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此加入控件通知处理程序代码
zhuce dlg;
//opening = TRUE;
if (dlg.DoModal() == IDOK)
{
Invalidate();
}
*pResult = 0;
}
void loading::OnNMClickSyslink2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此加入控件通知处理程序代码
MessageBox(_T("暂无此功能,请联系开发人员"), _T("温情提示"));
*pResult = 0;
}
中间太多凝视的部分,由于改了又改,不怕辛苦,弄出来了真的非常开心,,。。,,给你们分享了。
这个注冊部分呢也改动了。;;
直接上代码吧;;。。
// zhuce.cpp : 实现文件 // #include "stdafx.h" #include "PlaneGame.h" #include "zhuce.h" #include "afxdialogex.h" #include "afxdao.h" // zhuce 对话框 IMPLEMENT_DYNAMIC(zhuce, CDialogEx) zhuce::zhuce(CWnd* pParent /*=NULL*/) : CDialogEx(zhuce::IDD, pParent) , m_regname(_T("")) , m_regpsw(_T("")) { } zhuce::~zhuce() { } void zhuce::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_regname); DDX_Text(pDX, IDC_EDIT2, m_regpsw); } BEGIN_MESSAGE_MAP(zhuce, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &zhuce::OnBnClickedButton1) ON_BN_CLICKED(IDOK, &zhuce::OnBnClickedOk) END_MESSAGE_MAP() // zhuce 消息处理程序 void zhuce::OnBnClickedButton1() { // TODO: 在此加入控件通知处理程序代码 UpdateData(true);//上一次视频里已经讲过,续及时更新数据 CString Filepath = _T("Database.mdb"); //CString Sname; CDaoDatabase db; // _variant_t varname; CDaoRecordset Dbset(&db); db.Open(Filepath); Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0); //varname = Dbset.GetFieldValue(_T("Name")); //Sname = (LPCSTR)_bstr_t(varname); if (m_regname.IsEmpty() || m_regpsw.IsEmpty()) { MessageBox(_T("信息不能为空!"), _T("温情提示")); } else { CString Sname; COleVariant var; // 字段类型 var.ChangeType(VT_BSTR, NULL); int first = 1; while (!Dbset.IsEOF()) // 有没有到表结尾 { Dbset.GetFieldValue(_T("Name"), var); Sname = (LPCSTR)var.pbstrVal; if (Sname.Compare(m_regname) == 0)//假设password和账户与数据库一致 { MessageBox(_T("该用户已存在!"), _T("温情提示")); CDialog::OnOK(); first = 0; //break; } else { Dbset.MoveNext(); } } if (first) { Dbset.MoveLast(); //Dbset.Edit();//由于表里仅仅同意有一个数据,所以就将新数据取代旧数据 Dbset.AddNew(); Dbset.SetFieldValue(_T("Name"), _variant_t(m_regname)); Dbset.SetFieldValue(_T("Psw"), _variant_t(m_regpsw)); Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0"))); Dbset.Update(); MessageBox(_T("用户注冊成功!"), _T("温情提示")); } } Dbset.Close(); db.Close(); } void zhuce::OnBnClickedOk() { // TODO: 在此加入控件通知处理程序代码 CDialogEx::OnOK(); }
这段代码让我哭笑不得,,出了个bug。在群里跟别人分享都说这要是加上开机自己主动启动就无敌了。事实上没这么可怕。仅仅是死循环。一直显示该用户已存在,避免这个的方法是什么清楚吧。就是不要反复注冊。开玩笑了。你仅仅要把break那个地方取消凝视就好了,千万不要乱用哦。要维护好网络安全哦;;;;;;
好了,我也是个渣渣,仅仅能整理资料,并不能讲的非常透彻,,,。,,制作登陆账号注冊的能够试试此代码;;;不错的哦。。;
累死咯,不玩了,,,,接下来弄一下MFC套接字,争取把数据放到server上,用client调用server注冊。,,。,
有懂的给我留言吧,谢谢啦;;;;
相关文章推荐
- windows程序设计——飞机大战笔记(Access数据库的使用)
- windows程序设计——飞机大战笔记(数据库记录游戏得分)
- windows程序设计——飞机大战笔记(调用登陆数据库)
- windows程序设计——飞机大战笔记(单文档文件登陆界面)
- windows程序设计——飞机大战笔记(解决输入混合密码账户,结局自动记录数据)
- Windows程序设计笔记(二)
- Windows使用笔记
- Windows程序设计 读书笔记 - 键盘。
- Windows程序设计——消息对话框的使用小结
- Windows程序设计 读书笔记 - 菜单及其他资源。
- Windows程序设计 读书笔记 - 位图和BitBlt。
- Windows程序设计 读书笔记 - 鼠标。
- Windows程序设计 读书笔记 - 剪贴板。
- Windows程序设计 读书笔记 - GDI轨迹/字体轮廓
- Windows程序设计 读书笔记 - 元文件
- Windows程序设计 读书笔记 - 多文档界面
- asp.net ajax程序设计之笔记4--使用DragOverlayExtender拖动元素,结合ProfileService将位置信息保存至数据库
- windows程序设计第二章学习笔记
- Windows程序设计 读书笔记 - 对话框。
- Windows程序设计阅读笔记(4)-得到设备内容HANDLE