版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章VisualBasic數(shù)據(jù)訪問方法主要內(nèi)容10.1概述10.2Data控件10.3ADOData控件10.4查詢數(shù)據(jù)10.1概述1.VisualBasic訪問的數(shù)據(jù)庫類型VisualBasic可以訪問以下類型的數(shù)據(jù)庫。(1)Jet數(shù)據(jù)庫(2)ISAM數(shù)據(jù)庫(3)ODBC數(shù)據(jù)庫數(shù)據(jù)庫由Jet數(shù)據(jù)庫引擎直接生成和操作,具有靈活快速的特點(diǎn)。最早為Access所使用,現(xiàn)在已經(jīng)支持其他數(shù)據(jù)庫。索引順序訪問方法(ISAM)數(shù)據(jù)庫有幾種不同形式,如dBASE、ForPro和Paradox等。ODBC是Miscrosoft公司推出。VisualBasic可以訪問任何支持ODBC標(biāo)準(zhǔn)的數(shù)據(jù)庫,如MicrosoftSQLServer、Oracle、Sybase等。2.VisualBasic訪問數(shù)據(jù)的接口數(shù)據(jù)訪問過程涉及三個組成部分:(1)數(shù)據(jù)提供者(DataProvider)(2)數(shù)據(jù)服務(wù)提供者(DataServiceProvider)(3)數(shù)據(jù)使用者(DataConsumer)數(shù)據(jù)使用者和數(shù)據(jù)提供者之間的橋梁就是數(shù)據(jù)訪問接口對象VB的三種數(shù)據(jù)訪問接口ActivcX數(shù)據(jù)對象(ADO)遠(yuǎn)程數(shù)據(jù)對象(RDO)數(shù)據(jù)訪問對象(DAO)。這接口分別代表了數(shù)據(jù)訪問技術(shù)的不同發(fā)展階段。3.記錄集VB只能通過記錄集(Recordset)對象進(jìn)行記錄的操作和瀏覽。記錄集由行和列構(gòu)成,可以由一個或幾個表中的數(shù)據(jù)構(gòu)成,實(shí)際上是一個操縱和使用表的視圖。10.2Data控件Data控件是VisualBasic內(nèi)嵌的、使用Microsoft的Jet數(shù)據(jù)庫引擎來訪問數(shù)據(jù)庫的一種重要的工具它利用三種Recordset對象訪問數(shù)據(jù)庫TableDynaSetSnapShot10.2.1Data控件屬性設(shè)置Data控件數(shù)據(jù)源的三個基本屬性ConnectDatabaseNameRecordSource1.Connect屬性Connect屬性指定Data控件所要連接的數(shù)據(jù)庫類型訪問SQLServer數(shù)據(jù)庫,必須由ODBC指定:ODBC:DATABASE=DefaultDataBase;DSN=DataSourceName;UID=UserID;PWD=Password;例如,連接Student_db數(shù)據(jù)庫創(chuàng)建ODBC的操作步驟如下:打開控制面板中的“ODBC數(shù)據(jù)源管理器”對話框,選擇“用戶DSN”選項(xiàng)卡,單擊“添加”按鈕;在“創(chuàng)建新數(shù)據(jù)源”對話框的“選擇您想為其安裝數(shù)據(jù)源的驅(qū)動程序”列表框中選擇“SQLServer”項(xiàng),單擊“完成”按鈕,如圖10.2所示打開“創(chuàng)建到SQLServer的新數(shù)據(jù)源”對話框,在“名稱”文本框中輸入“Student”為ODBC數(shù)據(jù)源名稱,在“服務(wù)器”文本框中輸入“(Local)”為本地SQLServe服務(wù)器,如圖10.3所示。單擊“下一步”按鈕,在打開的對話框中,為“SQLServer應(yīng)該如何驗(yàn)證登錄ID的真?zhèn)巍表?xiàng)選擇“使用網(wǎng)絡(luò)登錄ID的WindowsNT驗(yàn)證”單選框。單擊“下一步”按鈕,在打開的對話框中,選擇“更改數(shù)據(jù)默認(rèn)數(shù)據(jù)庫為”項(xiàng)的復(fù)選框,并在其下面的下拉列表框中選擇“Student_db”,如圖10.4所示。單擊“下一步”按鈕,在打開的對話框中選擇“完成”按鈕單擊“ODBCMicrosoftSQLServer安裝”對話框中的“測試數(shù)據(jù)庫”按鈕,出現(xiàn)“測試成功”信息后,按“確定”按鈕結(jié)束該配置。在Data控件的Connect屬性框中添加以下字符串:ODBC:DATABASE=student_db;DSN=student;UID=;PWD=;2.DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫文件名,包括所有的路徑名。DatabaseName屬性通常用于指定Access文件路徑,在訪問SQLServer時不會用到。3.RecordSource屬性RecordSource屬性用于確定Data控件具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象,可以是:數(shù)據(jù)庫中的單個表名(出現(xiàn)在RecordSource屬性的下拉列表中),查詢使用SQL查詢語言的一個查詢字符串。例如,Data控件要操作Student_db數(shù)據(jù)庫中的學(xué)生信息表St_Info,設(shè)置為RecordSource=“St_Info”;SQL查詢語言:RecordSource=“SELECT*FROMSt_InfoWHERECl_Name=‘材料科學(xué)0601’”, 選擇St_Info表中材料科學(xué)0601班的所有學(xué)生的數(shù)據(jù)4.RecordsetType屬性RecordsetType屬性確定記錄集的類型:Table為表類型,指定記錄集是當(dāng)前數(shù)據(jù)庫真實(shí)的數(shù)據(jù)表;DynaSet為動態(tài)集,指定記錄集可以是一個或多個表的記錄的引用,是可更新的數(shù)據(jù)集;SnapShot為快照類型,指定記錄集的數(shù)據(jù)是靜態(tài)的,反映的是產(chǎn)生快照的一瞬間數(shù)據(jù)庫的狀態(tài),具有只讀特征5.EOFAction和BOFAction屬性 當(dāng)Recordset對象的屬性BOF或EOF的值為True時,表明當(dāng)前位置處于Recordset對象的第一個記錄之前或最后一個記錄之后,在操作數(shù)據(jù)庫時,經(jīng)常要使用這兩個屬性來判斷是否已到達(dá)數(shù)據(jù)庫的首記錄或末記錄。6.Exclusive屬性
Exclusive屬性決定Data控件所連接的數(shù)據(jù)庫在運(yùn)行時是為單用戶打開還是為多用戶打開。若該屬性值為True,則表明不允許其他用戶打開該數(shù)據(jù)庫。7.ReadOnly屬性
ReadOnly屬性設(shè)置Data控件訪問的數(shù)據(jù)庫是否以只讀方式打開。該屬性的默認(rèn)取值為False,表明用戶可以通過數(shù)據(jù)綁定控件編輯數(shù)據(jù)庫中的記錄。設(shè)置為True時,表示可以顯示數(shù)據(jù),但無法寫入或修改數(shù)據(jù)。10.2.2數(shù)據(jù)綁定控件
Data控件沒有提供顯示記錄集中數(shù)據(jù)的功能,通過具有數(shù)據(jù)感知功能的控件來配合Data控件識別記錄集中的數(shù)據(jù)內(nèi)容,這些控件被稱為數(shù)據(jù)綁定控件??山壎ǖ紻ata控件上的控件有TextBoxLabelCheckBoxComboBox
、ListBoxPictureBox
、
ImageDBList、DBComboMsFlexGrid
其中,DBList、DBCombo、MsFlexGrid是和數(shù)據(jù)相連的控件,能自動從與之綁定的Data控件的字段中移居,并有選擇地更新其他Data控件中相關(guān)表的字段。與Data控件的綁定設(shè)置通過兩個屬性實(shí)現(xiàn):DataSource屬性用于設(shè)置與該控件綁定的Data控件的名稱 例如,Data1DataField屬性用于設(shè)置在顯示的數(shù)據(jù)庫中表的字段名稱 例如,將文本框txtStName與數(shù)據(jù)庫Student_db中的表St_Info的學(xué)生姓名St_Name字段連接起來,字段St_Name就被綁定到txtStName控件上。例10-1:設(shè)計一個窗體,顯示Student_db數(shù)據(jù)庫中學(xué)生信息表St_Info中的數(shù)據(jù)。操作步驟:(1)界面設(shè)計。(2)屬性設(shè)計①Data控件與SQLServer數(shù)據(jù)庫的連接。②TextBox控件與St_Info表中字段的綁定。(3)運(yùn)行工程。箭頭按鈕可遍歷整個記錄例10-2:用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student_db數(shù)據(jù)庫中St_Info表的數(shù)據(jù)。(1)界面設(shè)計。(2)屬性設(shè)計。10.2.3Data控件的事件1.Reposition事件
Reposition事件發(fā)生在一條記錄成為當(dāng)前記錄后。當(dāng)用戶改變記錄集的指針使其從一條記錄移動到另一條記錄,或使記錄集的第一條記錄成為當(dāng)前記錄時,都會發(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ù)庫的學(xué)生成績表S_C_Info。(1)界面設(shè)計。(2)屬性設(shè)計。窗體frmStScore及控件屬性按表10.4進(jìn)行設(shè)置。(3)代碼設(shè)計。在Data1_Reposition中添加以下代碼:PrivateSubData1_Reposition()Data2.RecordSource="SELECT*FROMS_C_InfoWHERESt_ID='"_&Data1.Recordset("St_ID")&"'"Data2.Refresh '按剛設(shè)置的記錄源刷新Data2的RecordsetEndSub2.Validate事件Validate事件是在移動到一條不同記錄之前觸發(fā)。一般用于來檢查數(shù)據(jù)的有效性。例如,在例10-1中,不允許用戶在數(shù)據(jù)瀏覽時修改St_ID字段的數(shù)據(jù):PrivateSubdatStInfo_Validate(ActionAsInteger,SaveAsInteger)IfSaveandtxtStID.DataChangedThen
MsgBox"不能修改ID."
txtStID.DataChanged=FalseAction=0EndIfEndSub10.2.4Data控件的常用方法1.Refresh方法 如果Data控件的Connect等屬性值發(fā)生改變,Refresh方法能打開或重新打開數(shù)據(jù)庫并能重建控件的記錄集。2.UpdateControls方法該方法可以從一個Data控件的記錄集對象中取得當(dāng)前記錄,并且在與該Data控件綁定的控件中顯示適當(dāng)?shù)臄?shù)據(jù)。該方法可以將數(shù)據(jù)綁定控件的內(nèi)容恢復(fù)為其原始值,等效于用戶更改了數(shù)據(jù)之后決定取消更改。3.UpdateRecord方法
UpdateRecord方法用于將當(dāng)前內(nèi)容存入數(shù)據(jù)庫中,該方法不觸發(fā)Validate事件。它類似于Recordset對象執(zhí)行Edit方法改變一個字段并隨后執(zhí)行Update方法。10.2.5Recordset對象的屬性與方法1.AbsolutePostion屬性
該屬性返回當(dāng)前記錄指針值,如果是第一條記錄,其值為0,該屬性為只讀屬性,在例10-3中使用的就是該屬性。2.BOF和EOF屬性BOF屬性指示當(dāng)前記錄位置位于記錄集對象的第一個記錄之前,是則返回TrueEOF屬性指示當(dāng)前記錄位置位于記錄集對象的最后一個記錄之后,是則返回True。使用該兩屬性可確定記錄指針是否超出記錄集對象的限制,或者記錄集對象是否包含記錄。3.Bookmark屬性Bookmark屬性稱為書簽。每個記錄都有惟一的書簽。Bookmark屬性可將Recordset對象的當(dāng)前記錄快速移動到設(shè)置為由有效書簽所標(biāo)識的記錄上。注意: 在程序中不能使用AbsolutePosition屬性重定位記錄集的指針,但可以使用Bookmark屬性。例如,在例10.1的frmStInfo窗體的代碼通用聲明區(qū)域中定義變量mBookmark,Form_Click事件中保存書簽:DimmBookmarkAsVariantPrivateSubForm_Click()
mBookmark=datStInfo.Recordset.Bookmark
EndSub在該窗體的命令按鈕cmdCancel中添加代碼:PrivateSubcmdCancel_Click()
datStInfo.Recordset.Bookmark=mBookmarkEndSub4.RecordCount屬性RecordCount屬性記錄Recordset對象中記錄的當(dāng)前數(shù)目,為只讀屬性。在多用戶環(huán)境下,RecordCount屬性值可能不準(zhǔn)確,為了獲得準(zhǔn)確值,可使用MoveLast方法將記錄指針移至最后一條記錄上。5.NoMatch屬性NoMatch屬性用于判斷在記錄集中進(jìn)行查找時,是否找到相匹配的記錄。若Nomatch的值為True,則表示沒有找到記錄。6.Move方法Recordset對象有5種方法支持Data控件對象的4個箭頭按鈕操作:
MoveFirst、MoveLast、MoveNext、MovePrevious、Move[n]例10-5:將例10-1窗體frmStInfo上的Data控件datStInfo的4個箭頭的操作用4個CommandButton控件取代。(1)界面設(shè)計。(2)屬性設(shè)計將Data控件的Visible屬性設(shè)置為False,隱藏該控件使其運(yùn)行時不可見,窗體及CommandButton控件的屬性值如表10.6所示,其他控件屬性與表10.2所列相同。(3)代碼設(shè)計。cmdFirst_Click事件使記錄指針移動到第一條PrivateSubcmdFirst_Click()
datStInfo.Recordset.MoveFirstEndSubcmdLast_Click事件使記錄指針移動到最后一條。PrivateSubcmdLast_Click()
datStInfo.Recordset.MoveLastEndSubcmdNext_Click使記錄指針移動到下一條PrivateSubcmdNext_Click()
datStInfo.Recordset.MoveNextIfdatStInfo.Recordset.EOFThen
datStInfo.Recordset.MoveLastEndIfEndSubcmdPrev_Click使記錄指針移動到上一條PrivateSubcmdPrev_Click()
datStInfo.Recordset.MovePreviousIfdatStInfo.Recordset.BOFThendatStInfo.Recordset.MoveFirstEndIfEndSub7.Find方法Find方法在Recordset中總是查找匹配的第一條記錄。Find有4種查找方法:FindFirst、FindLast、FindPrevious和FindNext其語法格式如下:Recordset.Find<條件><條件>是一個指定字段與常量關(guān)系的字符串表達(dá)式例10-6:在例10-5的窗體frmRecMove上增加“查找”按鈕,使用Find方法查找記錄。10.2.6數(shù)據(jù)維護(hù) 數(shù)據(jù)維護(hù)包括對數(shù)據(jù)庫中數(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)給各字段賦值,語句賦值格式為:Data1.Recordset.Field("<字段名>")=<值>或者,在數(shù)據(jù)綁定控件中直接輸入內(nèi)容。(3)調(diào)用Update方法,確定所做的添加操作,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫入數(shù)據(jù)庫: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方法移動記錄指針確定刪除例10-7:在例10-1窗體中放置“添加”、“刪除”、“修改”、“取消”4個按鈕,通過這4個按鈕來控制記錄的增加、刪除和修改操作。本例按以下步驟設(shè)計。(1)界面設(shè)計。(2)屬性設(shè)計。(3)代碼設(shè)計。cmdAdd按鈕實(shí)現(xiàn)兩個功能:調(diào)用AddNew方法添加記錄并輸入各字段值調(diào)用Update方法并將緩沖區(qū)內(nèi)的數(shù)據(jù)寫入數(shù)據(jù)庫。 根據(jù)cmdAdd.Caption的值為“添加”或“確認(rèn)”來決定是調(diào)用AddNew方法還是Update方法,并控制其他三個按鈕的可用性。cmdDelete按鈕刪除記錄 由cmdDelete_Click事件調(diào)用delete方法實(shí)現(xiàn)。當(dāng)前記錄被刪除后,必須移動記錄指針,刷新屏幕顯示。記錄的修改首先調(diào)用Edit方法進(jìn)入記錄編輯狀態(tài)再調(diào)用Update方法保存修改后的數(shù)據(jù)。
cmdEdit_Click事件根據(jù)cmdEdit.Caption的值來調(diào)用Edit方法或Update方法,并控制其他三個按鈕的可用性。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)控件,在使用前必須將其添加到工具箱。單擊“工程\部件”菜單命令,在“部件”對話框中選擇“MicrosoftADO6.0(OLEDB)”選項(xiàng),ADOData控件就添加到工具箱(圖標(biāo)為)。例10-8:以ADOData控件數(shù)據(jù)源顯示Student_db數(shù)據(jù)庫的課程信息表C_Info的數(shù)據(jù)(1)界面設(shè)計。創(chuàng)建窗體(2)連接數(shù)據(jù)庫使用ADOData控件連接Student_db數(shù)據(jù)庫:①在窗體上建立ADOData控件adoCInfo。②顯示adoCInfo控件的“屬性頁”對話框。③在“屬性頁”對話框的“通用”選項(xiàng)卡中,選擇“使用連接字符串”選項(xiàng),單擊“生成”按鈕④在彈出的“數(shù)據(jù)鏈接屬性”對話框的“提供程序”選項(xiàng)卡的連接數(shù)據(jù)列表中選擇“MicrosoftOLEDBProviderforSQLServer”項(xiàng)⑤單擊“下一步”按鈕,在“數(shù)據(jù)鏈接屬性”對話框的“連接”選項(xiàng)卡中,選擇“2.輸入登錄服務(wù)器的信息”的“使用WindowsNT集成安全設(shè)置”選項(xiàng),并“在服務(wù)器上選擇數(shù)據(jù)庫”下拉列表框中選擇Student_db項(xiàng),如圖10.16所示,單擊“測試連接”按鈕檢測是否連接成功。⑥單擊“確定”按鈕在“屬性頁”對話框的“通用”選項(xiàng)卡的“使用連接字符串”文本框中已填充了以下字符串:Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=student_db⑦在“屬性頁”對話框的“記錄源”選項(xiàng)卡中,選擇“命令類型”下拉框的“2-adCmdTable”項(xiàng)再選擇“表或存儲過程名稱”下拉列表框的C_Info數(shù)據(jù)表,如圖10.17所示。(3)屬性設(shè)計。按圖10.13在窗體frmAdoC上放置Label和TextBox控件,其屬性值設(shè)置如表10.8所示。(4)運(yùn)行工程。10.3.2ADOData控件的屬性與方法ADOData控件的基本屬性有ConnectionString、CommandType、Recordset、RecordSource、MaxRecords、CommandTimeout等屬性。1.ConnectionString屬性ConnectionString屬性用來建立當(dāng)前應(yīng)用程序到數(shù)據(jù)源的連接信息。ConnectionString屬性涉及4個參數(shù):Provider:指定用來連接的數(shù)據(jù)提供者名稱。FileName:指定包含預(yù)先設(shè)置連接信息的特定提供者的文件名稱(例如,持久數(shù)據(jù)源對象)。RemoteProvider:指定打開客戶端連接時使用的提供者名稱。(僅限于遠(yuǎn)程數(shù)據(jù)服務(wù))。RemoteServer:指定打開客戶端連接時使用的服務(wù)器的路徑名稱。(僅限于遠(yuǎn)程數(shù)據(jù)服務(wù))。2.CommandType屬性CommandType屬性用于指定Command對象將對數(shù)據(jù)源執(zhí)行的命令的類型,也就是設(shè)置RecordSource屬性可選取的類型。有四種可選的類型adCmdUnknown:默認(rèn)值,表明RecordSource屬性為SQL語句,CommandText屬性命令未知。adCmdTable:表明RecordSource屬性為數(shù)據(jù)表名。adCmdText:表明RecordSource屬性為SQL語句。adCmdStoredProc:表明RecordSource屬性為存儲過程3.RecordSource屬性
RecordSource屬性設(shè)置一個記錄集的查詢語句或命令。它可以在“屬性頁”對話框中設(shè)置,也可直接屬性窗口中設(shè)置,其取值隨著CommandType屬性取值的不同而不同4.MaxRecords屬性
MaxRecords屬性設(shè)定從查詢中返回Recordset的最大記錄數(shù),缺省為0時表明數(shù)據(jù)提供者返回所有所需的記錄。使用MaxRecords屬性可對提供者從數(shù)據(jù)源返回的記錄數(shù)加以限制。5.UserName和Password屬性 在“屬性頁”的“身份驗(yàn)證”對話框中,可以設(shè)置UserName和Password的屬性,這在訪問受保護(hù)的數(shù)據(jù)庫時是必要的。6.CommandTimeout屬性
CommandTimeout屬性用于設(shè)置在建立一個連接時,系統(tǒng)等待的時間,以秒為單位。若在指定時間內(nèi)連接不成功,則給出錯誤信息。例10-9:使用ADOData控件在Student_db數(shù)據(jù)庫中添加、刪除、修改St_Info表的記錄。應(yīng)用程序使用4個命令按鈕控制記錄的“添加”、“刪除”、“修改”、“取消”操作。例10-7的窗體基礎(chǔ)上(1)界面設(shè)計。(2)屬性設(shè)計。(3)代碼設(shè)計。記錄的修改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語句是判斷記錄指針是否移動到記錄集的開始和結(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:要求一個學(xué)生至少從4門課程中任選2門課程學(xué)習(xí),并將選擇的結(jié)果添加到S_C_Info表中。將adoQry控件的CommandType
設(shè)置為1-adCmdText,其RecordSource屬性使用SQL查詢語句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)行綁定來顯示記錄集中的數(shù)據(jù)。另外,VisualBasic6.0還提供了一些新的成員來連接不同數(shù)據(jù)類型的數(shù)據(jù),這些控件有DataList、DataCombo、DataGrid等,它們只能與ADOData控件綁定。要使用這些控件必須先通過“工程\部件”菜單命令,在“部件”對話框中選擇“MicrosoftDataListControl6.0(OLEDB)”和“MicrosoftDataGridControl6.0(OLEDB)”選項(xiàng),單擊“確定”按鈕,就可以在VisualBasic的控件工具箱內(nèi)看見這些控件圖標(biāo)1.DataCombo和DataList控件DataList控件是一個數(shù)據(jù)綁定列表框,它可以自動地由一個附加數(shù)據(jù)源中的一個字段充填,并且可選擇地更新另一個數(shù)據(jù)源中一個相關(guān)表的一個字段。DataCombo控件的功能與DataList控件相同,以下拉列表框形式提供給用戶。DataCombo控件包含以下常用屬性:(1)BoundColumn屬性返回或設(shè)置一個Recordset對象的源字段的名稱,該Recordset對象用來為另一個Recordset提供數(shù)據(jù)值。(2)BoundText屬性返回或設(shè)置由BoundColumn屬性指定的字段的值。(3)DataBindings屬性返回DataBindings集合對象,該對象包含了有用的可綁定屬性。(4)DataChanged屬性返回或設(shè)置一個值,它指出被綁定的控件中的數(shù)據(jù)已被某進(jìn)程改變,這個進(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è)置一個數(shù)據(jù)源,通過該數(shù)據(jù)源,數(shù)據(jù)使用者被綁定到一個數(shù)據(jù)庫。(7)RowSource屬性設(shè)置一個指定ADOData控件的值,DataList控件和DataCombo控件的列表由這個ADOData控件填充。(8)ListField屬性返回或設(shè)置Recordset對象中的字段名稱,這個對象由RowSource屬性指定,用于填充DataCombo控件或DataList控件的列表部分。(9)Locked屬性返回或設(shè)置一個值,指示對象中的任何數(shù)據(jù)是否可以被修改。(10)SelectedItem屬性返回一個值,包含DataCombo控件或DataList控件中選中的記錄的書簽。(11)Style屬性返回或設(shè)置一個值,指定控件的行為或外觀。其值為0-dbcDropdownCombo(缺省值),表示DataCombo控件為下拉式組合框;其值為1-dbcSimpleCombo,表示DataCombo控件為簡單組合框;其值為2-dbcDropdownList,表示DataCombo控件為下拉列表框。例10-11:DataCombo控件使用的示例。(1)界面設(shè)計。在Form1窗體中創(chuàng)建一個ADOData控件Adodc1,如圖10.21所示。(3)代碼設(shè)計。PrivateSubDataCombo1_Click(AreaAsInteger)
txtStId=DataCombo1.BoundTextEndSub例10-12:DataCombo控件和DataList控件聯(lián)合使用示例程序。(1)界面設(shè)計。在窗體frmDataCmbLst中包含了兩個ADOData控件、一個DataCombo控件和一個DataList控件。DataCombo控件顯示表St_Info中所有班級名稱列Cl_Name的值。(3)代碼設(shè)計。當(dāng)用戶點(diǎn)擊DataCombo1時,將觸發(fā)DataCombo1_Click事件。此時,應(yīng)該通過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è)置一個數(shù)據(jù)源,通過該數(shù)據(jù)源,數(shù)據(jù)使用者被綁定到一個數(shù)據(jù)庫。在VisualBasic中,設(shè)置DataGrid控件所顯示的數(shù)據(jù)的最常用的方法是使用一個ADOData控件作為其DataSource,則重寫DataSource或刷新該ADOData控件都將改變所顯示的數(shù)據(jù)。(2)Columns數(shù)組屬性返回一個Column對象的集合。Columns數(shù)組用于存放DataGrid控件中的當(dāng)前行的數(shù)據(jù),Columns(0)存放第1個字段值,Columns(1)存放第2個字段值……例如,DataGrid1控件的數(shù)據(jù)源為Adodcl,F(xiàn)orm_Load事件觸發(fā)時將以信息對話框方式顯示第2個記錄的第2個字段值:PrivateSubForm_Load()Adodc1.Recordset.MoveNext
MsgBoxDataGrid1.Columns(1)EndSub(3)AllowAddNew、AllowDelete、AllowUpdate這三個屬性分別用于指定DataGrid控件是否可以增加、刪除和更新數(shù)據(jù)。(4)ScrollBars屬性用于設(shè)置DataGrid控件的滾動條的類型。ScrollBars屬性值可以為1、2或3,分別對應(yīng)水平、垂直或兩種滾動條。DataGrid控件包含以下常用方法:(1)ClearFields方法用于清除DataGrid控件的所有字段,恢復(fù)缺省的網(wǎng)格布局(具有兩個空白的列)。(2)Refresh方法用于刷新DataGrid控件中的數(shù)據(jù)。每次刷新后,當(dāng)前記錄是DataGrid控件中的第1個記錄。例10-13:從DataGrid控件的表格中讀取一行數(shù)據(jù)的具體內(nèi)容。(1)界面設(shè)計。創(chuàng)建窗體frmDataGrid,使用DataGrid控件顯示數(shù)據(jù),再創(chuàng)建窗體frmShowData,用來演示如何從DataGrid控件的表格中讀取一行數(shù)據(jù)的具體內(nèi)容。
(3)代碼設(shè)計。當(dāng)用戶單擊frmShowData窗體上Command1控件(退出)時,觸發(fā)其Command1_Click事件,將關(guān)閉該窗體,代碼如下:PrivateSubCommand1_Click()UnloadMeEndSub要實(shí)現(xiàn)frmDataGrid窗體的Command2按鈕的“讀取數(shù)據(jù)”功能,需在Click事件中添加以下代碼:PrivateSubCommand2_Click()'判斷是否選擇了表中的一行
IfAdodc1.Recordset.EOFOrAdodc1.Recordset.BOFThen
MsgBox"請選擇要顯示的行"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)'打開顯示數(shù)據(jù)窗口
frmShowData.Show1EndSub為了使DataGrid1控件只顯示表St_Info中的St_ID、St_Name、St_Sex、Cl_Name、TelePhone字段,在Form_Load事件中先對Adodc1控件的RecordSource屬性重新設(shè)置使其只從數(shù)據(jù)庫返回滿足條件的記錄集,代碼如下:PrivateSubForm_Load()Adodc1.RecordSource="SELECTSt_ID,St_Name,St_Sex,Cl_Name,TelePhoneFROMSt_Info"Adodc1.RefreshEndSub若想使鼠標(biāo)單擊網(wǎng)格控件DataGrid1的某一行,就自動在frmShowData窗體中顯示該行的數(shù)據(jù),則只需在DataGrid1_Click事件添加以下代碼:PrivateSubDataGrid1_Click()Command2_ClickEndSub10.4查詢數(shù)據(jù)從數(shù)據(jù)庫中獲取數(shù)據(jù)稱為查詢數(shù)據(jù),也就是從數(shù)據(jù)庫中找出滿足條件的記錄集。查詢數(shù)據(jù)通常使用SQL語言的SELECT語句來完成。例10-14:通過輸入學(xué)生學(xué)號或所在班級,查找St_Info表中符合條件的學(xué)生記錄。(1)界面設(shè)計。創(chuàng)建窗體frmAdoQuery,窗體上放置DataCombo控件來選擇St_Info表中Cl_Name字段的值,TextBox控件作為輸入學(xué)號字段St_Id的文本框,數(shù)據(jù)網(wǎng)絡(luò)控件DataGrid用于顯示查詢Recordset。該窗體運(yùn)行界面如圖10.25所示。(3)代碼設(shè)計。當(dāng)鼠標(biāo)單擊dtcClass控件時,觸發(fā)dtcClass_Click事件,代碼如下:PrivateSubdtcClass_Click(AreaAsInteger)
adoGrid.RecordSource="Select*FromSt_InfoWhereCl_Name='"&Trim(dtcClass.Text)&"'"
adoGrid.RefreshEndSub當(dāng)用戶在“學(xué)號”文本框txtSt_ID中輸入某個學(xué)生的學(xué)號時,因改變了txtSt_ID.Text屬性值而觸發(fā)txtSt_ID_Change事件,代碼如下:PrivateSubtxtSt_ID_Change()
adoGrid.RecordSource="Select*FromSt_InfoWhereSt_ID='"&Trim(txtSt_ID.Text)&"'"
adoGrid.RefreshEndSub例10-15:查詢所有學(xué)生的課程編號C_No為'9710011'的成績。這里涉及兩個表St_Info和S_C_Info,可通過SELECT命令從St_Info表中選擇St_ID、St_Name、St_Sex,從S_C_Info
表選擇
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育信息化背景下的校園電力設(shè)計探索
- 提高辦公效率實(shí)施工程師的工作管理與優(yōu)化探討
- 2025年技術(shù)成果優(yōu)先購買權(quán)協(xié)議3篇
- 實(shí)驗(yàn)室設(shè)備在提升生物廢棄物處理效率中的運(yùn)用
- 教育科技在家庭情商培養(yǎng)中的作用
- 12《我們小點(diǎn)兒聲》(說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治二年級下冊
- Unit 1 People of Achievement Reading and Thinking說課稿-2024-2025學(xué)年高二英語人教版(2019)選擇性必修第一冊
- 2025年度銷售精英獎杯定制采購協(xié)議3篇
- Unit 4 Wrapping Up the Topic Review 說課稿 -2024-2025學(xué)年仁愛科普版(2024)七年級英語上冊
- 2025年度高端商品房退房退款保障合同3篇
- 冬春季呼吸道傳染病防控
- 中介費(fèi)合同范本(2025年)
- 《kdigo專家共識:補(bǔ)體系統(tǒng)在腎臟疾病的作用》解讀
- 生產(chǎn)調(diào)度員崗位面試題及答案(經(jīng)典版)
- 【物 理】2024-2025學(xué)年八年級上冊物理寒假作業(yè)人教版
- 交通運(yùn)輸安全生產(chǎn)管理規(guī)范
- 電力行業(yè) 電力施工組織設(shè)計(施工方案)
- 2024年計算機(jī)二級WPS考試題庫380題(含答案)
- 集團(tuán)總裁崗位說明書
- 中醫(yī)藥膳學(xué)課件
- 教科版二年級下冊科學(xué)第一單元測試卷(含答案)
評論
0/150
提交評論