找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4922|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

學(xué)生信息管理系統(tǒng)—MFC數(shù)據(jù)庫(kù)讀寫操作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-16 00:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、相關(guān)知識(shí):
添加頭文件#include <afxdao.h> //dao的頭文件
#include<comdef.h> //在數(shù)據(jù)格式轉(zhuǎn)換時(shí)會(huì)用得到(_variant_t(m_name))建立兩個(gè)全局變量,CDaoDatabase db;CDaoRecortset Dbset(&db);
2.添加一個(gè)列表控件
在初始化函數(shù)里添加如下代碼:
m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);//設(shè)置列表的擴(kuò)展風(fēng)格,參數(shù)的意思分別為:扁平的滾動(dòng)條、選擇整行、報(bào)表頭可拖拽、單機(jī)激活、繪制表格
m_list.InsertColumn(0,"姓名",LVCFMT_LEFT,227,0);
m_list.InsertColumn(1,"年齡",LVCFMT_LEFT,227,1);數(shù)據(jù)表的設(shè)計(jì)是:學(xué)生(姓名,年齡)//這里只是基本操作,還可以添加其他的選項(xiàng),如學(xué)號(hào)之類的
4判斷數(shù)據(jù)庫(kù)文件存不存在
CString Filepath="data.mdb";CFileFind Ffind;
BOOL flag=Ffind.FindFile(Filepath);;Ffind.Close();if(!flag){//如果不存在,就創(chuàng)建數(shù)據(jù)庫(kù) db.Create(Filepath); CString sqlcmd="CREATE TABLE DataTable(Name VARCHAR(20),Age VARCHAR(3))";//sql指令 db.Execute(sqlcmd);db.Close(); MessageBox("數(shù)據(jù)庫(kù)建立完成!","數(shù)據(jù)庫(kù)消息");}
5.將數(shù)據(jù)庫(kù)的內(nèi)容讀取到列表中
主要注意的是格式轉(zhuǎn)換:_variant_t varname;COleVariant varage;CString Sname,Sage;varname=Dbset.GetFieldValue("Name");Dbset.GetFieldValue("Age",varage);Sname=(LPCSTR)_bstr_t(varname);Sage=(LPCSTR)varage.pbstrVal;以及數(shù)據(jù)庫(kù)的打開與關(guān)閉db.Open(Filepath);Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0);Dbset.Close();db.Close();
6.新增操作
//核心代碼db.Open(Filepath);Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0);Dbset.AddNew();//在記錄集的尾端添加Dbset.SetFieldValue("Name",_variant_t(m_name));Dbset.SetFieldValue("Age",atol(m_age));Dbset.Update();//需要及時(shí)更新Dbset.Close();db.Close();
7.刪除操作
//核心代碼int pos=m_list.GetSelectionMark();db.Open(Filepath);Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0);Dbset.Move(pos);Dbset.Delete();//刪除一行不需要更新Dbset.Close();db.Close();
8.修改操作
//核心代碼db.Open(Filepath);Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0);Dbset.Move(pos);Dbset.Edit();//初始化編輯Dbset.SetFieldValue("Name",_variant_t(m_name));Dbset.SetFieldValue("Age",atol(m_age));Dbset.Update();//編輯完以后要及時(shí)更新Dbset.Close();db.Close();
9.注意的是
本例中并沒有限制相同數(shù)據(jù)的錄入,比如連續(xù)兩次輸入:Plucky,21Plucky,21數(shù)據(jù)庫(kù)會(huì)接受,如果要限制,只要加一個(gè)檢測(cè)函數(shù)就可以,實(shí)現(xiàn)起來也很簡(jiǎn)單,這里就不贅述。還有對(duì)年齡的輸入也沒有限制,可以通過sql語言來實(shí)現(xiàn),也可以通過對(duì)m_age的限制來實(shí)現(xiàn)。打開、創(chuàng)建完數(shù)據(jù)庫(kù)后要記得關(guān)閉,否則會(huì)出錯(cuò)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表