版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章VisualBasic數(shù)據(jù)訪問(wèn)方法主要內(nèi)容10.1概述10.2Data控件10.3ADOData控件10.4查詢(xún)數(shù)據(jù)10.1概述1.VisualBasic訪問(wèn)的數(shù)據(jù)庫(kù)類(lèi)型VisualBasic可以訪問(wèn)以下類(lèi)型的數(shù)據(jù)庫(kù)。(1)Jet數(shù)據(jù)庫(kù)(2)ISAM數(shù)據(jù)庫(kù)(3)ODBC數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)由Jet數(shù)據(jù)庫(kù)引擎直接生成和操作,具有靈活快速的特點(diǎn)。最早為Access所使用,現(xiàn)在已經(jīng)支持其他數(shù)據(jù)庫(kù)。索引順序訪問(wèn)方法(ISAM)數(shù)據(jù)庫(kù)有幾種不同形式,如dBASE、ForPro和Paradox等。ODBC是Miscrosoft公司推出。VisualBasic可以訪問(wèn)任何支持ODBC標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù),如MicrosoftSQLServer、Oracle、Sybase等。2.VisualBasic訪問(wèn)數(shù)據(jù)的接口數(shù)據(jù)訪問(wèn)過(guò)程涉及三個(gè)組成部分:(1)數(shù)據(jù)提供者(DataProvider)(2)數(shù)據(jù)服務(wù)提供者(DataServiceProvider)(3)數(shù)據(jù)使用者(DataConsumer)數(shù)據(jù)使用者和數(shù)據(jù)提供者之間的橋梁就是數(shù)據(jù)訪問(wèn)接口對(duì)象VB的三種數(shù)據(jù)訪問(wèn)接口ActivcX數(shù)據(jù)對(duì)象(ADO)遠(yuǎn)程數(shù)據(jù)對(duì)象(RDO)數(shù)據(jù)訪問(wèn)對(duì)象(DAO)。這接口分別代表了數(shù)據(jù)訪問(wèn)技術(shù)的不同發(fā)展階段。3.記錄集VB只能通過(guò)記錄集(Recordset)對(duì)象進(jìn)行記錄的操作和瀏覽。記錄集由行和列構(gòu)成,可以由一個(gè)或幾個(gè)表中的數(shù)據(jù)構(gòu)成,實(shí)際上是一個(gè)操縱和使用表的視圖。10.2Data控件Data控件是VisualBasic內(nèi)嵌的、使用Microsoft的Jet數(shù)據(jù)庫(kù)引擎來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的一種重要的工具它利用三種Recordset對(duì)象訪問(wèn)數(shù)據(jù)庫(kù)TableDynaSetSnapShot10.2.1Data控件屬性設(shè)置Data控件數(shù)據(jù)源的三個(gè)基本屬性ConnectDatabaseNameRecordSource1.Connect屬性Connect屬性指定Data控件所要連接的數(shù)據(jù)庫(kù)類(lèi)型訪問(wèn)SQLServer數(shù)據(jù)庫(kù),必須由ODBC指定:ODBC:DATABASE=DefaultDataBase;DSN=DataSourceName;UID=UserID;PWD=Password;例如,連接Student_db數(shù)據(jù)庫(kù)創(chuàng)建ODBC的操作步驟如下:打開(kāi)控制面板中的“ODBC數(shù)據(jù)源管理器”對(duì)話框,選擇“用戶(hù)DSN”選項(xiàng)卡,單擊“添加”按鈕;在“創(chuàng)建新數(shù)據(jù)源”對(duì)話框的“選擇您想為其安裝數(shù)據(jù)源的驅(qū)動(dòng)程序”列表框中選擇“SQLServer”項(xiàng),單擊“完成”按鈕,如圖10.2所示打開(kāi)“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對(duì)話框,在“名稱(chēng)”文本框中輸入“Student”為ODBC數(shù)據(jù)源名稱(chēng),在“服務(wù)器”文本框中輸入“(Local)”為本地SQLServe服務(wù)器,如圖10.3所示。單擊“下一步”按鈕,在打開(kāi)的對(duì)話框中,為“SQLServer應(yīng)該如何驗(yàn)證登錄ID的真?zhèn)巍表?xiàng)選擇“使用網(wǎng)絡(luò)登錄ID的WindowsNT驗(yàn)證”單選框。單擊“下一步”按鈕,在打開(kāi)的對(duì)話框中,選擇“更改數(shù)據(jù)默認(rèn)數(shù)據(jù)庫(kù)為”項(xiàng)的復(fù)選框,并在其下面的下拉列表框中選擇“Student_db”,如圖10.4所示。單擊“下一步”按鈕,在打開(kāi)的對(duì)話框中選擇“完成”按鈕單擊“ODBCMicrosoftSQLServer安裝”對(duì)話框中的“測(cè)試數(shù)據(jù)庫(kù)”按鈕,出現(xiàn)“測(cè)試成功”信息后,按“確定”按鈕結(jié)束該配置。在Data控件的Connect屬性框中添加以下字符串:ODBC:DATABASE=student_db;DSN=student;UID=;PWD=;2.DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫(kù)文件名,包括所有的路徑名。DatabaseName屬性通常用于指定Access文件路徑,在訪問(wèn)SQLServer時(shí)不會(huì)用到。3.RecordSource屬性RecordSource屬性用于確定Data控件具體可訪問(wèn)的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對(duì)象,可以是:數(shù)據(jù)庫(kù)中的單個(gè)表名(出現(xiàn)在RecordSource屬性的下拉列表中),查詢(xún)使用SQL查詢(xún)語(yǔ)言的一個(gè)查詢(xún)字符串。例如,Data控件要操作Student_db數(shù)據(jù)庫(kù)中的學(xué)生信息表St_Info,設(shè)置為RecordSource=“St_Info”;SQL查詢(xún)語(yǔ)言:RecordSource=“SELECT*FROMSt_InfoWHERECl_Name=‘材料科學(xué)0601’”, 選擇St_Info表中材料科學(xué)0601班的所有學(xué)生的數(shù)據(jù)4.RecordsetType屬性RecordsetType屬性確定記錄集的類(lèi)型:Table為表類(lèi)型,指定記錄集是當(dāng)前數(shù)據(jù)庫(kù)真實(shí)的數(shù)據(jù)表;DynaSet為動(dòng)態(tài)集,指定記錄集可以是一個(gè)或多個(gè)表的記錄的引用,是可更新的數(shù)據(jù)集;SnapShot為快照類(lèi)型,指定記錄集的數(shù)據(jù)是靜態(tài)的,反映的是產(chǎn)生快照的一瞬間數(shù)據(jù)庫(kù)的狀態(tài),具有只讀特征5.EOFAction和BOFAction屬性 當(dāng)Recordset對(duì)象的屬性BOF或EOF的值為T(mén)rue時(shí),表明當(dāng)前位置處于Recordset對(duì)象的第一個(gè)記錄之前或最后一個(gè)記錄之后,在操作數(shù)據(jù)庫(kù)時(shí),經(jīng)常要使用這兩個(gè)屬性來(lái)判斷是否已到達(dá)數(shù)據(jù)庫(kù)的首記錄或末記錄。6.Exclusive屬性
Exclusive屬性決定Data控件所連接的數(shù)據(jù)庫(kù)在運(yùn)行時(shí)是為單用戶(hù)打開(kāi)還是為多用戶(hù)打開(kāi)。若該屬性值為T(mén)rue,則表明不允許其他用戶(hù)打開(kāi)該數(shù)據(jù)庫(kù)。7.ReadOnly屬性
ReadOnly屬性設(shè)置Data控件訪問(wèn)的數(shù)據(jù)庫(kù)是否以只讀方式打開(kāi)。該屬性的默認(rèn)取值為False,表明用戶(hù)可以通過(guò)數(shù)據(jù)綁定控件編輯數(shù)據(jù)庫(kù)中的記錄。設(shè)置為T(mén)rue時(shí),表示可以顯示數(shù)據(jù),但無(wú)法寫(xiě)入或修改數(shù)據(jù)。10.2.2數(shù)據(jù)綁定控件
Data控件沒(méi)有提供顯示記錄集中數(shù)據(jù)的功能,通過(guò)具有數(shù)據(jù)感知功能的控件來(lái)配合Data控件識(shí)別記錄集中的數(shù)據(jù)內(nèi)容,這些控件被稱(chēng)為數(shù)據(jù)綁定控件??山壎ǖ紻ata控件上的控件有TextBoxLabelCheckBoxComboBox
、ListBoxPictureBox
、
ImageDBList、DBComboMsFlexGrid
其中,DBList、DBCombo、MsFlexGrid是和數(shù)據(jù)相連的控件,能自動(dòng)從與之綁定的Data控件的字段中移居,并有選擇地更新其他Data控件中相關(guān)表的字段。與Data控件的綁定設(shè)置通過(guò)兩個(gè)屬性實(shí)現(xiàn):DataSource屬性用于設(shè)置與該控件綁定的Data控件的名稱(chēng) 例如,Data1DataField屬性用于設(shè)置在顯示的數(shù)據(jù)庫(kù)中表的字段名稱(chēng) 例如,將文本框txtStName與數(shù)據(jù)庫(kù)Student_db中的表St_Info的學(xué)生姓名St_Name字段連接起來(lái),字段St_Name就被綁定到txtStName控件上。例10-1:設(shè)計(jì)一個(gè)窗體,顯示Student_db數(shù)據(jù)庫(kù)中學(xué)生信息表St_Info中的數(shù)據(jù)。操作步驟:(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)①Data控件與SQLServer數(shù)據(jù)庫(kù)的連接。②TextBox控件與St_Info表中字段的綁定。(3)運(yùn)行工程。箭頭按鈕可遍歷整個(gè)記錄例10-2:用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student_db數(shù)據(jù)庫(kù)中St_Info表的數(shù)據(jù)。(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)。10.2.3Data控件的事件1.Reposition事件
Reposition事件發(fā)生在一條記錄成為當(dāng)前記錄后。當(dāng)用戶(hù)改變記錄集的指針使其從一條記錄移動(dòng)到另一條記錄,或使記錄集的第一條記錄成為當(dāng)前記錄時(shí),都會(huì)發(fā)生Reposition事件。例10-3:Reposition事件示例。 在例10-1中Data控件的datStInfo_Reposition事件中加入如下代碼:PrivateSubdatStInfo_Reposition()
datStInfo.Caption="當(dāng)前記錄:"&datStInfo.Recordset.AbsolutePosition+1EndSub例10-4:使用Reposition事件更新Student_db數(shù)據(jù)庫(kù)的學(xué)生成績(jī)表S_C_Info。(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)。窗體frmStScore及控件屬性按表10.4進(jìn)行設(shè)置。(3)代碼設(shè)計(jì)。在Data1_Reposition中添加以下代碼:PrivateSubData1_Reposition()Data2.RecordSource="SELECT*FROMS_C_InfoWHERESt_ID='"_&Data1.Recordset("St_ID")&"'"Data2.Refresh '按剛設(shè)置的記錄源刷新Data2的RecordsetEndSub2.Validate事件Validate事件是在移動(dòng)到一條不同記錄之前觸發(fā)。一般用于來(lái)檢查數(shù)據(jù)的有效性。例如,在例10-1中,不允許用戶(hù)在數(shù)據(jù)瀏覽時(shí)修改St_ID字段的數(shù)據(jù):PrivateSubdatStInfo_Validate(ActionAsInteger,SaveAsInteger)IfSaveandtxtStID.DataChangedThen
MsgBox"不能修改ID."
txtStID.DataChanged=FalseAction=0EndIfEndSub10.2.4Data控件的常用方法1.Refresh方法 如果Data控件的Connect等屬性值發(fā)生改變,Refresh方法能打開(kāi)或重新打開(kāi)數(shù)據(jù)庫(kù)并能重建控件的記錄集。2.UpdateControls方法該方法可以從一個(gè)Data控件的記錄集對(duì)象中取得當(dāng)前記錄,并且在與該Data控件綁定的控件中顯示適當(dāng)?shù)臄?shù)據(jù)。該方法可以將數(shù)據(jù)綁定控件的內(nèi)容恢復(fù)為其原始值,等效于用戶(hù)更改了數(shù)據(jù)之后決定取消更改。3.UpdateRecord方法
UpdateRecord方法用于將當(dāng)前內(nèi)容存入數(shù)據(jù)庫(kù)中,該方法不觸發(fā)Validate事件。它類(lèi)似于Recordset對(duì)象執(zhí)行Edit方法改變一個(gè)字段并隨后執(zhí)行Update方法。10.2.5Recordset對(duì)象的屬性與方法1.AbsolutePostion屬性
該屬性返回當(dāng)前記錄指針值,如果是第一條記錄,其值為0,該屬性為只讀屬性,在例10-3中使用的就是該屬性。2.BOF和EOF屬性BOF屬性指示當(dāng)前記錄位置位于記錄集對(duì)象的第一個(gè)記錄之前,是則返回TrueEOF屬性指示當(dāng)前記錄位置位于記錄集對(duì)象的最后一個(gè)記錄之后,是則返回True。使用該兩屬性可確定記錄指針是否超出記錄集對(duì)象的限制,或者記錄集對(duì)象是否包含記錄。3.Bookmark屬性Bookmark屬性稱(chēng)為書(shū)簽。每個(gè)記錄都有惟一的書(shū)簽。Bookmark屬性可將Recordset對(duì)象的當(dāng)前記錄快速移動(dòng)到設(shè)置為由有效書(shū)簽所標(biāo)識(shí)的記錄上。注意: 在程序中不能使用AbsolutePosition屬性重定位記錄集的指針,但可以使用Bookmark屬性。例如,在例10.1的frmStInfo窗體的代碼通用聲明區(qū)域中定義變量mBookmark,Form_Click事件中保存書(shū)簽:DimmBookmarkAsVariantPrivateSubForm_Click()
mBookmark=datStInfo.Recordset.Bookmark
EndSub在該窗體的命令按鈕cmdCancel中添加代碼:PrivateSubcmdCancel_Click()
datStInfo.Recordset.Bookmark=mBookmarkEndSub4.RecordCount屬性RecordCount屬性記錄Recordset對(duì)象中記錄的當(dāng)前數(shù)目,為只讀屬性。在多用戶(hù)環(huán)境下,RecordCount屬性值可能不準(zhǔn)確,為了獲得準(zhǔn)確值,可使用MoveLast方法將記錄指針移至最后一條記錄上。5.NoMatch屬性NoMatch屬性用于判斷在記錄集中進(jìn)行查找時(shí),是否找到相匹配的記錄。若Nomatch的值為T(mén)rue,則表示沒(méi)有找到記錄。6.Move方法Recordset對(duì)象有5種方法支持Data控件對(duì)象的4個(gè)箭頭按鈕操作:
MoveFirst、MoveLast、MoveNext、MovePrevious、Move[n]例10-5:將例10-1窗體frmStInfo上的Data控件datStInfo的4個(gè)箭頭的操作用4個(gè)CommandButton控件取代。(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)將Data控件的Visible屬性設(shè)置為False,隱藏該控件使其運(yùn)行時(shí)不可見(jiàn),窗體及CommandButton控件的屬性值如表10.6所示,其他控件屬性與表10.2所列相同。(3)代碼設(shè)計(jì)。cmdFirst_Click事件使記錄指針移動(dòng)到第一條PrivateSubcmdFirst_Click()
datStInfo.Recordset.MoveFirstEndSubcmdLast_Click事件使記錄指針移動(dòng)到最后一條。PrivateSubcmdLast_Click()
datStInfo.Recordset.MoveLastEndSubcmdNext_Click使記錄指針移動(dòng)到下一條PrivateSubcmdNext_Click()
datStInfo.Recordset.MoveNextIfdatStInfo.Recordset.EOFThen
datStInfo.Recordset.MoveLastEndIfEndSubcmdPrev_Click使記錄指針移動(dòng)到上一條PrivateSubcmdPrev_Click()
datStInfo.Recordset.MovePreviousIfdatStInfo.Recordset.BOFThendatStInfo.Recordset.MoveFirstEndIfEndSub7.Find方法Find方法在Recordset中總是查找匹配的第一條記錄。Find有4種查找方法:FindFirst、FindLast、FindPrevious和FindNext其語(yǔ)法格式如下:Recordset.Find<條件><條件>是一個(gè)指定字段與常量關(guān)系的字符串表達(dá)式例10-6:在例10-5的窗體frmRecMove上增加“查找”按鈕,使用Find方法查找記錄。10.2.6數(shù)據(jù)維護(hù) 數(shù)據(jù)維護(hù)包括對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)表記錄的增加、刪除、修改等操作1.添加記錄AddNew方法可以在記錄集中創(chuàng)建新記錄。
Data控件名.Recordset.AddNew[FieldList,Values] Data控件名.Recordset.Update[FieldList,Values]例如,使用AddNew方法為Data控件Data1的記錄集添加新記錄,其步驟如下:(1)調(diào)用AddNew方法,添加一條空記錄:Data1.Recordset.AddNew。(2)給各字段賦值,語(yǔ)句賦值格式為:Data1.Recordset.Field("<字段名>")=<值>或者,在數(shù)據(jù)綁定控件中直接輸入內(nèi)容。(3)調(diào)用Update方法,確定所做的添加操作,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù):Data1.Recordset.Update(4)調(diào)用MoveLast方法顯示新記錄:Data1.Recordset.MoveLast。2.修改記錄在Data控件的記錄集中修改記錄,必須先調(diào)用Edit方法。在編輯記錄中的數(shù)據(jù)后,使用Update方法保存修改后的結(jié)果。例如,使用Edit方法修改Data1控件的當(dāng)前記錄:(1)調(diào)用Edit方法:Data1.Recordset.Edit。(2)給各字段賦值,或在綁定控件中直接修改。(3)調(diào)用Update方法,確定所做的修改:Data1.Recordset.Update。3.刪除記錄Data控件使用Delete方法刪除當(dāng)前記錄,記錄刪除后不可恢復(fù)。例如,從Data1控件的記錄集中刪除當(dāng)前記錄:(1)定位被刪除的記錄使之成為當(dāng)前記錄(使用Move或Find方法)。(2)調(diào)用Delete方法刪除當(dāng)前記錄:Data1.Recordset.Delete。(3)調(diào)用MoveNext方法移動(dòng)記錄指針確定刪除例10-7:在例10-1窗體中放置“添加”、“刪除”、“修改”、“取消”4個(gè)按鈕,通過(guò)這4個(gè)按鈕來(lái)控制記錄的增加、刪除和修改操作。本例按以下步驟設(shè)計(jì)。(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)。(3)代碼設(shè)計(jì)。cmdAdd按鈕實(shí)現(xiàn)兩個(gè)功能:調(diào)用AddNew方法添加記錄并輸入各字段值調(diào)用Update方法并將緩沖區(qū)內(nèi)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。 根據(jù)cmdAdd.Caption的值為“添加”或“確認(rèn)”來(lái)決定是調(diào)用AddNew方法還是Update方法,并控制其他三個(gè)按鈕的可用性。cmdDelete按鈕刪除記錄 由cmdDelete_Click事件調(diào)用delete方法實(shí)現(xiàn)。當(dāng)前記錄被刪除后,必須移動(dòng)記錄指針,刷新屏幕顯示。記錄的修改首先調(diào)用Edit方法進(jìn)入記錄編輯狀態(tài)再調(diào)用Update方法保存修改后的數(shù)據(jù)。
cmdEdit_Click事件根據(jù)cmdEdit.Caption的值來(lái)調(diào)用Edit方法或Update方法,并控制其他三個(gè)按鈕的可用性。10.3ADOData控件10.3.1使用ADOData控件10.3.2ADOData控件的屬性與方法10.3.3數(shù)據(jù)綁定控件DataList、DataCombo、DataGrid10.3.1使用ADOData控件ADOData控件不是VisualBasic6.0的標(biāo)準(zhǔn)控件,在使用前必須將其添加到工具箱。單擊“工程\部件”菜單命令,在“部件”對(duì)話框中選擇“MicrosoftADO6.0(OLEDB)”選項(xiàng),ADOData控件就添加到工具箱(圖標(biāo)為)。例10-8:以ADOData控件數(shù)據(jù)源顯示Student_db數(shù)據(jù)庫(kù)的課程信息表C_Info的數(shù)據(jù)(1)界面設(shè)計(jì)。創(chuàng)建窗體(2)連接數(shù)據(jù)庫(kù)使用ADOData控件連接Student_db數(shù)據(jù)庫(kù):①在窗體上建立ADOData控件adoCInfo。②顯示adoCInfo控件的“屬性頁(yè)”對(duì)話框。③在“屬性頁(yè)”對(duì)話框的“通用”選項(xiàng)卡中,選擇“使用連接字符串”選項(xiàng),單擊“生成”按鈕④在彈出的“數(shù)據(jù)鏈接屬性”對(duì)話框的“提供程序”選項(xiàng)卡的連接數(shù)據(jù)列表中選擇“MicrosoftOLEDBProviderforSQLServer”項(xiàng)⑤單擊“下一步”按鈕,在“數(shù)據(jù)鏈接屬性”對(duì)話框的“連接”選項(xiàng)卡中,選擇“2.輸入登錄服務(wù)器的信息”的“使用WindowsNT集成安全設(shè)置”選項(xiàng),并“在服務(wù)器上選擇數(shù)據(jù)庫(kù)”下拉列表框中選擇Student_db項(xiàng),如圖10.16所示,單擊“測(cè)試連接”按鈕檢測(cè)是否連接成功。⑥單擊“確定”按鈕在“屬性頁(yè)”對(duì)話框的“通用”選項(xiàng)卡的“使用連接字符串”文本框中已填充了以下字符串:Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=student_db⑦在“屬性頁(yè)”對(duì)話框的“記錄源”選項(xiàng)卡中,選擇“命令類(lèi)型”下拉框的“2-adCmdTable”項(xiàng)再選擇“表或存儲(chǔ)過(guò)程名稱(chēng)”下拉列表框的C_Info數(shù)據(jù)表,如圖10.17所示。(3)屬性設(shè)計(jì)。按圖10.13在窗體frmAdoC上放置Label和TextBox控件,其屬性值設(shè)置如表10.8所示。(4)運(yùn)行工程。10.3.2ADOData控件的屬性與方法ADOData控件的基本屬性有ConnectionString、CommandType、Recordset、RecordSource、MaxRecords、CommandTimeout等屬性。1.ConnectionString屬性ConnectionString屬性用來(lái)建立當(dāng)前應(yīng)用程序到數(shù)據(jù)源的連接信息。ConnectionString屬性涉及4個(gè)參數(shù):Provider:指定用來(lái)連接的數(shù)據(jù)提供者名稱(chēng)。FileName:指定包含預(yù)先設(shè)置連接信息的特定提供者的文件名稱(chēng)(例如,持久數(shù)據(jù)源對(duì)象)。RemoteProvider:指定打開(kāi)客戶(hù)端連接時(shí)使用的提供者名稱(chēng)。(僅限于遠(yuǎn)程數(shù)據(jù)服務(wù))。RemoteServer:指定打開(kāi)客戶(hù)端連接時(shí)使用的服務(wù)器的路徑名稱(chēng)。(僅限于遠(yuǎn)程數(shù)據(jù)服務(wù))。2.CommandType屬性CommandType屬性用于指定Command對(duì)象將對(duì)數(shù)據(jù)源執(zhí)行的命令的類(lèi)型,也就是設(shè)置RecordSource屬性可選取的類(lèi)型。有四種可選的類(lèi)型adCmdUnknown:默認(rèn)值,表明RecordSource屬性為SQL語(yǔ)句,CommandText屬性命令未知。adCmdTable:表明RecordSource屬性為數(shù)據(jù)表名。adCmdText:表明RecordSource屬性為SQL語(yǔ)句。adCmdStoredProc:表明RecordSource屬性為存儲(chǔ)過(guò)程3.RecordSource屬性
RecordSource屬性設(shè)置一個(gè)記錄集的查詢(xún)語(yǔ)句或命令。它可以在“屬性頁(yè)”對(duì)話框中設(shè)置,也可直接屬性窗口中設(shè)置,其取值隨著CommandType屬性取值的不同而不同4.MaxRecords屬性
MaxRecords屬性設(shè)定從查詢(xún)中返回Recordset的最大記錄數(shù),缺省為0時(shí)表明數(shù)據(jù)提供者返回所有所需的記錄。使用MaxRecords屬性可對(duì)提供者從數(shù)據(jù)源返回的記錄數(shù)加以限制。5.UserName和Password屬性 在“屬性頁(yè)”的“身份驗(yàn)證”對(duì)話框中,可以設(shè)置UserName和Password的屬性,這在訪問(wèn)受保護(hù)的數(shù)據(jù)庫(kù)時(shí)是必要的。6.CommandTimeout屬性
CommandTimeout屬性用于設(shè)置在建立一個(gè)連接時(shí),系統(tǒng)等待的時(shí)間,以秒為單位。若在指定時(shí)間內(nèi)連接不成功,則給出錯(cuò)誤信息。例10-9:使用ADOData控件在Student_db數(shù)據(jù)庫(kù)中添加、刪除、修改St_Info表的記錄。應(yīng)用程序使用4個(gè)命令按鈕控制記錄的“添加”、“刪除”、“修改”、“取消”操作。例10-7的窗體基礎(chǔ)上(1)界面設(shè)計(jì)。(2)屬性設(shè)計(jì)。(3)代碼設(shè)計(jì)。記錄的修改PrivateSubcmdEdit_Click()
mBookmark=adoEQ.Recordset.BookmarkIfMsgBox("保存修改結(jié)果嗎?",vbYesNo)=vbYesThen
adoEQ.Recordset.UpdateElse
adoEQ.Recordset.CancelUpdate
adoEQ.Recordset.Bookmark=mBookmarkEndIfEndSub我們將圖10.18中窗體的“性別”使用單選按鈕,則其窗體布局如圖10.19所示。初始化窗體PrivateSubForm_Activate()'以下IF語(yǔ)句是判斷記錄指針是否移動(dòng)到記錄集的開(kāi)始和結(jié)束位置
IfadoStInfo.Recordset.EOFOradoStInfo.Recordset.BOFThenExitSubEndIfIfadoStInfo.Recordset.Fields("St_Sex")="男"ThenOption1(0).Value=TrueOption1(1).Value=FalseElseOption1(0).Value=FalseOption1(1).Value=TrueEndIfEndSub更新OptionButton按鈕的取值PrivateSubtxtStID_Change()
Form_ActivateEndSub例10-10:要求一個(gè)學(xué)生至少?gòu)?門(mén)課程中任選2門(mén)課程學(xué)習(xí),并將選擇的結(jié)果添加到S_C_Info表中。將adoQry控件的CommandType
設(shè)置為1-adCmdText,其RecordSource屬性使用SQL查詢(xún)語(yǔ)句DimArrCID(3)AsStringDimArrSt()AsStringPrivateSubForm_Load()
adoQry.Refresh
adoQry.Recordset.MoveFirst
ReDim
ArrSt(adoQry.Recordset.RecordCount)Fori=0ToadoQry.Recordset.RecordCount-1
ArrSt(i)=adoQry.Recordset.Fields(0)List1.AddItemadoQry.Recordset.Fields(1)
adoQry.Recordset.MoveNextNexti
adoQry.RecordSource="SELECT*FROMC_Info"
adoQry.RefreshFori=0To3
ArrCID(i)=GetCID(Check1(i).Caption)NextEndSub函數(shù)FunctionGetCID(fnameAsString)AsString
adoQry.Recordset.MoveFirst
adoQry.Recordset.Find"C_Name='"&fname&"'"IfNotadoQry.Recordset.EOFThen
GetCID=adoQry.Recordset.Fields(0)ExitFunctionEndIf
GetCID=""EndFunction在Command1_Click事件中添加以下代碼:PrivateSubCommand1_Click()
adoQry.RecordSource="SELECT*FROMS_C_InfoWHERESt_id=''"
adoQry.RefreshFori=0To3IfCheck1(i).Value=1Then
adoQry.Recordset.AddNew
adoQry.Recordset.Fields("St_ID")=ArrSt(List1.ListIndex)
adoQry.Recordset.Fields("C_No")=ArrCID(i)
adoQry.Recordset.MoveLastEndIfNextiEndSub10.3.3數(shù)據(jù)綁定控件DataList、DataCombo、DataGridADOData控件也可以與10.2.2節(jié)所述數(shù)據(jù)綁定控件進(jìn)行綁定來(lái)顯示記錄集中的數(shù)據(jù)。另外,VisualBasic6.0還提供了一些新的成員來(lái)連接不同數(shù)據(jù)類(lèi)型的數(shù)據(jù),這些控件有DataList、DataCombo、DataGrid等,它們只能與ADOData控件綁定。要使用這些控件必須先通過(guò)“工程\部件”菜單命令,在“部件”對(duì)話框中選擇“MicrosoftDataListControl6.0(OLEDB)”和“MicrosoftDataGridControl6.0(OLEDB)”選項(xiàng),單擊“確定”按鈕,就可以在VisualBasic的控件工具箱內(nèi)看見(jiàn)這些控件圖標(biāo)1.DataCombo和DataList控件DataList控件是一個(gè)數(shù)據(jù)綁定列表框,它可以自動(dòng)地由一個(gè)附加數(shù)據(jù)源中的一個(gè)字段充填,并且可選擇地更新另一個(gè)數(shù)據(jù)源中一個(gè)相關(guān)表的一個(gè)字段。DataCombo控件的功能與DataList控件相同,以下拉列表框形式提供給用戶(hù)。DataCombo控件包含以下常用屬性:(1)BoundColumn屬性返回或設(shè)置一個(gè)Recordset對(duì)象的源字段的名稱(chēng),該Recordset對(duì)象用來(lái)為另一個(gè)Recordset提供數(shù)據(jù)值。(2)BoundText屬性返回或設(shè)置由BoundColumn屬性指定的字段的值。(3)DataBindings屬性返回DataBindings集合對(duì)象,該對(duì)象包含了有用的可綁定屬性。(4)DataChanged屬性返回或設(shè)置一個(gè)值,它指出被綁定的控件中的數(shù)據(jù)已被某進(jìn)程改變,這個(gè)進(jìn)程不是從當(dāng)前記錄中檢索數(shù)據(jù)的進(jìn)程。如果DataChanged=True,表示當(dāng)前在控件中的數(shù)據(jù)與當(dāng)前記錄中的數(shù)據(jù)不同;如果DataChanged=False,表示如果當(dāng)前控件中有數(shù)據(jù)的話,則與當(dāng)前記錄中的數(shù)據(jù)相同。(5)DataField屬性返回或設(shè)置數(shù)據(jù)使用者將被綁定到的字段名。(6)DataSource屬性返回或設(shè)置一個(gè)數(shù)據(jù)源,通過(guò)該數(shù)據(jù)源,數(shù)據(jù)使用者被綁定到一個(gè)數(shù)據(jù)庫(kù)。(7)RowSource屬性設(shè)置一個(gè)指定ADOData控件的值,DataList控件和DataCombo控件的列表由這個(gè)ADOData控件填充。(8)ListField屬性返回或設(shè)置Recordset對(duì)象中的字段名稱(chēng),這個(gè)對(duì)象由RowSource屬性指定,用于填充DataCombo控件或DataList控件的列表部分。(9)Locked屬性返回或設(shè)置一個(gè)值,指示對(duì)象中的任何數(shù)據(jù)是否可以被修改。(10)SelectedItem屬性返回一個(gè)值,包含DataCombo控件或DataList控件中選中的記錄的書(shū)簽。(11)Style屬性返回或設(shè)置一個(gè)值,指定控件的行為或外觀。其值為0-dbcDropdownCombo(缺省值),表示DataCombo控件為下拉式組合框;其值為1-dbcSimpleCombo,表示DataCombo控件為簡(jiǎn)單組合框;其值為2-dbcDropdownList,表示DataCombo控件為下拉列表框。例10-11:DataCombo控件使用的示例。(1)界面設(shè)計(jì)。在Form1窗體中創(chuàng)建一個(gè)ADOData控件Adodc1,如圖10.21所示。(3)代碼設(shè)計(jì)。PrivateSubDataCombo1_Click(AreaAsInteger)
txtStId=DataCombo1.BoundTextEndSub例10-12:DataCombo控件和DataList控件聯(lián)合使用示例程序。(1)界面設(shè)計(jì)。在窗體frmDataCmbLst中包含了兩個(gè)ADOData控件、一個(gè)DataCombo控件和一個(gè)DataList控件。DataCombo控件顯示表St_Info中所有班級(jí)名稱(chēng)列Cl_Name的值。(3)代碼設(shè)計(jì)。當(dāng)用戶(hù)點(diǎn)擊DataCombo1時(shí),將觸發(fā)DataCombo1_Click事件。此時(shí),應(yīng)該通過(guò)DataCombo1.BoundText的值,刷新Adodc2,從而更新DataList1中的顯示內(nèi)容PrivateSubDataCombo1_Click(AreaAsInteger)DimstrQueryAsStringIfDataCombo1.Text=""ThenExitSubEndIf
strQuery="SELECT*FROMSt_InfoWHERECl_Name='"_&DataCombo1.BoundText&"'"Adodc2.RecordSource=strQueryAdodc2.RefreshEndSubForm_Load事件代碼如下:PrivateSubForm_Load()DataCombo1.Text=Adodc1.Recordset.Fields("Cl_Name")DataCombo1_Click(0)EndSub2.DataGrid控件DataGrid控件包含以下常用屬性:(1)DataSource屬性返回或設(shè)置一個(gè)數(shù)據(jù)源,通過(guò)該數(shù)據(jù)源,數(shù)據(jù)使用者被綁定到一個(gè)數(shù)據(jù)庫(kù)。在VisualBasic中,設(shè)置DataGrid控件所顯示的數(shù)據(jù)的最常用的方法是使用一個(gè)ADOData控件作為其DataSource,則重寫(xiě)DataSource或刷新該ADOData控件都將改變所顯示的數(shù)據(jù)。(2)Columns數(shù)組屬性返回一個(gè)Column對(duì)象的集合。Columns數(shù)組用于存放DataGrid控件中的當(dāng)前行的數(shù)據(jù),Columns(0)存放第1個(gè)字段值,Columns(1)存放第2個(gè)字段值……例如,DataGrid1控件的數(shù)據(jù)源為Adodcl,F(xiàn)orm_Load事件觸發(fā)時(shí)將以信息對(duì)話框方式顯示第2個(gè)記錄的第2個(gè)字段值:PrivateSubForm_Load()Adodc1.Recordset.MoveNext
MsgBoxDataGrid1.Columns(1)EndSub(3)AllowAddNew、AllowDelete、AllowUpdate這三個(gè)屬性分別用于指定DataGrid控件是否可以增加、刪除和更新數(shù)據(jù)。(4)ScrollBars屬性用于設(shè)置DataGrid控件的滾動(dòng)條的類(lèi)型。ScrollBars屬性值可以為1、2或3,分別對(duì)應(yīng)水平、垂直或兩種滾動(dòng)條。DataGrid控件包含以下常用方法:(1)ClearFields方法用于清除DataGrid控件的所有字段,恢復(fù)缺省的網(wǎng)格布局(具有兩個(gè)空白的列)。(2)Refresh方法用于刷新DataGrid控件中的數(shù)據(jù)。每次刷新后,當(dāng)前記錄是DataGrid控件中的第1個(gè)記錄。例10-13:從DataGrid控件的表格中讀取一行數(shù)據(jù)的具體內(nèi)容。(1)界面設(shè)計(jì)。創(chuàng)建窗體frmDataGrid,使用DataGrid控件顯示數(shù)據(jù),再創(chuàng)建窗體frmShowData,用來(lái)演示如何從DataGrid控件的表格中讀取一行數(shù)據(jù)的具體內(nèi)容。
(3)代碼設(shè)計(jì)。當(dāng)用戶(hù)單擊frmShowData窗體上Command1控件(退出)時(shí),觸發(fā)其Command1_Click事件,將關(guān)閉該窗體,代碼如下:PrivateSubCommand1_Click()UnloadMeEndSub要實(shí)現(xiàn)frmDataGrid窗體的Command2按鈕的“讀取數(shù)據(jù)”功能,需在Click事件中添加以下代碼:PrivateSubCommand2_Click()'判斷是否選擇了表中的一行
IfAdodc1.Recordset.EOFOrAdodc1.Recordset.BOFThen
MsgBox"請(qǐng)選擇要顯示的行"ExitSubEndIf'讀取數(shù)據(jù)
frmShowData.Text1=Adodc1.Recordset.Fields(0)frmShowData.Text2=Adodc1.Recordset.Fields(1)frmShowData.Text3=Adodc1.Recordset.Fields(2)frmShowData.Text4=Adodc1.Recordset.Fields(3)frmShowData.Text5=Adodc1.Recordset.Fields(4)'打開(kāi)顯示數(shù)據(jù)窗口
frmShowData.Show1EndSub為了使DataGrid1控件只顯示表St_Info中的St_ID、St_Name、St_Sex、Cl_Name、TelePhone字段,在Form_Load事件中先對(duì)Adodc1控件的RecordSource屬性重新設(shè)置使其只從數(shù)據(jù)庫(kù)返回滿(mǎn)足條件的記錄集,代碼如下:PrivateSubForm_Load()Adodc1.RecordSource="SELECTSt_ID,St_Name,St_Sex,Cl_Name,TelePhoneFROMSt_Info"Adodc1.RefreshEndSub若想使鼠標(biāo)單擊網(wǎng)格控件DataGrid1的某一行,就自動(dòng)在frmShowData窗體中顯示該行的數(shù)據(jù),則只需在DataGrid1_Click事件添加以下代碼:PrivateSubDataGrid1_Click()Command2_ClickEndSub10.4查詢(xún)數(shù)據(jù)從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)稱(chēng)為查詢(xún)數(shù)據(jù),也就是從數(shù)據(jù)庫(kù)中找出滿(mǎn)足條件的記錄集。查詢(xún)數(shù)據(jù)通常使用SQL語(yǔ)言的SELECT語(yǔ)句來(lái)完成。例10-14:通過(guò)輸入學(xué)生學(xué)號(hào)或所在班級(jí),查找St_Info表中符合條件的學(xué)生記錄。(1)界面設(shè)計(jì)。創(chuàng)建窗體frmAdoQuery,窗體上放置DataCombo控件來(lái)選擇St_Info表中Cl_Name字段的值,TextBox控件作為輸入學(xué)號(hào)字段St_Id的文本框,數(shù)據(jù)網(wǎng)絡(luò)控件DataGrid用于顯示查詢(xún)Recordset。該窗體運(yùn)行界面如圖10.25所示。(3)代碼設(shè)計(jì)。當(dāng)鼠標(biāo)單擊dtcClass控件時(shí),觸發(fā)dtcClass_Click事件,代碼如下:PrivateSubdtcClass_Click(AreaAsInteger)
adoGrid.RecordSource="Select*FromSt_InfoWhereCl_Name='"&Trim(dtcClass.Text)&"'"
adoGrid.RefreshEndSub當(dāng)用戶(hù)在“學(xué)號(hào)”文本框txtSt_ID中輸入某個(gè)學(xué)生的學(xué)號(hào)時(shí),因改變了txtSt_ID.Text屬性值而觸發(fā)txtSt_ID_Change事件,代碼如下:PrivateSubtxtSt_ID_Change()
adoGrid.RecordSource="Select*FromSt_InfoWhereSt_ID='"&Trim(txtSt_ID.Text)&"'"
adoGrid.RefreshEndSub例10-15:查詢(xún)所有學(xué)生的課程編號(hào)C_No為'9710011'的成績(jī)。這里涉及兩個(gè)表St_Info和S_C_Info,可通過(guò)SELECT命令從St_Info表中選擇St_ID、St_Name、St_Sex,從S_C_Info
表選擇
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版小學(xué)三年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)教案
- 光影交錯(cuò)室內(nèi)氛圍營(yíng)造
- 有用一年級(jí)下冊(cè)數(shù)學(xué)教案表格
- 高一化學(xué)教案:第三單元從微觀結(jié)構(gòu)看物質(zhì)的多樣性
- 2024高中地理第1章區(qū)域地理環(huán)境與人類(lèi)活動(dòng)第3節(jié)第1課時(shí)四大地區(qū)學(xué)案湘教版必修3
- 2024高中物理第一章靜電場(chǎng)綜合評(píng)估含解析新人教版選修3-1
- 2024高中語(yǔ)文第2單元孟子蚜第3課民為貴練習(xí)含解析新人教版選修先秦諸子蚜
- 2024高中語(yǔ)文第六單元文無(wú)定格貴在鮮活子路曾皙冉有公西華侍坐訓(xùn)練含解析新人教版選修中國(guó)古代詩(shī)歌散文欣賞
- 2024高考?xì)v史一輪復(fù)習(xí)第12講古代中國(guó)的農(nóng)業(yè)和手工業(yè)學(xué)案含解析人民版
- 2024高考地理一輪復(fù)習(xí)第三部分區(qū)域可持續(xù)發(fā)展-重在綜合第四章區(qū)域經(jīng)濟(jì)發(fā)展第32講區(qū)域農(nóng)業(yè)發(fā)展學(xué)案新人教版
- 枕上詩(shī)書(shū):一本書(shū)讀懂最美古詩(shī)詞
- 光儲(chǔ)電站儲(chǔ)能系統(tǒng)調(diào)試方案
- 煙花爆竹工程設(shè)計(jì)安全規(guī)范
- 河南省醫(yī)院信息大全
- 酒店賠償價(jià)目表
- YS/T 752-2011復(fù)合氧化鋯粉體
- 廣西貴港市2023年中考物理試題(原卷版)
- 集團(tuán)總裁崗位說(shuō)明書(shū)
- 中醫(yī)藥膳學(xué)課件
- 教科版二年級(jí)下冊(cè)科學(xué)第一單元測(cè)試卷(含答案)
- 做最棒的店長(zhǎng):優(yōu)秀店長(zhǎng)管理培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論