freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vc操作數(shù)據(jù)庫(kù)簡(jiǎn)介-文庫(kù)吧

2025-08-01 16:48 本頁(yè)面


【正文】 改數(shù)據(jù)源。用戶所面對(duì)的始終是一個(gè)完整的數(shù)據(jù)源文件。這時(shí)最好要文檔。 但是對(duì)于一些應(yīng)用程序來(lái)說(shuō)文檔是沒(méi)有必要的,應(yīng)用程序操作的是數(shù)據(jù)源中的一條記錄,用戶只是與一條記錄打交道,這樣的話,文檔是多余的。應(yīng)該將它從應(yīng)用程序中刪除掉。 有的時(shí)候需要多個(gè)視圖顯示一個(gè)數(shù)據(jù)源,這時(shí)就需要一個(gè)文檔類(lèi)來(lái)簡(jiǎn)單的記錄數(shù)據(jù)源的記錄,然后管理多個(gè)視圖。 有的時(shí)候應(yīng)用程序只是需要在后臺(tái)運(yùn)行,不需要界面顯示,完全可以將數(shù)據(jù)庫(kù)的讀取放在應(yīng)用程序的主應(yīng)用框架中去。當(dāng)然這樣的話,在編程調(diào)試的時(shí)候?qū)⑤^為麻煩一些。 在應(yīng)用程序中顯示和 操縱數(shù)據(jù) 許多的數(shù)據(jù)訪問(wèn)程序都是使用表( FORM)來(lái)訪問(wèn)并顯示所選取得數(shù)據(jù),在 MFC中有一個(gè)從 CFormView派生類(lèi) CrecordView,可以用來(lái)顯示和操縱數(shù)據(jù), CrecordView使用 DDX(動(dòng)態(tài)數(shù)據(jù)交換)機(jī)制來(lái)完成對(duì)當(dāng)前的控件值和數(shù)據(jù)庫(kù)中的表的交換。相應(yīng)的, recordset對(duì)象數(shù)據(jù)成員是使用 RFX(記錄域交換)和數(shù)據(jù)源中的表中的數(shù)據(jù)進(jìn)行交換。 利用 AppWizard 或者 ClassWizard,我們可以方便的將 CrecordView 類(lèi)和相應(yīng)的數(shù)據(jù)庫(kù)中的表聯(lián)系上,關(guān)于 CrecordView類(lèi)的更多信 息請(qǐng)參看相應(yīng)的章節(jié)。 SQL和 ODBC API 作者在這里并不是下結(jié)論說(shuō) SQL語(yǔ)句好還是 ODBC API好,因?yàn)檫@完全取決編程人員的喜好以及任務(wù)的需要,但是 SQL語(yǔ)句還是應(yīng)該知道的。 MFC封裝了大部分的 Windows API調(diào)用,但是同時(shí)也允許你直接調(diào)用 ODBC API 函數(shù)。 MFC ODBC類(lèi)提供了同樣的靈活性,允許直接調(diào)用 ODBC API函數(shù),可以在程序中的任何地方調(diào)用這些函數(shù)。 同樣的, MFC的數(shù)據(jù)庫(kù)類(lèi)封裝了 SQL語(yǔ)句,使用戶可以不必直接執(zhí)行 SQL;但是,如果你希望直接執(zhí)行 SQL 語(yǔ)句的話 ,同樣可以調(diào)用相應(yīng)的函數(shù)。一般的情況下,是可以定制RecordSet 的對(duì)象的 SQL 的語(yǔ)句的,已經(jīng)得到的特定記錄集,或者,也可以使用 Cdatabase的 ExcuteSQL函數(shù)直接執(zhí)行 SQL語(yǔ)句。 在 VC 中,提供了對(duì)前幾個(gè)類(lèi)的充分支持,我們可以使用 AppWizard自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)引用程序,在下節(jié)中將介紹這些東西。 MFC中的 ODBC 下面將介紹 MFC中的四個(gè)類(lèi)和一個(gè) RFX機(jī)制,并且將介紹一個(gè)最簡(jiǎn)單的數(shù)據(jù)庫(kù)顯示程序。 CRecordView類(lèi) 這個(gè)類(lèi)需要的頭文件是 。一個(gè) CrecordView對(duì)象就是用一個(gè)視圖中的控件來(lái)顯示數(shù)據(jù)庫(kù)中的記錄。這個(gè)視圖對(duì)象直接連接到一個(gè)數(shù)據(jù)源中的記錄集。這個(gè)視圖是由對(duì)話框模板生成的。 CRecordView類(lèi)使用了動(dòng)態(tài)數(shù)據(jù)交換( DDX)和記錄集交換( RFX)在視圖上的控件和數(shù)據(jù)源中的記錄集中進(jìn)行數(shù)據(jù)交換。同樣的 CRecordView 類(lèi)支持缺省的游標(biāo) (游指向當(dāng)前記錄的指針 )功能,能夠跳到記錄集頭,跳到記錄集末,或是記錄尾,或是向前移動(dòng)一個(gè),向后移動(dòng)一個(gè);同樣的,還留有一個(gè)接口用來(lái)更新數(shù)據(jù)源的數(shù)據(jù)。 最方便的生成記錄集的視圖的方法就是使用 AppWizard。 AppWizard 不但生成相應(yīng)于記錄集的視圖類(lèi) CRecordView,還生成相應(yīng)的記錄集類(lèi) CRecordset,將它和相應(yīng)的數(shù)據(jù)源關(guān)聯(lián),并將它放入到應(yīng)用程序的框架中去。如果不用 AppWizard 生成一個(gè)視圖類(lèi),可以在以后用 ClassWizard來(lái)生成一個(gè)視圖類(lèi)。如果只是需要一個(gè)簡(jiǎn)單的顯示,那用 AppWizard來(lái)生成一個(gè)數(shù)據(jù)庫(kù)視圖是最好的。 ClassWizard 能在開(kāi)發(fā)的過(guò)程中加入數(shù)據(jù)庫(kù)視圖類(lèi)的支持。使用 ClassWizard 生成一個(gè)數(shù)據(jù)庫(kù)的視圖類(lèi)( CRecordView)和一個(gè)數(shù)據(jù)庫(kù)的記錄集 的類(lèi)( CRecordset),將會(huì)在處理數(shù)據(jù)源的時(shí)候有更多的靈活性,可以對(duì)于同一個(gè)記錄集,用多個(gè)視圖來(lái)顯示。 為了使終端的用戶能夠在視圖中從一個(gè)記錄跳到另外的記錄, AppWizard使用菜單還有工具欄來(lái)控制游標(biāo)的位置。讓用戶方便的在記錄集中移動(dòng)游標(biāo)。如果你是用 ClassWiZard生成的一個(gè) CRecordView 類(lèi)和一個(gè) CRecordset 類(lèi),那你就需要自己手動(dòng)來(lái)加入菜單資源和工具欄,并且將它們和游標(biāo)關(guān)聯(lián)起來(lái)。 下面我來(lái)介紹 CRecordView的成員函數(shù): 1. CRecordView::CRecordView CRecordView( LPCSTR lpszTemplateName ); CRecordView( UINT nIDTemplate ); 這些是 CRecordView 的構(gòu)造函數(shù),是個(gè)重載函數(shù),有兩個(gè)版本,一個(gè)版本的參數(shù)是LPCSTR lpszTemplateName,是指向一個(gè)對(duì)話框模板資源的名字的字符串;另外的一個(gè)版本的參數(shù)是 nIDTemplate,是一個(gè)對(duì)話框模板資源的 ID號(hào)。 從 CRecordView 類(lèi)派生一個(gè)子類(lèi)時(shí),要調(diào)用構(gòu)造函數(shù)來(lái)初始化子類(lèi),必須給出于子類(lèi)相關(guān)聯(lián)的對(duì)話框模板資源的名字或 是 ID。作者推薦使用 ID號(hào)來(lái)傳遞對(duì)話框模板信息。 派生類(lèi)中要自己動(dòng)手實(shí)現(xiàn)子類(lèi)的初始化工作。在子類(lèi)構(gòu)造函數(shù)里面,要有調(diào)用到父類(lèi)中的構(gòu)造函數(shù) CRecordView::CRecordView的語(yǔ)句,就如下面的例子一樣。 CRecordView::OnInitialUpdate函數(shù)會(huì)調(diào)用函數(shù) UpdateData, UpdateData 將會(huì)調(diào)用函數(shù) DoDataExchange。然后和 CRecordView 子類(lèi)關(guān)聯(lián)的對(duì)話框模板上的控件的變量將會(huì)和相應(yīng)的記錄集的數(shù)據(jù)關(guān)聯(lián)起來(lái)。在沒(méi)有調(diào)用函數(shù) OnInitialUpdate member之前所有的變量記錄的數(shù)據(jù)是不可用的。 例子: CMyRecordView::CMyRecordView() : CRecordView( IDD_MYFORM ) { //{{AFX_DATA_INIT( CMyRecordView ) // ClassWizard在這里調(diào)用父類(lèi)的構(gòu)造函數(shù) //}}AFX_DATA_INIT //自己子類(lèi)的初始化工作 } 2. CRecordView::IsOnFirstRecord BOOL IsOnFirstRecord( ); 這個(gè)成員函數(shù)返回一個(gè)布爾值,當(dāng)現(xiàn)在指向記錄是記錄集中的第一個(gè)記錄,那就返回一個(gè)非零的值,否則就返回一個(gè) 0值。 調(diào)用這個(gè)函數(shù)來(lái)判斷當(dāng)前指向的記錄是否是和 Crecordset類(lèi)相關(guān)聯(lián)的記錄集中的頭條記錄。這個(gè)函數(shù)非常有用,可以在這個(gè)函數(shù)里面寫(xiě)上自己的缺省的更新語(yǔ)句。 當(dāng)用戶操縱游標(biāo)移動(dòng)到記錄集的第一個(gè)記錄的時(shí)候,主框架窗口將把能移動(dòng)到第一條記錄和移動(dòng)到前一條的記錄的用戶接口關(guān)閉掉, 3. CRecordView::IsOnLastRecord BOOL IsOnLastRecord( ); 這個(gè)函數(shù)返回值是 個(gè)布爾值,如果當(dāng)前的記錄是記錄集中最后的記錄,就返回非零值,否則返回零值。 調(diào)用這個(gè)函數(shù)就是為了判斷當(dāng)前的記錄是否是記錄集中最后的記錄。這個(gè)函數(shù)也是很有用的??梢栽诤瘮?shù)體中更新語(yǔ)句,自己處理在記錄集中移動(dòng)游標(biāo)的功能。 需要小心的是:當(dāng)用戶將游標(biāo)移出了記錄集的最后一條記錄,而 CrecordView 又沒(méi)有檢測(cè)到記錄集的末端,那就有可能返回錯(cuò)誤的值。所以要注意在移動(dòng)到接近記錄集結(jié)束地方的時(shí)候,要小心的檢測(cè)。如果已經(jīng)移出記錄集的邊界,馬上又移回到最后一條記錄,CRecordView 類(lèi)會(huì)自動(dòng)將向后移動(dòng)一個(gè)記錄的功能 和移到最后一個(gè)記錄的功能關(guān)閉掉。IsOnLastRecord函數(shù)在調(diào)用了函數(shù) OnRecordLast后,或是 CRecordset::MoveLast函數(shù)被調(diào)用后,返回值將是不可靠的值。 4. CRecordView::OnGetRecordset virtual CRecordset* OnGetRecordset( ) = 0; 這是一個(gè)虛函數(shù),它的返回值是一個(gè) CRecordset 類(lèi)型的指針,如果一個(gè) CRecordset的派生類(lèi)被成功構(gòu)造,就返回一個(gè)指向其派生類(lèi)的指針。否則就是一個(gè)空的指針。 返回的指針是一個(gè) CRecordset類(lèi)的派生類(lèi)的指針,它將和當(dāng)前這個(gè) CRecordView類(lèi)關(guān)聯(lián)起來(lái)。必須重載這個(gè)函數(shù),以便能夠構(gòu)造 CRecordset 的派生類(lèi)或是得到一個(gè)其派生類(lèi)的一個(gè)指針。如果是用 ClassWizard 來(lái)聲明 CRecordView 類(lèi), ClassWizard 會(huì)自動(dòng)重載出一個(gè)缺省函數(shù),此函數(shù)的缺省動(dòng)作是返回一個(gè) CRecordset 指針,這個(gè)指針原來(lái)是放在CRecordView 類(lèi)中的 , 它構(gòu)造了一個(gè) CRecordset對(duì)象,并用它的 Open 函數(shù)來(lái)打開(kāi)一個(gè)記錄集或是執(zhí)行一個(gè)查詢,然后返回這個(gè)對(duì)象的指針。 5. CRecordView::OnMove 這是一個(gè)虛函數(shù),它的使用一般是下面的樣子: OnMove( UINT nIDMoveCommand )。 throw( CDBException )。 這樣的使用的目的是為了在函數(shù)調(diào)用失敗后給出一個(gè)出錯(cuò)信息。 它的返回值是一個(gè)布爾值,如果移動(dòng)成功,返回非零值,否則就返回零值。 函數(shù)參數(shù) nIDMoveCommand是下面的幾個(gè)特定的值: ID_RECORD_FIRST 移動(dòng)到記錄集的第一個(gè)記錄 ID_RECORD_LAST 移動(dòng)到記錄集的最后一個(gè)記錄 ID_RECORD_NEXT 在記錄集中向后移動(dòng)一個(gè)記錄 ID_RECORD_PREV 在記錄集中向前移動(dòng)一個(gè)記錄 調(diào)用這個(gè)成員函數(shù)是為了在記錄集中移動(dòng)游標(biāo)的位置,并且將記錄顯示在視圖中的控件里面。在這個(gè)函數(shù)里面有一個(gè)缺省的動(dòng)作就是調(diào)用 CRecordset 類(lèi)的 Move 函數(shù)來(lái)配合CRecordView的移動(dòng)。 對(duì)于 OnMove函數(shù)缺省的設(shè)置為:當(dāng)用戶在視圖中修改數(shù)據(jù)后, OnMove將用戶的修改反映到數(shù)據(jù)源中去,進(jìn)行數(shù)據(jù)源的修改。 AppWizard生成一個(gè)菜單資源,里面有向前移動(dòng)一個(gè)記錄,向后移動(dòng)一個(gè)記錄,跳到第一 個(gè)記錄,跳到最后一個(gè)記錄命令。如果用戶選擇可以浮動(dòng)的工具條的選項(xiàng)的時(shí)候,AppWizard同樣也會(huì)相應(yīng)的生成對(duì)應(yīng)的按鈕來(lái)對(duì)應(yīng)相應(yīng)的數(shù)據(jù)庫(kù)移動(dòng)命令。 如果已經(jīng)達(dá)到了最后一個(gè)記錄,用戶仍然發(fā)出向后移動(dòng)命令的時(shí)候。視圖將一直顯示最后一個(gè)記錄的數(shù)據(jù)。如果已經(jīng)到了記錄集的最前面一個(gè)記錄,用戶仍然發(fā)出向前移動(dòng)的命令,視圖將只是顯示數(shù)據(jù)集里面的第一個(gè)記錄的數(shù)據(jù)。 需要小心的是如果記錄集中沒(méi)有記錄,調(diào)用 OnMove函數(shù)會(huì)產(chǎn)生一個(gè)異常。所以要調(diào)用相應(yīng)的用戶自己編制的函數(shù)來(lái)判斷數(shù)據(jù)集中是否中還有數(shù)據(jù)。 下面舉例實(shí)現(xiàn)一個(gè)小小的數(shù) 據(jù)庫(kù)顯示程序: ? 在 File菜單中選擇 New命令,用 AppWizard來(lái)生成一個(gè)單文檔的 EXE工程,名字叫 DBView, ? 然后選中視圖文檔支持,然后在 AppWizard的第二步中選擇數(shù)據(jù)支持的時(shí)候選擇“ Database view without file support”,就如圖 158所示一樣。 ? 然后選擇數(shù)據(jù)源,按下 Data Source的按鈕。出現(xiàn)如圖 159的對(duì)話框,在 ODBC一項(xiàng)中選擇 LocalServer,然后按下 OK鍵。 159 選擇數(shù)據(jù)庫(kù) ? 然后會(huì)出現(xiàn)如圖 1510的對(duì)話框,因?yàn)槭潜镜財(cái)?shù)據(jù)庫(kù) ,所以可以以 sa(數(shù)據(jù)庫(kù)管理員)身份進(jìn)入,因?yàn)槲覜](méi)有給數(shù)據(jù)庫(kù)管理員設(shè)置密碼,所以密碼為空。 1510 SQL登陸對(duì)話框 ? 選擇數(shù)據(jù)庫(kù)中的 (如圖 1511 所示)。單擊 OK 1511 選擇數(shù)據(jù)表 ? 去掉 Printing And Pring Preview的風(fēng)格( step 4),然后保留其它的設(shè)置,生成一個(gè)工程,打開(kāi)資源文件的對(duì)話框模板,加入相應(yīng)的 Edit Box,如圖 1512所示。 1512 對(duì)話框的設(shè)置 ? 用 ClassWizard來(lái)給相應(yīng)的 Edit Box來(lái)連接變量,注 意,在 Member variable name的下拉組合框中已經(jīng)有了相應(yīng)表中的字段 (如圖 1513 所示 ),只要選中就行了,請(qǐng)讀者按照上圖的說(shuō)明選擇好相應(yīng)的字段。 1513 選擇數(shù)據(jù)變量 ? 編譯一下,就可以運(yùn)行了。程序的運(yùn)行的界面就如圖 1514所示,讀者可以按一下工具欄上的按鈕,看一看程序顯示的是不是數(shù)據(jù)庫(kù)中的數(shù)據(jù)??梢酝瑫r(shí)打開(kāi)SQL Server 。同時(shí)可以修改數(shù)據(jù),并且能夠反饋到數(shù)據(jù)庫(kù)中去。顯示的時(shí)候數(shù)據(jù)已經(jīng)重新排序了一遍。 這樣讀者就已經(jīng)做成了一個(gè)自己的一個(gè)數(shù)據(jù)庫(kù)前端應(yīng)用程序。它還 是很簡(jiǎn)單的,并不能夠真的滿足我們的需求,所以我們將在其基礎(chǔ)上進(jìn)行些代碼修改。要是讀者所裝的SQL Pubs數(shù)據(jù)庫(kù)中的數(shù)據(jù)是很重要的話,請(qǐng)備份一份,以免數(shù)據(jù)遭到破壞后,無(wú)法修復(fù)。我們?cè)趯?MFC中的 ODBC類(lèi)介紹完后進(jìn)行 二次開(kāi)發(fā),所以讀者請(qǐng)保存好這個(gè)工程。 1514 顯示數(shù)據(jù)庫(kù)數(shù)據(jù)的前臺(tái)程序 RFX Record Field Exchange (RFX)就是支持剛才那個(gè)應(yīng)用程序的一個(gè)交換機(jī)制,請(qǐng)讀者試著習(xí)慣使用英文縮寫(xiě)來(lái)代替一些東西,這在計(jì)算機(jī)技術(shù)交流過(guò)程中是很有效的。 MFC ODBC 數(shù)據(jù)庫(kù)類(lèi)能夠自動(dòng)的在數(shù)據(jù)源和一個(gè)視圖之間交換數(shù)據(jù),就是說(shuō)不斷地響應(yīng)用戶的要求,從數(shù)據(jù)源中讀取數(shù)據(jù),顯示數(shù)據(jù);從界面讀取數(shù)據(jù),修改數(shù)據(jù)源。當(dāng)從CRecordset 類(lèi)派生一個(gè)類(lèi),在交換數(shù)據(jù)的時(shí)候沒(méi)有選擇
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1