亚洲欧美中文字幕专区,日韩免费在线播放,777免费视频,欧美手机看片,色cccwww在线播放,欧美亚洲另类自拍偷在线拍,欧美无限看

當(dāng)前位置:首頁(yè) -> 焦點(diǎn)新聞

用MFC ODBC技術(shù)實(shí)現(xiàn)對(duì)Access數(shù)據(jù)庫(kù)的操作

2005/1/7 12:13:54       

金花 胡榮強(qiáng) 程永誼
  本文簡(jiǎn)要介紹了MFC ODBC的工作原理,并且通過一個(gè)應(yīng)用實(shí)例,討論了利用MFC ODBC技術(shù)實(shí)現(xiàn)對(duì)Access數(shù)據(jù)源的顯示,在此基礎(chǔ)上,分析了如何設(shè)計(jì)以達(dá)到利用MFC ODBC來實(shí)現(xiàn)修改、增加、刪除Access數(shù)據(jù)源中的記錄的功能。

    1.MFC ODBC數(shù)據(jù)庫(kù)簡(jiǎn)述
    開放數(shù)據(jù)互連(Open Database Connectivity,簡(jiǎn)稱ODBC)是一種數(shù)據(jù)庫(kù)的互操作平臺(tái),通過經(jīng)嚴(yán)格定義的各個(gè)級(jí)別的ODBC接口和客戶系統(tǒng)的初始裝置,能夠?yàn)閼?yīng)用程序提供數(shù)據(jù)庫(kù)類型透明性和位置透明性,讓應(yīng)用程序的編寫者避免了與數(shù)據(jù)源相聯(lián)的復(fù)雜性。MFC的數(shù)據(jù)庫(kù)擴(kuò)展部分封裝了使用ODBC數(shù)據(jù)資源的細(xì)節(jié),應(yīng)用程序可以直接使用MFC中的數(shù)據(jù)庫(kù)擴(kuò)展類,來操縱ODBC驅(qū)動(dòng)程序管理器,訪問數(shù)據(jù)庫(kù)。進(jìn)行MFC ODBC數(shù)據(jù)庫(kù)開發(fā)時(shí),所需的基礎(chǔ)工具就是MFC ODBC數(shù)據(jù)庫(kù)類的使用。利用MFC ODBC開發(fā)就是利用MFC ODBC數(shù)據(jù)庫(kù)類來操縱ODBC數(shù)據(jù)源。Visual C++的大多數(shù)ODBC訪問是通過MFC來完成的。Visual C++的MFC類庫(kù)定義了幾個(gè)數(shù)據(jù)庫(kù)類,在利用MFC編程時(shí)常常用到,它們是CDatabase(數(shù)據(jù)庫(kù)類)、CRecordSet(記錄集類)、和CRecordView(可視記錄集類)。對(duì)于MFC ODBC數(shù)據(jù)庫(kù)類來說,CDatabase類對(duì)象表示一個(gè)同數(shù)據(jù)源的連接,通過它可以對(duì)數(shù)據(jù)源進(jìn)行操作。而CRecordSet對(duì)象代表從數(shù)據(jù)源中選擇的一組記錄的集合,也就是通常所說的記錄集對(duì)象。CRecordSet對(duì)象通常用于兩種形式:動(dòng)態(tài)集(dynasets)和快照集(snapshots)。動(dòng)態(tài)集能與其他用戶所做的更改保持同步,快照集則是數(shù)據(jù)的一個(gè)靜態(tài)視圖。每一種形式在記錄被打開時(shí)都提供一組記錄,區(qū)別在于,當(dāng)用戶在一個(gè)動(dòng)態(tài)集里滾動(dòng)到一條記錄時(shí),有其他用戶或是應(yīng)用程序中的其他記錄集所做的更改就會(huì)相應(yīng)地顯示出來。CRecordView類對(duì)象能以控制的形式顯示數(shù)據(jù)庫(kù)記錄。這個(gè)視圖是直接連接到一個(gè)CRecordSet對(duì)象的表視圖。

    2.一個(gè)應(yīng)用實(shí)例
    本實(shí)例是某項(xiàng)目中的一部分,目的是實(shí)現(xiàn)MFC ODBC數(shù)據(jù)庫(kù)與Access數(shù)據(jù)表格之間的相互操作。包括用Visual C++中的MFC ODBC技術(shù)實(shí)現(xiàn)對(duì)Access數(shù)據(jù)表格的內(nèi)容的顯示、添加、修改和刪除的功能。
 
    2.1 ODBC數(shù)據(jù)源的創(chuàng)建
    筆者使用的操作系統(tǒng)為Windows XP,工具是Visual C++6.0。此例中建立的Access表格取名為“plc”。

    在“控制面板”中雙擊“管理工具”圖標(biāo),然后在新出現(xiàn)的窗口中雙擊“數(shù)據(jù)源(ODBC)”,在彈出的對(duì)話框中選中“用戶DSN”中的“dBASE Files”,單擊“添加”按鈕,從彈出的對(duì)話框中選中“Microsoft Access Driver(*.mdb)”。單擊“完成”后,將彈出一個(gè)新的對(duì)話框,在數(shù)據(jù)源名及說明后的編輯框中填入表格名“plc”。

    在命名數(shù)據(jù)源之后,需要把它連接到一個(gè)數(shù)據(jù)庫(kù)。單擊“選擇”,如圖1所示,得到存儲(chǔ)在數(shù)據(jù)目錄中plc.mdb的拷貝文件,選中之,單擊“確定”關(guān)閉此對(duì)話框。然后單擊“確定”,完成數(shù)據(jù)源的創(chuàng)建。

    2.2 使用AppWizard創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序
    筆者開始從AppWizard開始創(chuàng)建一個(gè)新的MFC AppWizard(exe)項(xiàng)目。命名為Jh,然后遵從以下步驟:
    1)在MFC AppWizard第一步對(duì)話框中,選擇“單個(gè)文檔”。
    2)在MFC AppWizard第二步對(duì)話框中,選擇“查看數(shù)據(jù)庫(kù)不使用文件支持”,再單擊“Data Source”。
    3)在RecordSet Type組框中,選擇Dynaset。在Data Source組框中,單擊ODBC單選按鈕,然后從下拉列表中選擇plc,如圖2所示,單擊ok,在彈出的新的對(duì)話框中選中message,即為本項(xiàng)目所要操作的表。

    以后幾步接收缺省值,單擊“完成”即可。至此,已創(chuàng)建一個(gè)應(yīng)用程序,并且在程序中自行生成一個(gè)數(shù)據(jù)源和數(shù)據(jù)源中的一個(gè)表的相關(guān)程序,其程序清單如下:

class CJhSet : public Crecordset//基于CRecordset的CjhSet新類
{
public:
 CJhSet(CDatabase* pDatabase = NULL);
 DECLARE_DYNAMIC(CJhSet)
// Field/Param Data
 //{{AFX_FIELD(CJhSet, CRecordset)
//對(duì)應(yīng)表中一些被綁定字段的變量
 CString m_baudrate;
 CString m_type;
 CString m_unit;
 CString m_number;
 CString m_address;
 CString m_istart;
 CString m_iend;
 CString m_ostart;
 CString m_oend;
 //}}AFX_FIELD
// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CJhSet)
 public:
 virtual CString GetDefaultConnect(); // 返回被連接的數(shù)據(jù)源名稱
 virtual CString GetDefaultSQL();  // 返回?cái)?shù)據(jù)源中所選表名稱
 virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support
 //}}AFX_VIRTUAL
// Implementation
#ifdef _DEBUG
 virtual void AssertValid() const;
 virtual void Dump(CDumpContext& dc) const;
#endif};

    2.3 實(shí)現(xiàn)程序的顯示記錄的功能
    一旦AppWizard完成編寫這些文件,它將啟動(dòng)對(duì)話框編輯器,這樣就可以設(shè)計(jì)自己的表單了。CRecordView應(yīng)用程序圍繞著充當(dāng)應(yīng)用程序主窗口的對(duì)話框而創(chuàng)建。筆者也將使用像表單一樣的對(duì)話框來顯示存儲(chǔ)在plc數(shù)據(jù)庫(kù)記錄域中的值。如圖3所示來放置靜態(tài)文本框與編輯文本框。

    CJHSet類的成員變量如圖4所示。所有的變量均為CString對(duì)象。由AppWizard創(chuàng)建的每個(gè)變量的類型一般與相應(yīng)數(shù)據(jù)庫(kù)域的類型相似。除了創(chuàng)建成員變量,AppWizard還編寫了一組數(shù)據(jù)交換函數(shù)——類似于對(duì)話框的DDX函數(shù)——來在用來顯示信息的控件與定義于CRecordSet類中的數(shù)據(jù)庫(kù)域之間交換信息。

    為了實(shí)現(xiàn)數(shù)據(jù)傳輸,就要把每個(gè)控件與代表數(shù)據(jù)庫(kù)域的CJHSet變量聯(lián)系起來。筆者通過使用CJHView來成員變量m_pSet來指向應(yīng)用程序的CJHSet對(duì)象。選擇每個(gè)資源ID(筆者這里未修改編輯框的默認(rèn)ID),并單擊Add Variable,從下拉表中直接選擇相應(yīng)的成員變量名。全部設(shè)置好之后單擊OK,至此,運(yùn)行程序,就可以實(shí)現(xiàn)簡(jiǎn)單的與數(shù)據(jù)庫(kù)之間的數(shù)據(jù)顯示功能。

    2.4 實(shí)現(xiàn)程序的添加、修改和刪除記錄的功能。
    在實(shí)現(xiàn)上述功能之前,需要按“插入->資源->DIALOG->新建”建立一個(gè)新的對(duì)話框(與圖1所示對(duì)話框類似),以建立添加、修改的對(duì)象。并為此對(duì)話框建立一個(gè)基于CDialog基礎(chǔ)類的新的類CAddDlg。其ID為IDD_DIALOG1。

    然后在JhView.cpp中加“#include "AddDlg.h"”,并為“添加記錄(IDC_ADD)”鍵編寫程序代碼如下。其中已經(jīng)作了詳細(xì)的注解。

void CJhView::OnAdd()
{
//建立一個(gè)新的添加對(duì)話框
  CAddDlg dlg;
 if(dlg.DoModal()==IDOK)
 {
//增加一條新的記錄
  m_pSet->AddNew();  
//把對(duì)話框中的記錄傳遞到記錄集中
     m_pSet->m_baudrate=dlg.m_br;
  m_pSet->m_type=dlg.m_ty;
      m_pSet->m_unit=dlg.m_un;
     m_pSet->m_number=dlg.m_nu;
     m_pSet->m_address=dlg.m_add;
      m_pSet->m_istart=dlg.m_is;
      m_pSet->m_iend=dlg.m_ie;
     m_pSet->m_ostart=dlg.m_os;
      m_pSet->m_oend=dlg.m_oe;

  m_pSet->Update();     //把新的記錄存在數(shù)據(jù)源里
  m_pSet->MoveLast();   //指定當(dāng)前記錄為最后一條記錄
     UpdateData(false);   //清空已輸入內(nèi)容
 }
}
添加記錄部分,應(yīng)該先讀出當(dāng)前的記錄,使其顯示在添加/修改對(duì)話框中,即:
 dlg.m_br=m_pSet->m_baudrate;
 dlg.m_ty=m_pSet->m_type;
 dlg.m_un=m_pSet->m_unit;
 dlg.m_nu=m_pSet->m_number;
 dlg.m_add=m_pSet->m_address;
 dlg.m_is=m_pSet->m_istart;
 dlg.m_ie=m_pSet->m_iend;
 dlg.m_os=m_pSet->m_ostart;
  dlg.m_oe=m_pSet->m_oend;
余下的與添加記錄代碼相同,除了不要定位“m_pSet->MoveLast();”而已。
 刪除記錄只是需要使用Delete()成員函數(shù)刪除當(dāng)前記錄之后移到下一個(gè)記錄即可。程序清單如下:
void CJhView::OnDel()
{
  try//試著刪除一條記錄
 {
  m_pSet->Delete();
 }
 catch(CDBException*error)
 {
  AfxMessageBox(error->m_strError);
  error->Delete();
  m_pSet->MoveFirst();
  UpdateData(FALSE);
  return;
 }
//移到下一個(gè)記錄
 m_pSet->MoveNext();
//測(cè)試是否為文件末尾,是,則使用MoveLast(),而不是使用MoveNext()
 if(m_pSet->IsEOF())
 m_pSet->MoveLast();
 UpdateData(FALSE);
}
對(duì)多個(gè)記錄集的操作與對(duì)單個(gè)記錄集的操作類似,只是增加了CRecordSet類的派生類。

    2.5 結(jié)束語(yǔ)
    MFC ODBC讓開發(fā)人員僅僅使用很少的代碼就可以完成復(fù)雜的數(shù)據(jù)庫(kù)訪問,并可以對(duì)數(shù)據(jù)庫(kù)中的內(nèi)容方便的實(shí)現(xiàn)添加、修改、刪除等操作,從而極大地減少了軟件開發(fā)的工作量,縮短了開發(fā)周期,提高了效率。而且MFC ODBC簡(jiǎn)單易學(xué),能實(shí)現(xiàn)大部分ODBC API函數(shù)的功能,所以了解和掌握MFC ODBC技術(shù),將會(huì)給大型數(shù)據(jù)庫(kù)應(yīng)用軟件帶來清晰、快捷、方便等功能。本文中的實(shí)例已經(jīng)在Visual C++6.0環(huán)境下調(diào)試通過。

參考文獻(xiàn):
【1】 李閩溟等著,Visual C++6.0數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)實(shí)例導(dǎo)航,人民郵電出版社,2002.10
【2】 (美)Stephen D.Gilbert等著,跟我學(xué)Visual C++6.0,機(jī)械工業(yè)出版社,1999.4

  

煤炭網(wǎng)版權(quán)與免責(zé)聲明:

凡本網(wǎng)注明"來源:煤炭網(wǎng)www.jingweixianlan.com "的所有文字、圖片和音視頻稿件,版權(quán)均為"煤炭網(wǎng)www.jingweixianlan.com "獨(dú)家所有,任何媒體、網(wǎng)站或個(gè)人在轉(zhuǎn)載使用時(shí)必須注明"來源:煤炭網(wǎng)www.jingweixianlan.com ",違反者本網(wǎng)將依法追究責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,是本著為讀者傳遞更多信息的目的,并不意味著本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載使用時(shí),必須保留本網(wǎng)注明的稿件來源,禁止擅自篡改稿件來源,并自負(fù)版權(quán)等法律責(zé)任。違反者本網(wǎng)也將依法追究責(zé)任。 如本網(wǎng)轉(zhuǎn)載稿件涉及版權(quán)等問題,請(qǐng)作者在兩周內(nèi)盡快來電或來函聯(lián)系。

  • 用手機(jī)也能做煤炭生意啦!
  • 中煤遠(yuǎn)大:煤炭貿(mào)易也有了“支付寶”
  • 中煤開啟煤炭出口貿(mào)易人民幣結(jié)算新時(shí)代
  • 下半年煤炭市場(chǎng)依然嚴(yán)峻
市場(chǎng)動(dòng)態(tài)

網(wǎng)站技術(shù)運(yùn)營(yíng):北京真石數(shù)字科技股份有限公司、喀什中煤遠(yuǎn)大供應(yīng)鏈管理有限公司、喀什煤網(wǎng)數(shù)字科技有限公司

總部地址:北京市豐臺(tái)區(qū)總部基地航豐路中航榮豐1層

京ICP備18023690號(hào)-1      京公網(wǎng)安備 11010602010109號(hào)


關(guān)注中煤遠(yuǎn)大微信
跟蹤最新行業(yè)資訊