自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Visual C++中用MFC ODBC操作Access數(shù)據(jù)庫

運維 數(shù)據(jù)庫運維
本文通過一個應(yīng)用實例,討論了利用MFC ODBC技術(shù)實現(xiàn)對Access數(shù)據(jù)源的顯示,在此基礎(chǔ)上,分析了如何設(shè)計以達到利用MFC ODBC來實現(xiàn)修改、增加、刪除Access數(shù)據(jù)源中的記錄的功能。

本實例是某項目中的一部分,目的是實現(xiàn)MFC ODBC數(shù)據(jù)庫與Access數(shù)據(jù)表格之間的相互操作。包括用Visual C++中的MFC ODBC技術(shù)實現(xiàn)對Access數(shù)據(jù)表格的內(nèi)容的顯示、添加、修改和刪除的功能。

1、ODBC數(shù)據(jù)源的創(chuàng)建

筆者使用的操作系統(tǒng)為Windows XP,工具是Visual C++6.0。此例中建立的Access表格取名為“plc”。

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

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

Visual C++中用MFC ODBC操作Access數(shù)據(jù)庫

2、 使用AppWizard創(chuàng)建一個數(shù)據(jù)庫應(yīng)用程序

筆者開始從AppWizard開始創(chuàng)建一個新的MFC AppWizard(exe)項目。命名為Jh,然后遵從以下步驟:

1) 在MFC AppWizard第一步對話框中,選擇“單個文檔”。

2) 在MFC AppWizard第二步對話框中,選擇“查看數(shù)據(jù)庫不使用文件支持”,再單擊“Data Source”。

3)在RecordSet Type組框中,選擇Dynaset。在Data Source組框中,單擊ODBC單選按鈕,然后從下拉列表中選擇plc,如圖2所示,單擊ok,在彈出的新的對話框中選中message,即為本項目所要操作的表。

Visual C++中用MFC ODBC操作Access數(shù)據(jù)庫

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

  1. class CJhSet : public Crecordset//基于CRecordset的CjhSet新類  
  2.  
  3. {  
  4.  
  5. public:  
  6.  
  7. CJhSet(CDatabase* pDatabase = NULL);  
  8.  
  9. DECLARE_DYNAMIC(CJhSet)  
  10.  
  11. // Field/Param Data  
  12.  
  13. //{{AFX_FIELD(CJhSet, CRecordset)  
  14.  
  15. //對應(yīng)表中一些被綁定字段的變量  
  16.  
  17. CString m_baudrate;  
  18.  
  19. CString m_type;  
  20.  
  21. CString m_unit;  
  22.  
  23. CString m_number;  
  24.  
  25. CString m_address;  
  26.  
  27. CString m_istart;  
  28.  
  29. CString m_iend;  
  30.  
  31. CString m_ostart;  
  32.  
  33. CString m_oend;  
  34.  
  35. //}}AFX_FIELD  
  36.  
  37. // Overrides  
  38.  
  39. // ClassWizard generated virtual function overrides  
  40.  
  41. //{{AFX_VIRTUAL(CJhSet)  
  42.  
  43. public:  
  44.  
  45. virtual CString GetDefaultConnect(); // 返回被連接的數(shù)據(jù)源名稱  
  46.  
  47. virtual CString GetDefaultSQL(); // 返回數(shù)據(jù)源中所選表名稱  
  48.  
  49. virtual void DoFieldExchange(CFieldExchange* pFX); // RFX support  
  50.  
  51. //}}AFX_VIRTUAL  
  52.  
  53. // Implementation  
  54.  
  55. #ifdef _DEBUG  
  56.  
  57. virtual void AssertValid() const;  
  58.  
  59. virtual void Dump(CDumpContext& dc) const;  
  60.  
  61. #endif}; 

3、 實現(xiàn)程序的顯示記錄的功能

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

Visual C++中用MFC ODBC操作Access數(shù)據(jù)庫

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

Visual C++中用MFC ODBC操作Access數(shù)據(jù)庫

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

#p#

4、實現(xiàn)程序的添加、修改和刪除記錄的功能

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

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

  1. void CJhView::OnAdd()   
  2.  
  3. {  
  4.  
  5. //建立一個新的添加對話框  
  6.  
  7. CAddDlg dlg;   
  8.  
  9. if(dlg.DoModal()==IDOK)  
  10.  
  11. {  
  12.  
  13. //增加一條新的記錄  
  14.  
  15. m_pSet->AddNew();   
  16.  
  17. //把對話框中的記錄傳遞到記錄集中  
  18.  
  19. m_pSet->m_baudrate=dlg.m_br;  
  20.  
  21. m_pSet->m_type=dlg.m_ty;  
  22.  
  23. m_pSet->m_unit=dlg.m_un;  
  24.  
  25. m_pSet->m_number=dlg.m_nu;  
  26.  
  27. m_pSet->m_address=dlg.m_add;  
  28.  
  29. m_pSet->m_istart=dlg.m_is;  
  30.  
  31. m_pSet->m_iend=dlg.m_ie;  
  32.  
  33. m_pSet->m_ostart=dlg.m_os;  
  34.  
  35. m_pSet->m_oend=dlg.m_oe;  
  36.  
  37. m_pSet->Update(); //把新的記錄存在數(shù)據(jù)源里  
  38.  
  39. m_pSet->MoveLast(); //指定當(dāng)前記錄為最后一條記錄  
  40.  
  41. UpdateData(false); //清空已輸入內(nèi)容  
  42.  
  43. }  
  44.  

添加記錄部分,應(yīng)該先讀出當(dāng)前的記錄,使其顯示在添加/修改對話框中,即:

  1. dlg.m_br=m_pSet->m_baudrate;  
  2.  
  3. dlg.m_ty=m_pSet->m_type;  
  4.  
  5. dlg.m_un=m_pSet->m_unit;  
  6.  
  7. dlg.m_nu=m_pSet->m_number;  
  8.  
  9. dlg.m_add=m_pSet->m_address;  
  10.  
  11. dlg.m_is=m_pSet->m_istart;  
  12.  
  13. dlg.m_ie=m_pSet->m_iend;  
  14.  
  15. dlg.m_os=m_pSet->m_ostart;  
  16.  
  17. dlg.m_oe=m_pSet->m_oend; 

余下的與添加記錄代碼相同,除了不要定位“m_pSet->MoveLast();”而已。

刪除記錄只是需要使用Delete()成員函數(shù)刪除當(dāng)前記錄之后移到下一個記錄即可。程序清單如下:

  1. void CJhView::OnDel()   
  2.  
  3. {  
  4.  
  5. try//試著刪除一條記錄  
  6.  
  7. {  
  8.  
  9. m_pSet->Delete();  
  10.  
  11. }  
  12.  
  13. catch(CDBException*error)  
  14.  
  15. {  
  16.  
  17. AfxMessageBox(error->m_strError);  
  18.  
  19. error->Delete();  
  20.  
  21. m_pSet->MoveFirst();  
  22.  
  23. UpdateData(FALSE);  
  24.  
  25. return;  
  26.  
  27. }  
  28.  
  29. //移到下一個記錄  
  30.  
  31. m_pSet->MoveNext();  
  32.  
  33. //測試是否為文件末尾,是,則使用MoveLast(),而不是使用MoveNext()  
  34.  
  35. if(m_pSet->IsEOF())  
  36.  
  37. m_pSet->MoveLast();  
  38.  
  39. UpdateData(FALSE);  
  40.  

對多個記錄集的操作與對單個記錄集的操作類似,只是增加了CRecordSet類的派生類。

總結(jié):

MFC ODBC讓開發(fā)人員僅僅使用很少的代碼就可以完成復(fù)雜的數(shù)據(jù)庫訪問,并可以對數(shù)據(jù)庫中的內(nèi)容方便的實現(xiàn)添加、修改、刪除等操作,從而極大地減少了軟件開發(fā)的工作量,縮短了開發(fā)周期,提高了效率。而且MFC ODBC簡單易學(xué),能實現(xiàn)大部分ODBC API函數(shù)的功能,所以了解和掌握MFC ODBC技術(shù),將會給大型數(shù)據(jù)庫應(yīng)用軟件帶來清晰、快捷、方便等功能。

【編輯推薦】

  1. 開發(fā)BI系統(tǒng)時的需求分析研究
  2. 基于XML的數(shù)據(jù)庫總體分析(上)
  3. 基于XML的數(shù)據(jù)庫總體分析(下)
  4. 嵌入式數(shù)據(jù)庫Sqlce讀取數(shù)據(jù)過程簡介
  5. 如何不使用數(shù)據(jù)庫緩存,還達到實時更新
責(zé)任編輯:趙鵬 來源: 天極網(wǎng)
相關(guān)推薦

2024-04-18 09:56:16

2010-01-12 14:16:31

Visual C++語

2009-08-19 16:30:55

C#操作Access數(shù)

2009-08-19 16:40:26

C#操作Access數(shù)

2009-08-12 14:27:36

訪問MySQL數(shù)據(jù)庫C# ODBC

2011-07-13 14:53:56

VCODBCAccess

2009-07-03 14:10:59

2010-02-02 17:27:16

C++連接MySqL數(shù)

2009-08-19 16:19:01

C#操作Access數(shù)

2009-07-31 17:01:21

C#存取Access數(shù)

2010-03-04 13:47:13

Python操作Acc

2009-08-03 14:17:18

C#連接AccessC#連接SQL Ser

2009-08-28 13:03:55

C#壓縮Access數(shù)

2009-09-01 09:45:49

Visual C#對數(shù)

2011-05-26 13:42:50

MFC連接MySql數(shù)據(jù)庫

2010-05-17 10:11:11

導(dǎo)入Mysql

2010-01-27 15:58:35

C++數(shù)據(jù)結(jié)構(gòu)

2010-06-11 13:13:38

訪問MySQL數(shù)據(jù)庫

2009-12-17 13:30:49

Ruby操作Acces

2010-05-19 15:12:32

導(dǎo)入MySQL
點贊
收藏

51CTO技術(shù)棧公眾號