? 近期寫一個(gè)數(shù)據(jù)庫(kù)的課程設(shè)計(jì),用的是C++ MFC 。最開始用的是ADO技術(shù),可是苦于網(wǎng)上大部分的教程都是VC6.0的,對(duì)著教程敲了4,5遍還是執(zhí)行不成功。我用的IDE是VS2012,畢竟VC6.0和VS2012之間的差距太大了,所以就改成了ODBC編程,實(shí)際上ODBC對(duì)于數(shù)據(jù)庫(kù)類的操作封裝的非常好,能夠非常方便的使用相關(guān)的函數(shù)并且不須要自己去寫一些異常處理機(jī)制,對(duì)于新手來(lái)說(shuō)是非常方便的,網(wǎng)上也有非常多的ODBC教程,我照著網(wǎng)上的VS2010的ODBC教程然后加上自己的理解寫了一個(gè)學(xué)生成績(jī)管理系統(tǒng),非常easy,可是也基本上能把ODBC的思想和簡(jiǎn)單的使用方法說(shuō)清楚了,聲明:此文章僅適合剛剛接觸數(shù)據(jù)庫(kù)的新手以及相關(guān)專業(yè)的大學(xué)生,大神就能夠直接忽略了,如有大神看了文章后對(duì)代碼或者思想提出寶貴的改進(jìn)意見,在下不勝感激!
?OK,廢話不多說(shuō)。首先打開VS2012->建立一個(gè)MFC應(yīng)用程序(基于DIALOG),然后就是自己拉EDIT和BUTTON了,這個(gè)非常easy,基本學(xué)過(guò)一點(diǎn)MFC的都曉得怎么去弄,大小間距什么的就不具體介紹了,VS2012->格式,里面有對(duì)齊和使大小同樣,自己去弄就能夠了,基本上
4個(gè)static,4個(gè)EDIT,四個(gè)BUTTON,一個(gè)List Control
,注意的是
List Control的格式設(shè)置為report
。
這個(gè)就是我的基本界面, cno是課程號(hào),cname是課程名,xf是學(xué)分 ,由于數(shù)據(jù)庫(kù)中就是這么寫的,所以static里面的就不變了,這個(gè)能夠自己隨便寫,沒有影響的。
? 以下就是基本的了,首先要做的就是加入成員變量,在主對(duì)話框右鍵單擊->類向?qū)?>成員變量,然后就是自己加入成員,這里要注意的是類型,這個(gè)類型為什么要這么寫,下文我會(huì)一一說(shuō)明
E9DC)R4LLWOE%]K.jpg)


CString m_cname;
long m_xf;
// 重寫
// 向?qū)傻奶摵瘮?shù)重寫
public:
virtual CString GetDefaultConnect(); // 默認(rèn)連接字符串
virtual CString GetDefaultSQL(); // 記錄集的默認(rèn) SQL
virtual void DoFieldExchange(CFieldExchange* pFX); // RFX 支持
// 實(shí)現(xiàn)
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
m_cname = "";
m_xf = 0;
m_nFields = 3;
m_nDefaultType = dynaset;
MyCjList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_TWOCLICKACTIVATE);
MyCjList.InsertColumn(0,L"xf",LVCFMT_CENTER,80,0);
MyCjList.InsertColumn(0,L"cname",LVCFMT_CENTER,160,0);
MyCjList.InsertColumn(0,L"cno",LVCFMT_CENTER,80,0);
return TRUE;
DDX_Control(pDX, IDC_LIST1, MyCjList);
DDX_Text(pDX, IDC_EDIT1, MyCno);
DDX_Text(pDX, IDC_EDIT2, MyCname);
DDX_Text(pDX, IDC_EDIT3, MyXf);
GetDlgItem(IDC_EDIT3)->SetWindowTextW(L"");
{
// TODO: 在此加入控件通知處理程序代碼
CKC MyKC;//XS類操作對(duì)象
MyKC.Open();
MyKC.MoveFirst();
CString str1,str2,str3;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(str1);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(str2);
GetDlgItem(IDC_EDIT3)->GetWindowTextW(str3);
CString sql;
sql.Format(L"select * from KC where cno = '%s'",str1);
MessageBox(sql);
ListAll(sql);
}
{
MyCjList.DeleteAllItems();
MyCjList.InsertItem(0,L"");
CKC m_kc;//類的對(duì)象,用來(lái)調(diào)用操作數(shù)據(jù)庫(kù)函數(shù)
try
{
if(m_kc.IsOpen())
{
m_kc.Close();
}
if(!m_kc.Open(CRecordset::snapshot,str))
{
MessageBox(L"數(shù)據(jù)庫(kù)打開失敗",L"數(shù)據(jù)錯(cuò)誤",MB_OK);
return;
}
}
catch(CDBException *e)
{
e->ReportError();
}
int index = 0;
//int line = 0;
CString t;
m_kc.MoveFirst();
while(!m_kc.IsEOF())
{
//MessageBox(L"123");
MyCjList.SetItemText(index,0,m_kc.m_cno);
m_kc.m_cname.Remove(' ');
MyCjList.SetItemText(index,1,m_kc.m_cname);
//MessageBox(m_xs.m_name);
t.Format(L"%Id",m_kc.m_xf);
const TCHAR * ip = (LPCTSTR)t;
MyCjList.SetItemText(index,2,t);
m_kc.MoveNext();
index++;
}
m_kc.Close();
}
? ??const TCHAR * ip = (LPCTSTR)t;
{
// TODO: 在此加入控件通知處理程序代碼
CString str1,str2,str3;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(str1);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(str2);
GetDlgItem(IDC_EDIT3)->GetWindowTextW(str3);
CString sql;//sql語(yǔ)句
CDatabase m_xs;//對(duì)象
m_xs.Open(L"Test",FALSE,FALSE,L"ODBC;UID=;PWD=;");
try{
if(str1.IsEmpty()||str2.IsEmpty()||str3.IsEmpty())
{
MessageBox(L"輸入的信息不完好請(qǐng)完好后在插入數(shù)據(jù)",L"提示");
MyCno = (L"");
MyCname = L"";
MyXf = _ttoi(L"");
UpdateData(FALSE);
}
else
{
sql.Format(_T("insert into KC values('%s','%s','%s')"),str1,str2,str3);
MessageBox(sql);
m_xs.ExecuteSQL(sql);
MessageBox(L"加入成功!",L"提示");
//UpdateData(FALSE);
}
}
catch(CDBException ex)
{
MessageBox(L"插入異常");
ex.ReportError();
ex.Delete();
}
m_xs.Close();
}
void CXSKC::OnBnClickedButton3()//刪除
{
// TODO: 在此加入控件通知處理程序代碼
CString str1,str2,str3;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(str1);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(str2);
GetDlgItem(IDC_EDIT3)->GetWindowTextW(str3);
CString sql;//sql語(yǔ)句
CDatabase m_xs;//對(duì)象
m_xs.Open(L"Test",FALSE,FALSE,L"ODBC;UID=;PWD=");// 帳號(hào)與password我就不寫了,自己把自己的SQL的帳號(hào)與password寫上就好。
sql.Format(L"delete from KC where cno = '%s'",str1);
try{
if(str1.IsEmpty())
{
MessageBox(L"信息不完整",L"提示");
UpdateData(FALSE);
return;
}
else
{
//sql.Format(L"delete from KC where cno = '%S'",str1);
MessageBox(sql);
m_xs.ExecuteSQL(sql);
MessageBox(L"刪除成功!",L"提示");
}
}
catch(CDBException ex)
{
ex.ReportError();
ex.Delete();
}
m_xs.Close();
}
void CXSKC::OnBnClickedButton4()//改動(dòng)
{
// TODO: 在此加入控件通知處理程序代碼
CString str1,str2,str3;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(str1);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(str2);
GetDlgItem(IDC_EDIT3)->GetWindowTextW(str3);
CString sql;//sql語(yǔ)句
CDatabase m_xs;//對(duì)象
m_xs.Open(L"Test",FALSE,FALSE,L"ODBC;UID=;PWD=;");
sql.Format(L"update KC set cno = '%s' , cname = '%s',xf = '%s' where cno = '%s'",str1,str2,str3,str1);
try
{
if(str1.IsEmpty()||str2.IsEmpty()||str3.IsEmpty())
{
MessageBox(L"信息輸入不完整",L"提示");
UpdateData(FALSE);
return;
}
else
{
sql.Format(L"update KC set cno = '%s' , cname = '%s',xf = '%s' where cno = '%s'",str1,str2,str3,str1);
MessageBox(sql);
if(MessageBox(L"cno:"+str1+'\n'+L"cname:"+str2+'\n'+L"xf:"+str3+'\n',L"確認(rèn)改動(dòng)?",MB_OKCANCEL)==IDCANCEL)
{
return;
}
else
{
m_xs.ExecuteSQL(sql);
MessageBox(L"改動(dòng)成功",L"提示");
}
}
}
catch(CDBException ex)
{
ex.ReportError();
ex.Delete();
}
m_xs.Close();
}

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
