使用ADO對象添加、修改、刪除數(shù)據(jù)字體大?。?a class="big16 black" title=大號字 href="javascript:setFontSize(16)">大 中 小 龔厚升 發(fā)表于 2010-08-05 13:51評論0條 閱讀131次
使用ADO對象對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行添加、修改和刪除等操作。首先創(chuàng)建一個(gè)ADO類,通過ADO類連接數(shù)據(jù)庫,并打開記錄集。
例如,使用ADO對象添加、修改、刪除數(shù)據(jù),程序設(shè)計(jì)步驟如下: (1)創(chuàng)建一個(gè)基于對話框的應(yīng)用程序,將對話框的Caption屬性修改“使用ADO對象添加、修改、刪除數(shù)據(jù)”。 (2)向?qū)υ捒蛑刑砑右粋€(gè)列表視圖控件、3個(gè)靜態(tài)文本控件、3個(gè)編輯框控件和4個(gè)按鈕控件,并為控件關(guān)聯(lián)變量。 (3)創(chuàng)建一個(gè)ADO類,請參照封裝ADO對象的內(nèi)容。 (4)在StdAfx.h導(dǎo)入ADO動(dòng)態(tài)鏈接庫,代碼如下。 #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") //導(dǎo)入ADO動(dòng)態(tài)鏈接庫 (5)在對話框的OnInitDialog函數(shù)設(shè)置列表視圖控件的擴(kuò)展風(fēng)格以及列標(biāo)題,代碼如下。 m_Grid.SetExtendedStyle(LVS_EX_FLATSB //扁平風(fēng)格顯示滾動(dòng)條 |LVS_EX_FULLROWSELECT //允許整行選中 |LVS_EX_HEADERDRAGDROP //允許整列拖動(dòng) |LVS_EX_ONECLICKACTIVATE //單擊選中項(xiàng) |LVS_EX_GRIDLINES); //畫出網(wǎng)格線 //設(shè)置列標(biāo)題及列寬度 m_Grid.InsertColumn(0,"編號",LVCFMT_LEFT,110,0); m_Grid.InsertColumn(1,"姓名",LVCFMT_LEFT,110,1); m_Grid.InsertColumn(2,"學(xué)歷",LVCFMT_LEFT,110,2); AddToGrid(); //向列表中插入數(shù)據(jù) (6)添加AddToGrid函數(shù),用來向列表視圖控件中插入數(shù)據(jù),代碼如下。 void CUseAdoDlg::AddToGrid() { ADO m_Ado; //聲明ADO類對象 m_Ado.OnInitADOConn(); //連接數(shù)據(jù)庫 CString SQL = "select * from employees order by 編號 desc"; //設(shè)置查詢字符串 m_Ado.m_pRecordset = m_Ado.OpenRecordset(SQL); //打開記錄集 while(!m_Ado.m_pRecordset->adoEOF) //記錄集不為空時(shí)循環(huán) { m_Grid.InsertItem(0,""); //向列表視圖控件中插入行 //向列表視圖控件中插入列 m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("編號")); m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("姓名")); m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("學(xué)歷")); m_Ado.m_pRecordset->MoveNext(); //將記錄集指針移動(dòng)到下一條記錄 } m_Ado.CloseRecordset(); //關(guān)閉記錄集 m_Ado.CloseConn(); //斷開數(shù)據(jù)庫連接 } (7)處理“添加”按鈕的單擊事件,將編輯框中的文本添加到數(shù)據(jù)庫中,代碼如下。 void CUseAdoDlg::OnButadd() { UpdateData(TRUE); if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty()) //數(shù)據(jù)不能為空 { MessageBox("基礎(chǔ)信息不能為空!"); //為空時(shí)彈出提示信息 return; } ADO m_Ado; //聲明ADO類對象 m_Ado.OnInitADOConn(); //連接數(shù)據(jù)庫 CString sql = "select * from employees"; //設(shè)置查詢字符串 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql); //打開記錄集 try { m_Ado.m_pRecordset->AddNew(); //添加新行 //向數(shù)據(jù)庫中插入數(shù)據(jù) m_Ado.m_pRecordset->PutCollect("編號",(_bstr_t)m_ID); m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name); m_Ado.m_pRecordset->PutCollect("學(xué)歷",(_bstr_t)m_Culture); m_Ado.m_pRecordset->Update(); //更新數(shù)據(jù)表記錄 m_Ado.CloseRecordset(); //關(guān)閉記錄集 m_Ado.CloseConn(); //斷開數(shù)據(jù)庫連接 } catch(...) //捕捉可能出現(xiàn)的錯(cuò)誤 { MessageBox("操作失敗"); //彈出錯(cuò)誤提示 return; } MessageBox("添加成功"); //提示操作成功 m_Grid.DeleteAllItems(); //刪除列表控件 AddToGrid(); //向列表中插入數(shù)據(jù) } (8)處理列表視圖控件的單擊事件,在列表項(xiàng)被選中時(shí),將列表項(xiàng)中的數(shù)據(jù)顯示到編輯框中,代碼如下。 void CUseAdoDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { int pos = m_Grid.GetSelectionMark(); //獲得當(dāng)前選中列表項(xiàng)索引 //獲得列表項(xiàng)數(shù)據(jù) m_ID = m_Grid.GetItemText(pos,0); m_Name = m_Grid.GetItemText(pos,1); m_Culture = m_Grid.GetItemText(pos,2); UpdateData(FALSE); //更新控件顯示 *pResult = 0; } (9)處理“修改”的單擊事件,根據(jù)編輯框中的數(shù)據(jù)修改數(shù)據(jù)庫中的數(shù)據(jù),代碼如下。 void CUseAdoDlg::OnButmod() { UpdateData(TRUE); if(m_ID.IsEmpty() || m_Name.IsEmpty() || m_Culture.IsEmpty()) //數(shù)據(jù)不能為空 { MessageBox("基礎(chǔ)信息不能為空!"); //為空時(shí)彈出提示信息 return; } int pos = m_Grid.GetSelectionMark(); //獲得當(dāng)前選中列表項(xiàng)索引 ADO m_Ado; //聲明ADO類對象 m_Ado.OnInitADOConn(); //連接數(shù)據(jù)庫 CString sql = "select * from employees"; //設(shè)置查詢字符串 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql); //打開記錄集 try { m_Ado.m_pRecordset->Move((long)pos,vtMissing); //將記錄集指針移動(dòng)到選中的記錄 //設(shè)置選中記錄的文本 m_Ado.m_pRecordset->PutCollect("編號",(_bstr_t)m_ID); m_Ado.m_pRecordset->PutCollect("姓名",(_bstr_t)m_Name); m_Ado.m_pRecordset->PutCollect("學(xué)歷",(_bstr_t)m_Culture); m_Ado.m_pRecordset->Update(); //更新記錄集 m_Ado.CloseRecordset(); //關(guān)閉記錄集 m_Ado.CloseConn(); //斷開數(shù)據(jù)庫連接 } catch(...) //捕捉可能出現(xiàn)的錯(cuò)誤 { MessageBox("操作失敗"); //彈出錯(cuò)誤提示 return; } MessageBox("添加成功"); //提示操作成功 m_Grid.DeleteAllItems(); //刪除列表控件 AddToGrid(); //向列表中插入數(shù)據(jù) } 提示:在catch語句部分我們使用了“…”表示捕捉所有錯(cuò)誤,也就是說在try語句部分產(chǎn)生任何錯(cuò)誤,都會(huì)進(jìn)入catch語句塊部分進(jìn)行處理。 (10)處理“刪除”按鈕的單擊事件,刪除列表框中被選中的列表項(xiàng),代碼如下。 void CUseAdoDlg::OnButdel() { int pos = m_Grid.GetSelectionMark(); //獲得當(dāng)前選中列表項(xiàng)索引 ADO m_Ado; //聲明ADO類對象 m_Ado.OnInitADOConn(); //連接數(shù)據(jù)庫 CString sql = "select * from employees"; //設(shè)置查詢字符串 m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql); //打開記錄集 try { m_Ado.m_pRecordset->Move(pos,vtMissing); //將記錄集指針移動(dòng)到選中的記錄 m_Ado.m_pRecordset->Delete(adAffectCurrent); //刪除選中的記錄 m_Ado.m_pRecordset->Update(); //更新記錄集 m_Ado.CloseRecordset(); //關(guān)閉記錄集 m_Ado.CloseConn(); //斷開數(shù)據(jù)庫連接 } catch(...) //捕捉可能出現(xiàn)的錯(cuò)誤 { MessageBox("操作失敗"); //彈出錯(cuò)誤提示 return; } MessageBox("刪除成功"); //提示操作成功 OnButclear(); //清空編輯框中數(shù)據(jù) m_Grid.DeleteAllItems(); //刪除列表控件 AddToGrid(); //向列表中插入數(shù)據(jù) } |
|