//////////////////2015/07/22///////////////////

/////////////////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数据库的使用)的更多相关文章

  1. Python操作Access数据库

    我们在这篇文章中公分了五个步骤详细分析了Python操作Access数据库的相关方法,希望可以给又需要的朋友们带来一些帮助. AD: Python编 程语言的出现,带给开发人员非常大的好处.我们可以利 ...

  2. Access数据库跨库查询及记录集区分

    医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...

  3. Windows 10中Oracle数据库导出到Access数据库(MDB)

    本篇博文简单介绍将Oracle数据库中表导出到Access数据库(主要是MDB格式)的方法.主要有三种,分别是PL/SQL.ESFDatabaseMigrationToolkit及ODBC. PL/S ...

  4. 【.Net 学习系列】-- Windows身份模拟(WindowsIdentity.Impersonate)时读取Access数据库

    参考资料: WindowsIdentity.Impersonate https://msdn.microsoft.com/zh-cn/library/w070t6ka(v=vs.110).aspx A ...

  5. Cocos2d-x飞机大战教程笔记

    咳咳~跟着大神的教程学做Cocos2d-x的飞机大战...鉴于我是那种跟着教程都会出非常多错的人,所以还是一路跟着做些笔记比較好.并且因为是用课余时间,所以仅仅能断断续续地做,写下来也好让自己别忘记~ ...

  6. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

  7. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)

    整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...

  8. Windows程序设计学习笔记(一)Windows内存管理初步

    学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...

  9. Windows程序设计学习笔记(1):一个简单的windows程序

    <Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...

随机推荐

  1. C语言总结(2)

    1.函数printf(" ")可以输出双引号中任何固定不变的内容. 2.必须在程序前面加:预处理命令. 3.#include<stdio.h>后面不需要“:”,“:”. ...

  2. java异常处理及400,404,500错误处理

        java代码中经常碰到各种需要处理异常的时候,比如什么IOException  SQLException  NullPointException等等,在开发web项目中,遇到异常,我现在做的就 ...

  3. [OJ#15]TR #2 画心

    [OJ#15]TR #2 画心 试题描述 渠是一名画师.渠有一支神奇的画笔,可以画尽因果. 渠要画一幅画,这幅画由N个线段组成,线段从1开始编号,第i条线段有一个特殊的因果值Ai. 由于画太长了,渠不 ...

  4. THUWC2018爆0记

    Day-2 心里想到要明天就要出发,去长沙膜拜各省dalao,心里挺激动,, 细细整理着行囊 Day-1 一觉睡到天明,正好是星期一,大家都要上课,也没怎么听物理老师讲什么. 到了9:30,就背着包拖 ...

  5. java面试题之谈谈你对java的理解

    平台无关性:一处编译到处运行 GC:不用像c++那样手动释放堆内容 语言特性:泛型.反射.lamda表达式 面向对象:封装.继承.多态 类库:集合.并发库.网络库.IO库 异常处理

  6. Java-Pi的几种实现

    1.无穷级数计算 p = 1 - 1/3 + 1/5 -1/7+..... π=4p 2.使用 Nilakantha 级数 π = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7 ...

  7. 【Tyvj2133&BZOJ1146】网络管理Network(树套树,DFS序,树状数组,主席树,树上差分)

    题意:有一棵N个点的树,每个点有一个点权a[i],要求在线实现以下操作: 1:将X号点的点权修改为Y 2:查询X到Y的路径上第K大的点权 n,q<=80000 a[i]<=10^8 思路: ...

  8. 你如果知道这些css常用命名,绝对事半功倍!--摘抄

    对于布局,即用.g-作为前缀,通常有以下推荐的写法 对于模块,即.m-作为前缀.元件,.u-作为前缀,通常有下面推荐的写法. 对于功能,即以.f-为前缀,通常推荐如下: 对于颜色,即以.s-为前缀,通 ...

  9. PhpStorm配置svn:Can't use Subversion command line client:svn

    Can't use Subversion command line client:svn 感谢: 萌芽的绿豆的文章:https://www.cnblogs.com/yuanchaoyong/p/616 ...

  10. python常用模块1

    一. 什么是模块: 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码 ...