天天看點

ODBC連接配接資料庫執行個體

2012-12-13 22:27 (分類:預設分類)

1.首先建立資料源,正常情況下載下傳控制台-管理工具-資料源,打開後有使用者DSN系統DSN

兩者差別在于系統級的DSN,就是對該系統的所有登入使用者可用,使用者DSN是隻對建立它的使用者可用

2.配置自己的DSN,比如連接配接ACCESS資料庫

單擊“添加”按鈕,顯示“建立新資料源”對話框。選擇“Microsoft Access Driver(*.mdb)”,

單擊<完成>,進入下一步。

随起個資料源名稱(如:MyData),再單擊“選擇(S)...”,選擇Access資料庫,确定,就OK了。

我這裡連接配接的是ACCESS 資料源名稱是 “登陸框“  裡面隻有一個表 登入表 三個字段 ID 使用者名 密碼

特别說明,win7 64位的同學打開資料源,單擊“添加”按鈕後,是不是沒有驅動,去這裡

C:\Windows\SysWOW64\odbcad32.exe    32位資料源

這樣資料源就添加成功了

建立程式  這次通過vc6.0 建立MFC exe 程式

主要運用MFC封裝的 odbc類 

選擇單文檔,要求包含資料庫(檢視資料庫使用檔案支援),在下方點選資料源,選擇剛才建立的資料源,

和相應的表,基本就這樣

做的是個登陸框首頁面驗證登陸,注冊按鈕蹦出個對話框為注冊頁面;

下邊是重點,弄了好幾天才明白,在單文檔首頁面如下

ODBC連接配接資料庫執行個體

兩個編輯框添加成員變量為m_name,m_pwd;為登入按鈕添加消息相應函數 内容如下

UpdateData(TRUE);//重新整理控件的值到對應的變量 

if(m_name==m_pSet->m_column1&&m_pwd==m_pSet->m_column2)

//與資料庫進行比對m_column1為資料庫 使用者名字段 m_column2為資料庫 密碼字段 MessageBox("OK");//成功彈出ok

else

MessageBox("ERROR");//失敗彈出error 這裡說一下m_pSet 這個是CRecordset類中的指針 第二個需求為點選注冊按鈕彈出注冊頁面,這裡我建立一個對話框 ,添加一個dialog,如下

ODBC連接配接資料庫執行個體

為兩個編輯框設定成員變量為 m_name_zhuce 和 m_pwd_zhuce,

這個對話框要繼承哪個類呢? Crecordview?Crecordset?還是 CDialog?

1.第一種情況:為了能使用m_pSet 對話框繼承  Crecordview類或者Crecordset類,問題出來了在主視窗的注冊按鈕裡的代碼 正常為建立一個對話框叫SecondDialog,它的類名叫SecondDialog。

輕按兩下主對話框上的注冊按鈕進入代碼編輯區。

NO.1把SecondDialog.cpp的#include "SecondDialog.h" 加入到主對話框"類"中,

要在#include "stdafx.h"後 

NO.2、在按鈕事件裡面寫下面兩句代碼CSecondDialog dlg; dlg.DoModal();

這樣就可以在點選 注冊按鈕後 彈出注冊對話框了  

但是在Crecordview類或者Crecordset類 裡沒有DoModal()這個函數 

是以按照上面的代碼,無法編譯通過 

怎麼辦呢?是不是通過 其它方法呢?showWindows()這個函數是不是能把它顯示出來呢? 

2.第二種情況:仍然繼承CDialog類,這樣可以使用CSecondDialog dlg; 

dlg.DoModal();了

怎樣讓這個這個對話框連接配接資料庫呢?這裡就用上 MFC 封裝的odbc類了,

注意下邊的代碼了,每一個我都加注釋了,很累滴 UpdateData(TRUE); //更新控件資訊

CDatabase base1; // 建立CDatabase類 對象

//通過對象去連接配接資料庫 

// 資料源名稱,獨占打開?隻讀打開?資料源資訊,加載ODBC光标動态連接配接庫 ? base1.Open(NULL,FALSE,FALSE,"ODBC;DSN=登陸框;UID=NULL;PWD=NULL",FALSE);

CRecordset object(&base1); //構造記錄集對象object(關聯記錄集)

//這裡要使用具體的類,我建的工程裡 是CStuSet object(&base1)CStuSet繼承CRecordset

//記錄集對象object 以動态方式打開student表所有字段,擷取資料庫資料

object.Open(CRecordset::dynaset,“Select * from students”);

//進行查詢操作 ,查詢剛才關聯的表

object.m_strFilter="name='admin'"  //m_strFilter相當于where 查詢姓名為admin的資料

object.m_strSort="name" //m_strSort相當于order by 依據name 排序

object.Requery();  //重建立立記錄集

// void MoveNext( )前進一個記錄; void MovePrev( )後退一個記錄; 

//void MoveFirst( )滾動到記錄集中的第一個記錄;  

//void MoveLast( )滾動到記錄集中的最後一個記錄//進行添加操作

object.AddNew();  //在表尾進行添加操作

object.m_column1="admin"; //為字段1指派

object.m_column2="123"; //為字段2指派

object.Update(); //新紀錄存入資料庫

object.Requrey(); //重建立立記錄集 //進行删除操作

//調用Delete()成員函數能夠實作記錄删除,在調用Delete()函數後不需調用Update()函數,

 object.Delete();  

if (!object.IsEOF())   //判斷光标是否在記錄集最後

object.MoveNext();  //不是則向下移一位

else  

object.MoveLast(); //是的化滾動到最後一個記錄//寫到這裡很累了,要下課了,明天繼續吧

很不幸,寫完未儲存,這是第二遍了 煩, 3.第三種情況 

依舊使用CDialog類 來做注冊對話框,繼續使用資料源,不用代碼連接配接資料庫 CLoginView *p=new CLoginView; //這個CLoginView繼承CRecordView類,建立工程時建好

// 執行個體化類的對象 為指針 p

p->m_pSet = new CLoginSet;

p->m_pSet-> Open();

p->m_pSet->AddNew();

//對記錄集中的字段指派

p->m_pSet->m_column1 = "wocao";

p->m_pSet->m_column2 = "123";

//更新記錄集,将新記錄存入資料源

p->m_pSet->Update();

//重新整理記錄集,并使記錄集指針回到第一條記錄

p->m_pSet->Requery();在編譯時會報錯,基類中class CLoginSet : public CRecordset 就是這個類有一部分是私有的

沒法使用 ,我直接改成公有的,ok了  4.第四種情況

更絕對些,直接建立對話框mfc,不包含資料源,全部用代碼實作

對話框 确定按鈕 消息響應函數 如下 CDatabase base1; // 建立CDatabase類 對象

//通過對象去連接配接資料庫 

// 資料源名稱,獨占打開?隻讀打開?資料源資訊,加載ODBC光标動态連接配接庫 ? 

base1.Open(NULL,FALSE,FALSE,"ODBC;DSN=登陸框",FALSE);

CRecordset object(&base1); //構造記錄集對象object(關聯記錄集)

//我這裡使用的是CStuSet object(&base1); 是繼承CRecordset類

//記錄集對象object 以動态方式打開student表所有字段,擷取資料庫資料

object.Open(CRecordset::dynaset,"Select * from 登入表");

CString sql=" INSERT INTO 登入表(使用者名,密碼) VALUES('laji2','123')";

base1.ExecuteSQL( sql);這樣簡單多了吧,ExecuteSQL這個函數就是用來執行SQL代碼的,SQL語句不會就自己查吧,要注意的是 access 和 其它資料庫 文法可能有些小不同,自己注意吧,

一周了,odbc就到這裡吧     

繼續閱讀