欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用MFCODBC編寫(xiě)數據庫應用程序
1、 使用MFC訪(fǎng)問(wèn)ODBC數據源
EMIAL:zzh1415@21cn.com
3.1    概述
VisualC++的MFC類(lèi)庫定義了幾個(gè)數據庫類(lèi)。在利用ODBC編程時(shí),經(jīng)常要使用到CDatabase(數據庫類(lèi)),CRecordSet(記錄集類(lèi))和CRecordView(可視記錄集類(lèi))。 其中:
CDatabase類(lèi)對象提供了對數據源的連接,通過(guò)它你可以對數據源進(jìn)行操作。
CRecordView類(lèi)對象能以控制的形式 顯示數據庫記錄。這個(gè)視圖是直接連到一個(gè)CRecordSet對象的表視圖。
CRecordSet類(lèi)對象提供了從數據源 中提取出的記錄集。CRecordSet對象通常用于兩種形式:動(dòng)態(tài)行集(dynasets)和快照集(snapshots)。動(dòng)態(tài)行集能保持與其他用戶(hù)所做的更改保持同步??煺占瘎t是數據的一個(gè)靜態(tài)視圖。每一種形式在記錄集被打開(kāi)時(shí)都提供一組記錄,所不同的是,當你在一個(gè)動(dòng)態(tài)行集里滾動(dòng)到一條記錄時(shí),由其他用戶(hù)或是你應用程序中的其他記錄集對該記錄所做的更改會(huì )相應地顯示出來(lái)。

VisualC++提供了幾種記錄集,可以用來(lái)定制應用程序的工作方式。查看這些不同選項的最快方式要兼顧速度和特征。你會(huì )發(fā)現,在很多情況下,如果想添加特征,就必須付出程序執行速度降低的代價(jià)。下面告訴你一些可以自由支配的記錄集選項。更重要的是,要告訴你從這個(gè)選項可以獲得更快的速度還是更多的特征。
1、Snapshot(快照) 這個(gè)選項要VisualC++在一次快照中下載整個(gè)查詢(xún)。換言之,及時(shí)快速地給數據庫內容拍照,并把它作為未來(lái)工作的基礎。這種方法有三個(gè)缺點(diǎn)。第一,你看不到別人在網(wǎng)絡(luò )上做的更新,這可能意味著(zhù)你的決定是建立在老信息的基礎上。第二,一次就下載所有這些記錄,這意味著(zhù)在下載期間給網(wǎng)絡(luò )增加了沉重的負擔。第三,記錄下載時(shí)用戶(hù)會(huì )結束等待,這意味著(zhù)網(wǎng)絡(luò )的呼叫性能變得更低。然而這種方法也有兩個(gè)優(yōu)點(diǎn)。第一,記錄一旦被下載,該工作站所需的網(wǎng)絡(luò )活動(dòng)幾乎就沒(méi)有了棗這為其它請求釋放了帶寬??傊?,你會(huì )看到網(wǎng)絡(luò )的吞吐量增大了。第二,因為所有被申請的記錄都在用戶(hù)的機器上,所以用戶(hù)實(shí)際上會(huì )得到應用程序更佳的總體性能。你可能想把快照的方法限制在較小的數據庫上使用,原因在于快照適用于用戶(hù)請求信息而不適用于數據編輯會(huì )話(huà)。
2、Dynaset(動(dòng)態(tài)集)使用這個(gè)選項時(shí),VisualC++創(chuàng )建指向所請求的每個(gè)記錄的實(shí)際指針。另外,只有填充屏幕時(shí)實(shí)際需要的記錄是從服務(wù)器上下載來(lái)的。這種方法的好處很明顯。幾乎馬上就能在屏幕上看到記錄。而且還會(huì )看到其它用戶(hù)對數據庫所做的更改。最后,其它用戶(hù)也會(huì )看到你做的更改,因為動(dòng)態(tài)集在你更改記錄時(shí)被上載到服務(wù)器上。很明顯,這種方法要求對服務(wù)器的實(shí)時(shí)訪(fǎng)問(wèn),它減小了網(wǎng)絡(luò )總吞吐量并降低了應用程序的性能。這個(gè)選項適合于創(chuàng )建用戶(hù)要花費很多時(shí)間來(lái)編輯數據的應用程序。同時(shí),它也是大型數據庫的最佳選擇,原因在于只需下載用戶(hù)實(shí)際需要的信息。 
3.2    應用ODBC編程
可以應用AppWizard來(lái)建立一個(gè)ODBC的應用程序框架,也可以直接使用ODBC來(lái)進(jìn)行數據庫編程,這時(shí),應包括頭文件afxdb.h。
應用ODBC編程兩個(gè)最重要的類(lèi)是CDatabase和CRecordSet,但在應用程序中,不應直接使用CRecordSet類(lèi),而必須從CRecordSet類(lèi)產(chǎn)生一個(gè)導出類(lèi),并添加相應于數據庫表中字段的成員變量。隨后,重載CRecordset類(lèi)的成員函數DoFieldExchange,該函數通過(guò)使用RFX函數完成數據庫字段與記錄集域數據成員變量的數據交換,RFX函數同對話(huà)框數據交換(DDX)機制相類(lèi)似,負責完成數據庫與成員變量間的數據交換。

下面舉例說(shuō)明在VisualC++環(huán)境中ODBC 的編程技巧:
3.21    數據庫連接
在CRecordSet類(lèi)中定義了一個(gè)成員變 量m_pDatabase:
CDatabase *m_pDatabase;
它是指向對象數據庫類(lèi)的指針。如果在CRecordSet類(lèi)對象調用Open()函數之前,將一個(gè)已經(jīng)打開(kāi)的CDatabase類(lèi)對象指針傳給m_pDatabase,就能共享相同 的CDatabase類(lèi)對象。如:

    CDatabase m_db;
    CRecordSet m_set1,m_set2;
    m_db.Open(_T("Super_ES"));    // 建 立ODBC 連 接
    m_set1.m_pDatabase=&m_db;    //m_set1 復 用m_db 對 象
    m_set2.m_pDatabse=&m_db;    // m_set2 復 用m_db 對 象
或如下:

Cdatabase db;
db.Open(“Database”);  //建立ODBC連接
CrecordSet m_set(&db);  //構造記錄集對象,使數據庫指向db
3.22    查詢(xún)記錄
查詢(xún)記錄使用CRecordSet::Open()和CRecordSet::Requery()成員函數。在使用CRecordSet類(lèi)對象之前,必須使用CRecordSet::Open()函數來(lái)獲得有效的記錄集。一旦已經(jīng)使用過(guò)CRecordSet::Open()函數,再次查詢(xún)時(shí)就可以應用CRecordSet::Requery()函數。在調用CRecordSet::Open()函數時(shí),如果已經(jīng)將一個(gè)已經(jīng)打開(kāi)的CDatabase對象指針傳給CRecordSet類(lèi)對象的m_pDatabase成員變量,則使用該數據庫對象建立ODBC連接;否則如果m_pDatabase為空指 針,就新建一個(gè)CDatabase類(lèi)對象并使其與缺省的數據源相連,然后進(jìn)行CRecordSet類(lèi)對象的初始化。缺省數據源 由GetDefaultConnect()函數獲得。你也可以提供你所需要的SQL語(yǔ)句,并以它來(lái)調用CRecordSet::Open()函數,例如:
m_Set.Open(AFX_DATABASE_USE_DEFAULT,strSQL);
如果沒(méi)有指定參數,程序則使 用缺省的SQL語(yǔ)句,即對在GetDefaultSQL()函數中指定的SQL語(yǔ) 句進(jìn)行操作:

CString CTestRecordSet::GetDefaultSQL()
{return _T("[BasicData],[MainSize]");}
對于GetDefaultSQL()函數返回的表名, 對應的缺省操作是SELECT語(yǔ)句,即:
SELECT * FROM BasicData,MainSize

查詢(xún)過(guò)程中也可以利用CRecordSet的 成員變量m_strFilter和m_strSort來(lái)執行條件查詢(xún)和結果排序。m_strFilter為過(guò)濾字符串,存放著(zhù)SQL語(yǔ)句中WHERE后的條件串;m_strSort 為排序字符串,存放著(zhù)SQL語(yǔ)句中ORDERBY后的字符串。 如:
    m_Set.m_strFilter="TYPE=電動(dòng)機";
    m_Set.m_strSort="VOLTAGE";
    m_Set.Requery();
    對應的SQL語(yǔ)句為:
    SELECT * FROM BasicData,MainSize
    WHERE TYPE=電動(dòng)機
    ORDER BY VOLTAGE
除了直接賦值給m_strFilter以外,還 可以使用參數化。利用參數化可以更直觀(guān),更方便地 完成條件查詢(xún)任務(wù)。使用參數化的步驟如下:

(1).聲明參變量:

    Cstring p1;
    Float p2;
(2).在構造函數中初始化參變量
    p1=_T("");
    p2=0.0f;
    m_nParams=2;
(3).將參變量與對應列綁定
    pFX->SetFieldType(CFieldExchange::param)
    RFX_Text(pFX,_T("P1"),p1);
    RFX_Single(pFX,_T("P2"),p2);
完成以上步驟之后就可以利用 參變量進(jìn)行條件查詢(xún)了:
    m_pSet->m_strFilter="TYPE=?ANDVOLTAGE=?";
    m_pSet->p1="電動(dòng)機";
    m_pSet->p2=60.0;
    m_pSet->Requery();
參變量的值按綁定的順序替換 查詢(xún)字串中的“?”適配符。
如果查詢(xún)的結果是多條記錄的 話(huà),可以用CRecordSet類(lèi)的函數Move(),MoveNext(),MovePrev(),MoveFirst() 和MoveLast()來(lái)移動(dòng)光標。
3.23    增加記錄
增加記錄使用AddNew()函數,要求數據庫必須是以允許增加的方式打開(kāi):

    m_pSet->AddNew();    //在表的末尾增加新記錄
    m_pSet->SetFieldNull(&(m_pSet->m_type),FALSE);    
    m_pSet->m_type="電動(dòng)機";
        ...            //輸入新的字段值
    m_pSet->    Update();    //將新記錄存入數據庫
    m_pSet->Requery();    //重建記錄集
3.24    刪除記錄
直接使用Delete()函數,并且在調用Delete() 函數之后不需調用Update()函數:

    m_pSet->Delete();
    if(!m_pSet->IsEOF())
        m_pSet->MoveNext();
    else
        m_pSet->MoveLast();

3.25    修改記錄
修改記錄使用Edit()函數:

    m_pSet->Edit();        //修改當前記錄
    m_pSet->m_type="發(fā)電機";    //修改當前記錄字段值
        ...
    m_pSet->Update();        //將修改結果存入數據庫
    m_pSet->Requery();
3.26    統計記錄
統計記錄用來(lái)統計記錄集的總數??梢韵嚷暶饕粋€(gè)CRecordset對象m_pSet。再綁定一個(gè)變量m_lCount,用來(lái)統計記錄總數。執行如下語(yǔ)句:
m_pSet->Open(“Select Count(*) from 表名 where 限定條件”);
RecordCount=m_pSet->m_lCount;
m_pSet->Close();
RecordCount即為要統計的記錄數。
或如下:
CRecordset m_Set(&db);  //db 為CDatabase對象
CString strValue;
m_Set.Open(Select count(*) from 表名 where 限定條件”);
m_pSet.GetFieldValue((int)0,strValue);
long count=atol(strValue);
m_set.Close();
count為記錄總數。
3.27    執行SQL語(yǔ)句
雖然通過(guò)CRecordSet類(lèi),我們可以完成 大多數的查詢(xún)操作,而且在CRecordSet::Open()函數中也可以提供SQL語(yǔ)句,但是有的時(shí)候我們還想進(jìn)行一些其他操 作,例如建立新表,刪除表,建立新的字段等等,這時(shí)就需要使用到CDatabase類(lèi)的直接執行SQL語(yǔ)句的機制。通過(guò)調用CDatabase::ExecuteSQL()函數來(lái)完成SQL語(yǔ)句的直接執行:
如下代碼所示
    BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL)
    {
        TRY
        {
            m_pdb->ExecuteSQL(strSQL);    //直接執行SQL語(yǔ)句
        }
        CATCH (CDBException,e)
        {
            CString strMsg;
            strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
            strMsg+=strSQL;
            return FALSE;
        }
        END_CATCH
        return TRUE;
    }
應當指出的是,由于不同DBMS提 供的數據操作語(yǔ)句不盡相同,直接執行SQL語(yǔ)句可能會(huì )破壞軟件的DBMS無(wú)關(guān)性,因此在應用中應當慎用此類(lèi)操作。
3.28    注意
從CRecordSet導出的類(lèi)中如果包含DataTime類(lèi)型的數據,在VC中是用CTime類(lèi)型來(lái)替代的,這時(shí),構造函數沒(méi)有賦于缺省值。這時(shí),我們應當手工賦值。如下所示:
CTime  m_time;
m_time=NULL;
3.3    總結
VisualC++中的ODBC類(lèi)庫可以幫助程序員完成絕大多數的數據庫操作。利用ODBC技術(shù)使得程序員從具體的DBMS中解脫出來(lái),從而極大的減少了軟件開(kāi)發(fā)的工作量,縮短開(kāi)發(fā)周期,提高了效率和軟件的可靠性。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MFC ODBC 用法|非常詳細|正在用(轉載)
MFC ODBC 編程
比較VC++數據庫開(kāi)發(fā)的五種技術(shù)
MFC的數據庫操作
Visual C 數據庫編程快速入門(mén)
39在 ODBC 中應用DDX 和 RFX
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久