版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VB數(shù)據(jù)庫編程技術(shù)一ODBC概述在傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)中,每個數(shù)據(jù)庫管理系統(tǒng)都有自己的應(yīng)用程序開發(fā)接口(API),為了解決此問題,微軟公司開發(fā)了ODBC(OpenDataBaseConnectivity,即開放數(shù)據(jù)庫互連)。ODBC是一套開放數(shù)據(jù)庫系統(tǒng)應(yīng)用程序接口規(guī)范,目前它已成為一種工業(yè)標(biāo)準(zhǔn),它提供了統(tǒng)一的數(shù)據(jù)庫應(yīng)用編程接口(API),為應(yīng)用程序提供了一套高層調(diào)用接口規(guī)范和基于動態(tài)連接庫的運(yùn)行支持環(huán)境。使用ODBC開發(fā)數(shù)據(jù)庫應(yīng)用時,應(yīng)用程序調(diào)用的是標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語句,屏蔽了DBMS之間的差異,數(shù)據(jù)庫底層操作由各個數(shù)據(jù)庫的驅(qū)動程序完成。因此應(yīng)用程序有很好的適應(yīng)性和可移植性,并且具備
2、了同時訪問多種數(shù)據(jù)庫管理系統(tǒng)的能力,從而徹底克服了傳統(tǒng)數(shù)據(jù)庫應(yīng)用程序的缺陷。主要任務(wù)包括:建立與數(shù)據(jù)源的連接;向數(shù)據(jù)源發(fā)送SQL請求;斷開與數(shù)據(jù)源的連接數(shù)據(jù)源數(shù)據(jù)源是指任一種可以通過ODBC連接的數(shù)據(jù)庫管理系統(tǒng),它包括要訪問的數(shù)據(jù)庫和數(shù)據(jù)庫的運(yùn)行平臺。數(shù)據(jù)源名掩蓋了數(shù)據(jù)庫服務(wù)器或數(shù)據(jù)庫文件間的差別,通過定義多個數(shù)據(jù)源,每個數(shù)據(jù)源指向一個服務(wù)器名,就可在應(yīng)用程序中實(shí)現(xiàn)同時訪問多個DBMS的目的。數(shù)據(jù)源(DataSourceName,簡稱DSN)是驅(qū)動程序與DBS連接的橋梁,數(shù)據(jù)源不是DBS,而是用于表達(dá)一個ODBC驅(qū)動程序和DBMS特殊連接的命名。在連接中,用數(shù)據(jù)源名來代表用戶名、服務(wù)器名、所連
3、接的數(shù)據(jù)庫名等,可以將數(shù)據(jù)源名看成是與一個具體數(shù)據(jù)庫建立的連接。數(shù)據(jù)源分為以下三類:(1) 用戶數(shù)據(jù)源:用戶創(chuàng)建的數(shù)據(jù)源,稱為用戶數(shù)據(jù)源”。此時只有創(chuàng)建者才能使用,并且只能在所定義的機(jī)器上運(yùn)行。任何用戶都不能使用其他用戶創(chuàng)建的用戶數(shù)據(jù)源。(2) 系統(tǒng)數(shù)據(jù)源:所有用戶和在WindowsNT下以服務(wù)方式運(yùn)行的應(yīng)用程序均可使用系統(tǒng)數(shù)據(jù)源。文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶,ODB®動程序也安裝在用戶的計(jì)算機(jī)上。(與機(jī)器無關(guān)):、SQL語言基礎(chǔ)創(chuàng)建表格SQL語言中的createtable語句被用來建立新的數(shù)據(jù)庫表格。Createtable語句的使用
4、格式如下:createtabletablename(column1datatype,column2datatype,column3datatype);如果用戶希望在建立新表格時規(guī)定列的限制條件,可以使用可選的條件選項(xiàng):createtabletablename(column1datatypeconstraint,column2datatypeconstraint,column3datatypeconstraint);舉例如下:createtableemployee(firstnamevarchar(15),lastnamevarchar(20),agenumber(3),addressvarch
5、ar(30),cityvarchar(20);簡單來說,創(chuàng)建新表格時,在關(guān)鍵詞createtable后面加入所要建立的表格的名稱,然后在括號內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的SQL語句在結(jié)尾處都要使用“;”符號。使用SQL語句創(chuàng)建的數(shù)據(jù)庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數(shù)字或下劃線,名稱的長度不能超過30個字符。注意,用戶在選擇表格名稱時不要使用SQL語言中的保留關(guān)鍵詞,如select,create,insert等,作為表格或列的名稱。數(shù)據(jù)類型用來設(shè)定某一個具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar或char的數(shù)據(jù)類型,而不
6、能使用number的數(shù)據(jù)類型。SQL語言中較為常用的數(shù)據(jù)類型為:char(size):固定長度字符串,其中括號中的size用來設(shè)定字符串的最大長度。Char類型的最大長度為255字節(jié)。varchar(size):可變長度字符串,最大長度由size設(shè)定。number(size):數(shù)字類型,其中數(shù)字的最大位數(shù)由size設(shè)定。Date:日期類型。number(size,d):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于設(shè)定該數(shù)字在小數(shù)點(diǎn)后的位數(shù)。最后,在創(chuàng)建新表格時需要注意的一點(diǎn)就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù)時所必須遵守的規(guī)則。例如,unique這一限制條件要求某
7、一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。除unique之夕卜,較為常用的列的限制條件還包括notnull和primarykey等。Notnull用來規(guī)定表格中某一列的值不能為空。Primarykey則為表格中的所有記錄規(guī)定了唯一的標(biāo)識符。查詢簡單的SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。完整結(jié)構(gòu):SelectAll/Distinct<目標(biāo)表達(dá)式><目標(biāo)表達(dá)式>-From表名>,表名>-Where條件表達(dá)式>Groupby列名1>Having條件表達(dá)式>
8、Orderby列名2>Asc/DescGroupby:按列名1的值進(jìn)行分組,屬性值相等的為一個組,如果帶Having短句,表示只有滿足指定條件的才輸出。例如,下面的語句查詢testtable表中姓名為張三"的nickname字段和email字段。SELECTnickname,emailFROMtesttableWHEREname='張三'選擇列表選擇列表(select_list)指出所查詢列,它可以是一組列名列表、星號、表達(dá)式、變量(包括局部變量和全局變量)等構(gòu)成。1、選擇所有列例如,下面語句顯示testtable表中所有列的數(shù)據(jù):SELECT*FROMtest
9、table2、選擇部分列并指定它們的顯示次序查詢結(jié)果集合中數(shù)據(jù)的排列順序與選擇列表中所指定的列名排列順序相同。例如:SELECTnickname,emailFROMtesttable3、更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。定義格式為:列標(biāo)題=列名列名列標(biāo)題如果指定的列標(biāo)題不是標(biāo)準(zhǔn)的標(biāo)識符格式時,應(yīng)使用引號定界符,例如,下列語句使用漢字顯示列標(biāo)題:SELECT昵稱=nickname,電子郵件=emailFROMtesttable4、刪除重復(fù)行SELECT語句中使用ALL或DISTINCT選項(xiàng)來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為ALL。使用DISTINCT選項(xiàng)時,對于所有
10、重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。5、限制返回的行數(shù)使用TOPnPERCENT選項(xiàng)限制返回的數(shù)據(jù)行數(shù),TOPn說明返回n行,而TOPnPERCENT時,說明n是表示一百分?jǐn)?shù),指定返回的行數(shù)等于總行數(shù)的百分之幾。例如:SELECTTOP2*FROMtesttableSELECTTOP20PERCENT*FROMtesttable(二)FROM子句FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對象名限定這些列所屬的表或視圖。例如
11、在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應(yīng)使用下面語句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名as別名表名別名(二)FROM子句FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個表或視圖,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,如果選擇列表中存在同名列,這時應(yīng)使用對
12、象名限定這些列所屬的表或視圖。例如在usertable和citytable表中同時存在cityid列,在查詢兩個表中的cityid時應(yīng)使用下面語句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下兩種格式為表或視圖指定別名:表名as別名表名別名例如上面語句可用表的別名格式表示為:SELECTusername,b.cityidFROMusertablea,citytablebWHEREa.cityid=b.cityidSELE
13、CT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(shù)據(jù)。例如:SELECTa.au_fname+a.au_lnameFROMauthorsa,titleauthorta(SELECTtitle_id,titleFROMtitlesWHEREytd_sales10000)AStWHEREa.au_id=ta.au_idANDta.title_id=t.title_id此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再從中檢索數(shù)據(jù)。(三)使用WHERE子句設(shè)置查詢條件WHERE子句設(shè)置查詢條件,過濾掉不需要的數(shù)據(jù)行。例如下面語句查詢年齡大于20的數(shù)據(jù):SELECT*
14、FROMusertableWHEREage20WHERE子句可包括各種條件運(yùn)算符:比較運(yùn)算符(大小比較):、=、=、=、!、!范圍運(yùn)算符(表達(dá)式值是否在指定的范圍):BETWEENANSNOTBETWEEN-AND列表運(yùn)算符(判斷表達(dá)式是否為列表中的指定項(xiàng)):IN(項(xiàng)1,項(xiàng)2)NOTIN(項(xiàng)1,項(xiàng)2)模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOTLIKE空值判斷符(判斷表達(dá)式是否為空):ISNULL、NOTISNULL邏輯運(yùn)算符(用于多條件的邏輯連接):NOT、AND、OR1、范圍運(yùn)算符例:ageBETWEEN10AND30相當(dāng)于age=10ANDage=302、列表運(yùn)算符
15、例:countryIN('Germany','China')3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等類型查詢??墒褂靡韵峦ㄅ渥址喊俜痔?可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即%。下劃線:匹配單個任意字符,它常用來限制表達(dá)式的字符長度。方括號:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。人:其取值也相同,但它要求所匹配對象為指定字符以外的任一個字符。例如:限制以Publishing結(jié)尾,使用LI
16、KE'%Publishing'限制以A開頭:LIKE'A%'限制以A開頭外:LIKE'AA%'4、空值判斷符例WHEREageISNULL5、邏輯運(yùn)算符:優(yōu)先級為NOT、AND、OR查詢結(jié)果排序使用ORDERBY子句對查詢返回的結(jié)果按一列或多列排序。ORDERBY子句的語法格式為:ORDERBYcolumn_nameASC|DESC,-n其中ASC表示升序,為默認(rèn)值,DESC為降序。ORDERBY不能按ntext、text和image數(shù)據(jù)類型進(jìn)行排序。例如:SELECT*FROMusertableORDERBYagedesc,useridASC另
17、外,可以根據(jù)表達(dá)式進(jìn)行排序。向表格中插入數(shù)據(jù)SQL語言使用insert語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。Insert語句的使用格式如下:insertintotablename(first_column,.last_column)values(first_value,.last_value);例如:insertintoemployee(firstname,lastname,age,address,city)values(Li',Ming',45,No.77ChanganRoad',Beijing");簡單來說,當(dāng)向數(shù)據(jù)庫表格中添加新記錄時,在關(guān)鍵詞inse
18、rtinto后面輸入所要添加的表格名稱,然后在括號中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語言使用update語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update語句的格式為:updatetablenamesetcolumnname=newvalue,nextcolumn=newvalue2.wherecolumnnameOPERATORvalueand|orcolumnOPERATORvalue;例如:updateemployeesetage=age+1wherefirst_name=Mary'an
19、dlast_name=Williams'使用update語句時,關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的where條件從句。刪除記錄SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的格式為:deletefromtablenamewherecolumnnameOPERATORvalueand|orcolumnOPERATORvalue;例如:deletefromemployeewherelastname=May;簡單來說,當(dāng)需要刪除某一行或某個記錄時,在deletefrom關(guān)鍵詞之后輸入表格名稱,然后在where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用del
20、ete語句時不設(shè)定where從句,則表格中的所有記錄將全部被刪除。刪除數(shù)據(jù)庫表格在SQL語言中使用droptable命令刪除某個表格以及該表格中的所有記錄。Droptable命令的使用格式為:droptabletablename;例如:droptableemployee;如果用戶希望將某個數(shù)據(jù)庫表格完全刪除,只需要在droptable命令后輸入希望刪除的表格名稱即可。Droptable命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會改變。而使用droptable命令則會將整個數(shù)據(jù)庫表格的所有信息全部刪除。1.1 三、數(shù)據(jù)控件1、ADO數(shù)據(jù)控
21、件ADO對象模型ADO(ActiveXDataObject)數(shù)據(jù)訪問接口是Microsoft處理數(shù)據(jù)庫信息的最新技術(shù)。它是一種ActiveX對象,采用了被稱為OLEDB的數(shù)據(jù)訪問模式,是數(shù)據(jù)訪問對象DAO、遠(yuǎn)程數(shù)據(jù)對象RDO和開放數(shù)據(jù)庫互連ODBC三種方式的擴(kuò)展。ADO對象模型定義了一個可編程的分層對象集合,主要由三個對象成員Connection、Command和Recordset對象,以及幾個集合對象Errors、Parameters和Fields等所組成。圖9.13示意了這些對象之間的關(guān)系。表9.6是對這些對象的分工描述。圖9.13ADO對象模型表9.6ADO對象描述對象名描述Connec
22、tion連接數(shù)據(jù)來源Command從數(shù)據(jù)源獲取所需數(shù)據(jù)的命令信息Recordset所獲得的一組記錄組成的記錄集Error在訪問數(shù)據(jù)時,由數(shù)據(jù)源所返回的錯誤信息Parameter與命令對象有關(guān)的參數(shù)Field包含了記錄集中某個字段的信息要想在程序中使用ADO對象,必須先為當(dāng)前工程引用ADO的對象庫。引用方式是執(zhí)行工程”菜單的引用"命令,啟動引用對話框,在清單中選取aMicrosoftActiveXDataObjects2.0Library選項(xiàng)。1.2使用ADO數(shù)據(jù)控件在使用ADO數(shù)據(jù)控件前,必須先通過攵程|部件”菜單命令選擇"MicrosoftADODataControl6.
23、0(OLEDB)”選項(xiàng),將ADO數(shù)據(jù)控件添加到工具箱。ADO數(shù)據(jù)控件與VisualBasic的內(nèi)部Data控件很相似,它允許使用ADO數(shù)據(jù)控件的基本屬性快速地創(chuàng)建與數(shù)據(jù)庫的連接。1.ADCa據(jù)控件的基本屬性(1) ConnectionString屬性ADO控件沒有DatabaseName屬性,它使用Connectionstring屬性與數(shù)據(jù)庫建立連接。該屬性包含了用于與數(shù)據(jù)源建立連接的相關(guān)信息,Connectionstring屬性帶有4個參數(shù),如表9.7所示。(2) RecordSource屬性RecordSource確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以
24、是數(shù)據(jù)庫中的單個表名,一個存儲查詢,也可以是使用SQL查詢語言的一個查詢字符串。表9.7Connectionstring屬性參數(shù)參數(shù)描述Provide指定數(shù)據(jù)源的名稱指定數(shù)據(jù)源所對應(yīng)的文件名RemoteProvide在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開一個客戶端時所用的數(shù)據(jù)源名稱RemoteServer在遠(yuǎn)程數(shù)據(jù)服務(wù)器打開一個主機(jī)端時所用的數(shù)據(jù)源名稱(3) ConnectionTimeout屬性用于數(shù)據(jù)連接的超時設(shè)置,若在指定時間內(nèi)連接不成功顯示超時信息。(4) MaxRecords屬性定義從一個查詢中最多能返回的記錄數(shù)。2. ADO數(shù)據(jù)控件的方法和事件ADO數(shù)據(jù)控件的方法和事件與Data控件的方法和事件完全
25、一樣。3.設(shè)置ADO數(shù)據(jù)控件的屬性下面通過使用ADO數(shù)據(jù)控件連接Student.mdb數(shù)據(jù)庫來說明ADO數(shù)據(jù)控件屬性的設(shè)置。步驟1:在窗體上放置ADO數(shù)據(jù)控件,控件名采用默認(rèn)名“Adodcl?!辈襟E2:單擊ADO控件屬性窗口中的ConnectionString屬性右邊的“'按鈕,彈出屬性頁”對話框。在該對話框中允許通過三種不同的方式連接數(shù)據(jù)源:使用連接字符串”只需要單擊生成”按鈕,通過選項(xiàng)設(shè)置自動產(chǎn)生連接字符串。使用DataLink文件”表示通過一個連接文件來完成。使用ODBC數(shù)據(jù)資源名稱”可以通過下拉式列表框,選擇某個創(chuàng)建好的數(shù)據(jù)源名稱(DSN),作為數(shù)據(jù)來源對遠(yuǎn)程數(shù)據(jù)庫進(jìn)行控制。步
26、驟3:采用使用連接字符串”方式連接數(shù)據(jù)源。單擊生成”按鈕,打開數(shù)據(jù)鏈接屬性”對話框。在提供者"選項(xiàng)卡內(nèi)選擇一個合適的OLEDB數(shù)據(jù)源,Student.mdb是Access數(shù)據(jù)庫,選擇aMicrosoftJet3.51OLEDBProvider選項(xiàng)。然后單擊下一步”按鈕或打開連接”選項(xiàng)卡,在對話框內(nèi)指定數(shù)據(jù)庫文件,這里為Student.mdbo為保證連接有效,可單擊連接”選項(xiàng)卡右下方的測試連接”按鈕,如果測試成功則關(guān)閉ConnectionString屬性頁。步驟4:單擊ADO控件屬性窗口中的RecordSource屬性右邊的“按鈕,彈出記錄源屬性頁對話框。在命令類型”下拉式列表框中選擇
27、"2adCmdTable選項(xiàng),在表或存儲過程名稱”下拉式列表框中選擇Student.mdb數(shù)據(jù)庫中的基本情況”表,關(guān)閉記錄源屬性頁。此時,已完成了ADO數(shù)據(jù)控件的連接工作。由于ADO數(shù)據(jù)控件是一個ActiveX控件,也可以用鼠標(biāo)右鍵單擊ADO數(shù)據(jù)控件,在彈出的快捷菜單中選擇“ADODC屬性”菜單命令,打開ADO數(shù)據(jù)控件屬性頁對話框,一次完成步驟1步驟4的全部設(shè)置。1.3ADO數(shù)據(jù)控件上新增綁定控件的使用隨著ADO對象模型的引入,VisualBasic6.0除了保留以往的一些綁定控件外,又提供了一些新的成員來連接不同數(shù)據(jù)類型的數(shù)據(jù)。這些新成員主要有DataGrid、DataCombo、
28、DataList>DataReport、MSHFlexGrid、MSChart控件和MonthView等控件。這些新增綁定控件必須使用ADO數(shù)據(jù)控件進(jìn)行綁定。VisualBasic6.0在綁定控件上不僅對DataSource和DataField屬性在連接功能上作了改進(jìn),又增加了DataMember與DataFormat屬性使數(shù)據(jù)訪問的隊(duì)列更加完整。DataMember屬性允許處理多個數(shù)據(jù)集,DataFormat屬性用于指定數(shù)據(jù)內(nèi)容的顯示格式。例9.6使用ADO數(shù)據(jù)控件和DataGrid數(shù)據(jù)網(wǎng)格控件瀏覽數(shù)據(jù)庫Student.mdb,并使之具有編輯功能。在窗體上放置ADO數(shù)據(jù)控件,并按前面介
29、紹的ADO數(shù)據(jù)控件屬性設(shè)置過程連接數(shù)據(jù)庫Student.mdb中的基本情況表。DataGrid控件允許用戶同時瀏覽或修改多個記錄的數(shù)據(jù)。在使用DataGrid控件前也必須先通過工程|部件”菜單命令選擇“MicrosoftDataGridControl6.0(OLEDB)”選項(xiàng),將DataGrid控件添加到工具箱,再將DataGrid控件放置到窗體上。設(shè)置DataGrid網(wǎng)格控件的DataSource屬性為Adodc1,就可將DataGrid1綁定到數(shù)據(jù)控件Adodc1上。顯示在DataGrid網(wǎng)格內(nèi)的記錄集,可以通過DataGrid控件的AllowAddNew、AllowDelete和Allo
30、wUpdate屬性設(shè)置控制增,刪、改操作。如果要改變DataGrid網(wǎng)格上顯示的字段,可用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇檢索字段”選項(xiàng)。VisualBasic提示是否替換現(xiàn)有的網(wǎng)格布局,單擊是”按鈕就可將表中的字段裝載到DataGrid控件中。再次用鼠標(biāo)右鍵單擊DataGrid控件,在彈出的快捷菜單中選擇編輯”選項(xiàng),進(jìn)入數(shù)據(jù)網(wǎng)格字段布局的編輯狀態(tài),此時,當(dāng)鼠標(biāo)指在字段名上時,鼠標(biāo)指針變成黑色向下箭頭。用鼠標(biāo)右鍵單擊需要修改的字段名,在彈出的快捷菜單中選擇刪除”選項(xiàng),就可從DataGrid控件中刪除該字段,也可選擇屬性”選項(xiàng)修改字段的顯示寬度或字段標(biāo)題。圖9.14所示為
31、具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定。標(biāo)有號的記錄行表示允許增加新記錄。圖9.14具有增、刪、改功能的數(shù)據(jù)網(wǎng)格綁定2、Data控件Data控件是VisualBasic訪問數(shù)據(jù)庫的一種利器,它能夠利用三種Recordset對象來訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)控件提供有限的不需編程而能訪問現(xiàn)存數(shù)據(jù)庫的功能,允許將VisualBasic的窗體與數(shù)據(jù)庫方便地進(jìn)行連接。要利用數(shù)據(jù)控件返回?cái)?shù)據(jù)庫中記錄的集合,應(yīng)先在窗體上畫出控件,再通過它的三個基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問的數(shù)據(jù)資源。2.1 Data控件屬性1. Connect屬性Connect屬性指定數(shù)據(jù)控件
32、所要連接的數(shù)據(jù)庫類型,VisualBasic默認(rèn)的數(shù)據(jù)庫是Access的MDB文件,此外,也可連接DBF、XLS、ODBC等類型的數(shù)據(jù)庫。2. DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫文件名,包括所有的路徑名。如果連接的是單表數(shù)據(jù)庫,則DatabaseName屬性應(yīng)設(shè)置為數(shù)據(jù)庫文件所在的子目錄名,而具體文件名放在RecordSource屬性中。例如,要連接一個MicrosoftAccess的數(shù)據(jù)庫C:Student.mdb,則設(shè)置DatabaseName'CStudent.mdb",Access數(shù)據(jù)庫的所有表都包含在一個MDB文件中。如果連
33、接一個FoxPro數(shù)據(jù)庫如C:VB6stu_fox.dbf,則DatabaseName=C:VB6,RecordSource="stu_fox.dbf,"stu_fox數(shù)據(jù)庫只含有一個表。3. RecordSource屬性RecordSource確定具體可訪問的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個表名,一個存儲查詢,也可以是使用SQL查詢語言的一個查詢字符串。例如,要指定Student.mdb數(shù)據(jù)庫中的基本情況表,則RecordSource="基本情況”。而RecordSource="SelecFrom基本情況Wh
34、ere專業(yè)='物理,”則表示要訪問基本情況表中所有物理系學(xué)生的數(shù)據(jù)。4. RecordType屬性RecordType屬性確定記錄集類型。5. EofAction和BofAction屬性當(dāng)記錄指針指向Recordset對象的開始(第一個記錄前)或結(jié)束(最后一個記錄后)時,數(shù)據(jù)控件的EofAction和BofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。屬性的取值如表9.1所示。表9.1EofAction和BofAction屬性屬性取值操作BofAction0控件重定位到第一個記錄1移過記錄集開始位,定位到一個無效記錄,觸發(fā)數(shù)據(jù)控件對第一個記錄的無效事件ValidateEof
35、Action0控件重定位到最后一個記錄1移過記錄集結(jié)束位,定位到一個無效記錄,觸發(fā)數(shù)據(jù)控件對最后一個記錄的無效事件Validate2向記錄集加入新的空記錄,可以對新記錄進(jìn)行編輯,移動記錄指針,新記錄寫入數(shù)據(jù)庫在VisualBasic中,數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過能與它綁定的控件來實(shí)現(xiàn)。可與數(shù)據(jù)控件綁定的控件對象有文本框、標(biāo)簽、圖像框、圖形框、列表框、組合框、復(fù)選框、網(wǎng)格、DB列表框、DB組合框、DB網(wǎng)格和OLE容器等控件。要使綁定控件能被數(shù)據(jù)庫約束,必需在設(shè)計(jì)或運(yùn)行時對這些控件的兩個屬性進(jìn)行設(shè)置:(1) DataSource屬性DataSource屬性通過指定一個有效的數(shù)
36、據(jù)控件連接到一個數(shù)據(jù)庫上。(2) DataField屬性DataField屬性設(shè)置數(shù)據(jù)庫有效的字段與綁定控件建立聯(lián)系。綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系如圖9.7所示。綁定控件圖9.7綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系當(dāng)上述控件與數(shù)據(jù)控件綁定后,VisualBasic將當(dāng)前記錄的字段值賦給控件。如果修改了綁定控件內(nèi)的數(shù)據(jù),只要移動記錄指針,修改后的數(shù)據(jù)會自動寫入數(shù)據(jù)庫。數(shù)據(jù)控件在裝入數(shù)據(jù)庫時,它把記錄集的第一個記錄作為當(dāng)前記錄。當(dāng)數(shù)據(jù)控件的BofAction屬性值設(shè)置為2時,當(dāng)記錄指針移過記錄集結(jié)束位,數(shù)據(jù)控件會自動向記錄集加入新的空記錄。例9.1建立student.mdb數(shù)據(jù)庫,它包含兩
37、個表:基本情況"表和學(xué)生成績表”。參見表9.2和表9.3。表9.2學(xué)生基本情況表結(jié)構(gòu)字段名類型寬度學(xué)號Text6姓名Text10性別Text2專業(yè)Text10出生年月Date8照片Binary0表9.3學(xué)生成績表結(jié)構(gòu)字段名類型寬度學(xué)號Text6課程Text10成績Long4學(xué)期Text2用可視化數(shù)據(jù)管理器建立以上設(shè)計(jì)的數(shù)據(jù)庫及其表,表中數(shù)據(jù)可自行錄入。例9.2設(shè)計(jì)一個窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容?;厩闆r表包含了6個字段,故需要用6個綁定控件與之對應(yīng)。這里用一個圖形框顯示照片和5個文本框顯示學(xué)號、姓名等數(shù)據(jù)。本例中不需要編寫任何代碼,具體操作步驟如
38、下:參考如圖9.8所示窗體,在窗體上放置1個數(shù)據(jù)控件,一個圖形框、5個文本框和5個標(biāo)簽控件。5個標(biāo)簽控件分別給出相關(guān)的提示說明。圖9.8顯示Student.mdb基本情況表的數(shù)據(jù)(1) 將數(shù)據(jù)控件Datal的Connect屬性指定為Access類型,DatabaseName屬性連接數(shù)據(jù)庫Student.mdb,RecordSource屬性設(shè)置為基本情況"表。圖形框和5個文本框控件Text1Text5的DataSource屬性都設(shè)置成Data1。通過單擊這些綁定控件的DataField屬性上的“'按鈕,將下拉出基本情況表所含的全部字段,分別選擇與其對應(yīng)的字段照片、學(xué)號、姓名、性
39、別、專業(yè)和出生年月,使之建立約束關(guān)系。運(yùn)行該工程即可出現(xiàn)圖9.8所示效果。5個文本框分別顯示基本情況表內(nèi)的字段:學(xué)號、姓名、性別、專業(yè)和出生年月的內(nèi)容,圖形框顯示每個學(xué)生的照片。使用數(shù)據(jù)控件對象的4個箭頭按鈕可遍歷整個記錄集中的記錄。單擊最左邊的按鈕顯示第l條記錄;單擊其旁邊的按鈕顯示上一條記錄;單擊最右邊的按鈕顯示最后一條記錄;單擊其旁邊的按鈕顯示下一條記錄。數(shù)據(jù)控件除了可以瀏覽Recordset對象中的記錄外,同時還可以編輯數(shù)據(jù)。如果改變了某個字段的值,只要移動記錄,這時所作的改變存入數(shù)據(jù)庫中。VisualBasic6.0提供了幾個比較復(fù)雜的網(wǎng)格控件,幾乎不用編寫代碼就可以實(shí)現(xiàn)多條記錄數(shù)據(jù)
40、顯示。當(dāng)把數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個Data控件時,網(wǎng)格控件會被自動地填充,并且其列標(biāo)題會用Data控件的記錄集里的數(shù)據(jù)自動地設(shè)置。2.2 data控件與MsFlexGrid控件結(jié)合顯示數(shù)據(jù)庫中信息例9.3用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。MsFlexGrid控件不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開發(fā)環(huán)境中選擇工程|部件”菜單命令,并在隨即出現(xiàn)的對話框中選擇"MicrosoftFlexGridControl6.0選項(xiàng),將其添加到工具箱中。本例所用控件的屬性設(shè)置如表9.4所示。請讀者自行比較不可
41、卷動列屬性FixedCols=0與FixedCols=1的區(qū)別。Form啟動后自動顯示如圖9.9所示窗口。表9.4控件屬性默認(rèn)控件名其它屬性設(shè)置Data1DatabaseName="cstudent.mdb”RecordsetType=0RecordSource=基本情況”MSFlexGrid1DataSource=Data1FixCols=0Jn|2d學(xué)號性別出生年月010001李姓狒1983-12-23010010010014丁保民19337-14格II格蜉定到數(shù)搖庠020011林敏紅女機(jī)電1993-10-111nninn?*iqno-1-R1982-12-30020003n
42、177;n圖9.9使用數(shù)據(jù)網(wǎng)格控件2.3數(shù)據(jù)控件的常用方法數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問這些屬性。1. Refresh方法如果在設(shè)計(jì)狀態(tài)沒有為打開數(shù)據(jù)庫控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時被改變后,必須使用數(shù)據(jù)控件的Refresh方法激活這些變化。在多用戶環(huán)境下,當(dāng)其他用戶同時訪問同一數(shù)據(jù)庫和表時,Refresh方法將使各用戶對數(shù)據(jù)庫的操作有效。例如:將例9.2的設(shè)計(jì)參數(shù)改用代碼實(shí)現(xiàn),使所連接數(shù)據(jù)庫所在的文件夾可隨程序而變化:PrivateSubForm_Load()DimmpathAsStringMpath=App.Path'獲取當(dāng)前
43、路徑IfRight(mpath,1)<>"/"Thenmpath=mpath+"/"Data1.DatabaseName=mpath+"Student.mdb"'連接數(shù)據(jù)庫Data1.RecordSource=基本情況”'構(gòu)成記錄集對象Data1.Refresh'激活數(shù)據(jù)控件EndSub2. UpdateControls方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用UpdateControls方法終止用戶對綁定控件內(nèi)數(shù)據(jù)的修改。例如:將代碼Da
44、ta1.UpdateControts放在一個命令按鈕的Click事件中,就可以實(shí)現(xiàn)對記錄修改的功能。3. UpdateRecord方法當(dāng)對綁定控件內(nèi)的數(shù)據(jù)修改后,數(shù)據(jù)控件需要移動記錄集的指針才能保存修改。如果使用UpdateRecord方法,可強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫入到數(shù)據(jù)庫中,而不再觸發(fā)Validate事件。在代碼中可以用該方法來確認(rèn)修改。2.4記錄集的屬性與方法由RecordSource確定的具體可訪問的數(shù)據(jù)構(gòu)成的記錄集Recordset也是一個對象,因而,它和其他對象一樣具有屬性和方法。下面列出記錄集常用的屬性和方法。1. AbsolutePosition屬性AbsoluteP
45、osition返回當(dāng)前指針值,如果是第1條記錄,其值為0,該屬性為只讀屬性。2. Bof和Eof的屬性Bof判定記錄指針是否在首記錄之前,若Bof為True,則當(dāng)前位置位于記錄集的第1條記錄之前。與此類似,Eof判定記錄指針是否在末記錄之后。3. Bookmark屬性Bookmark屬性的值采用字符串類型,用于設(shè)置或返回當(dāng)前指針的標(biāo)簽。在程序中可以使用Bookmark屬性重定位記錄集的指針,但不能使用AbsolutePostion屬性。4. Nomatch屬性在記錄集中進(jìn)行查找時,如果找到相匹配的記錄,則Recordset的NoMatch屬性為False,否則為True。該屬性常與Bookma
46、rk屬性一起使用。5. RecordCount屬性RecordCount屬性對Recordset對象中的記錄計(jì)數(shù),該屬性為只讀屬性。在多用戶環(huán)境下,RecordCount屬性值可能不準(zhǔn)確,為了獲得準(zhǔn)確值,在讀取RecordCount屬性值之前,可使用MoveLast方法將記錄指針移至最后一條記錄上。6. Move方法使用Move方法可代替對數(shù)據(jù)控件對象的4個箭頭按鈕的操作遍歷整個記錄集。5種Move方法是:(1) MoveFirst方法:移至第1條記錄。(2) MoveLast方法:移至最后一條記錄。(3) MoveNext方法:移至下一條記錄。(4) MovePrevious方法:移至上一條
47、記錄。(5) Moven方法:向前或向后移n條記錄,n為指定的數(shù)值。例9.4在窗體上用4個命令按鈕代替例9.2數(shù)據(jù)控件對象的4個箭頭按鈕的操作。在例9.2的基礎(chǔ)上,窗體上增加4個命令按鈕,將數(shù)據(jù)控件的Visible屬性設(shè)置為False,如圖9.10所示。通過對4個命令按鈕的編程代替對數(shù)據(jù)控件對象的4個箭頭按鈕的操作。圖9.10用按鈕代替數(shù)據(jù)控件對象的箭頭按鈕命令按鈕Command1_Click事件移至第1條記錄,代碼如下:PrivateSubCommand1_Click()Datal.Recordset.MoveFirstEndSub命令按鈕Command4_Click事件移至最后一條記錄,代
48、碼如下:PrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSub另外兩個按鈕的代碼需要考慮Recordset對象的邊界的首尾,如果越界,則用MoveFirst方法定位到第1條記錄或用MoveLast方法定位到最后一條記錄。程序代碼如下:PrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThenData1.Recordset.MoveFirstEndSubPrivateSubCommand3_Click()Data1.Recordset.Mo
49、veNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub7. Find方法使用Find方法可在指定的Dynaset或Snapshot類型的Recordset對象中查找與指定條件相符的一條記錄,并使之成為當(dāng)前記錄。4種Find方法是:(1) FindFirst方法:從記錄集的開始查找滿足條件的第1條記錄。(2) FindLast方法:從記錄集的尾部向前查找滿足條件的第l條記錄。(3) FindNext方法:從當(dāng)前記錄開始查找滿足條件的下一條記錄。(4) FindPrevious方法:從當(dāng)前記錄開始查找滿足條件的上一條記錄。4種Fi
50、nd方法的語法格式相同:數(shù)據(jù)集合.Find方法條件搜索條件是一個指定字段與常量關(guān)系的字符串表達(dá)式。在構(gòu)造表達(dá)式時,除了用普通的關(guān)系運(yùn)算外,還可以用Like運(yùn)算符。例如:語句"Data1.Recordset.FindFirst專業(yè)='物理表示在由Data1數(shù)據(jù)控件所連接的數(shù)據(jù)庫Student.mdb的記錄集內(nèi)查找專業(yè)為物理"的第l條記錄。這里,專業(yè)"為數(shù)據(jù)庫Student記錄集中的字段名,在該字段中存放專業(yè)名稱信息。要想查找下一條符合條件的記錄,可繼續(xù)使用語句:"Data1.Recordset.FindNext專業(yè)='物理':
51、9;又例如:要在記錄集內(nèi)查找專業(yè)名稱中帶有建”字的專業(yè):Data1.Recordset.FindFirst專業(yè)Like'建*"字符串“建*”匹配字段專業(yè)中帶有建”字字樣的所有專業(yè)名稱字符串。需要指出的是Find方法在找不到相匹配的記錄時,當(dāng)前記錄保持在查找的始發(fā)處,NoMatch屬性為True。如果Find方法找到相匹配的記錄,則記錄定位到該記錄,Recordset的NoMatch屬性為False。8. Seek方法使用Seek方法必須打開表的索引,它在Table表中查找與指定索引規(guī)則相符的第1條記錄,并使之成為當(dāng)前記錄。其語法格式為:數(shù)據(jù)表對象.seekcomparison
52、,keyl,key2-Seek允許接受多個參數(shù),第1個是比較運(yùn)算符comparison,Seek方法中可用的比較運(yùn)算符有=、=、=等。在使用Seek方法定位記錄時,必須通過Index屬性設(shè)置索引。若在記錄集中多次使用同樣的法(參數(shù)相同),那么找到的總是同一條記錄。例如:假設(shè)數(shù)據(jù)庫Student內(nèi)基本情況表的索引字段為學(xué)號,滿足學(xué)號字段值大于等于條記錄可使用以下程序代碼:<>、Seek方110001的第1'設(shè)置記錄集類型為Table'打開基本情況表單'打開名稱為jbqk_no的索引Datal.RecordsetType=0Data1.RecordSource=
53、"基本情況"Data1.RefreshData1.Recordset.Index="jbqk_no"Data1.Recordset.Seek">=","110001"2.5數(shù)據(jù)庫記錄的增、刪、改操作Data控件是瀏覽表格并編輯表格的好工具,但怎么輸入新信息或刪除現(xiàn)有記錄呢?這需要編寫幾行代碼,否則無法在Data控件上完成數(shù)據(jù)輸入。數(shù)據(jù)庫記錄的增、刪、改操作需要使用AddNew、Delete、Edit、Update和Refresh方法。它們的語法格式為:數(shù)據(jù)控件.記錄集.方法名1. 增加記錄AddNew方法在記
54、錄集中增加新記錄。增加記錄的步驟為:(1) 調(diào)用AddNew方法。(2) 給各字段賦值。給字段賦值格式為:Recordset.Fields(字段答")值。(3) 調(diào)用Update方法,確定所做的添加,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫入數(shù)據(jù)庫。注意:如果使用AddNew方法添加新的記錄,但是沒有使用Update方法而移動到其他記錄,或者關(guān)閉記錄集,那么所做的輸入將全部丟失,而且沒有任何警告。當(dāng)調(diào)用Update方法寫入記錄后,記錄指針自動返回到添加新記錄前的位置上,而不顯示新記錄。為此,可在調(diào)用Update方法后,使用MoveLast方法將記錄指針再次移到新記錄上。2. 刪除記錄要從記錄集中刪除記錄的
55、操作分為三步:(1) 定位被刪除的記錄使之成為當(dāng)前記錄。(2) 調(diào)用Delete方法。(3) 移動記錄指針。注意:在使用Delete方法時,當(dāng)前記錄立即刪除,不加任何的警告或者提示。刪除一條記錄后,被數(shù)據(jù)庫所約束的綁定控件仍舊顯示該記錄的內(nèi)容。因此,你必須移動記錄指針?biāo)⑿陆壎丶?,一般采用移至下一記錄的處理方法。在移動記錄指針后,?yīng)該檢查Eof屬性。3. 編輯記錄數(shù)據(jù)控件自動提供了修改現(xiàn)有記錄的能力,當(dāng)直接改變被數(shù)據(jù)庫所約束的綁定控件的內(nèi)容后,需單擊數(shù)據(jù)控件對象的任一箭頭按鈕來改變當(dāng)前記錄,確定所做的修改。也可通過程序代碼來修改記錄,使用程序代碼修改當(dāng)前記錄的步驟為:(1) 調(diào)用Edit方法。
56、(2) 給各字段賦值。(3) 調(diào)用Update方法,確定所做的修改。注意:如果要放棄對數(shù)據(jù)的所有修改,可用Refresh方法,重讀數(shù)據(jù)庫,沒有調(diào)用Update方法,數(shù)據(jù)的修改沒有寫入數(shù)據(jù)庫,所以這樣的記錄會在刷新記錄集時丟失。例9.5在例9.2的基礎(chǔ)上加入新增”、刪除”、修改”、放棄”和查找”鈕,通過對5個按紐的編程建立增、刪、改、查功能,如圖9.11所示。圖9.11編程建立增、刪、改、查功能Command1_Click事件的功能根據(jù)按鈕提示文字調(diào)用AddNew方法或Update方法,并且控制具他4個按鈕的可用性。當(dāng)按鈕提示為新增”時調(diào)用AddNew方法,并將提示文字改為確認(rèn)”,同時使刪除”按
57、鈕Command2、修改”按鈕Command3和查找"按鈕Command5不可用,而使放棄"按鈕Command4可用。新增記錄后,需再次單擊Command1調(diào)用Update方法確認(rèn)添加的記錄,再將提示文字再改為新增”,并使刪除"、修改”和查找"按鈕可用,而使放棄"按鈕不可用。程序中出現(xiàn)的OnErrorResumeNext語句是VisualBasic提供的錯誤捕獲語句。該語句表示在程序運(yùn)行時發(fā)生錯誤,忽略錯誤行,繼續(xù)執(zhí)行下一語句。PrivateSubCommand1_Click()OnErrorResumeNextCommand2.Enabled
58、=NotCommand2.EnabledCommand3.Enabled=NotCommand3.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.EnabledIfCommand1.Caption="新增"ThenCommand1.Caption="確認(rèn)"Data1.Recordset.AddNewText1.SetFocusElseCommand1.Caption="新增"Data1.Recordset.UpdateData1.Recordset.MoveLastEndIfEndSub命令按鈕Command2_Click事件調(diào)用方法刪除當(dāng)前記錄。當(dāng)記錄集中的記錄全部被刪除后,再執(zhí)行Move語句將發(fā)生錯誤,這時由OnErrorResumeNext語句處理錯誤。PrivateSubCommand2_Click()OnErrorResumeNextData1.Recordset.DeleteData1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub命令按鈕Command
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度導(dǎo)演與編劇合作合同3篇
- 2024年版室內(nèi)設(shè)計(jì)及裝修費(fèi)用合同樣本版B版
- 2024年美發(fā)店品牌合作經(jīng)營協(xié)議
- 2024年水泥建筑材料購銷合同樣本版B版
- 2024年度新能源汽車充電樁運(yùn)營權(quán)轉(zhuǎn)讓合同3篇
- 河北省廊坊市永清縣一中等2校2022-2023學(xué)年高一3月聯(lián)考生物試題
- 2024孕婦離婚子女監(jiān)護(hù)權(quán)與財(cái)產(chǎn)分割協(xié)議范本3篇
- 2024年度離職員工競業(yè)禁止及保密責(zé)任履行協(xié)議3篇
- 2024年美容院租賃協(xié)議樣本
- 2024年度房地產(chǎn)代持協(xié)議書模板3篇
- 廣東省廣州市天河區(qū)2022-2023學(xué)年七年級上學(xué)期期末語文試題(含答案)
- DBJT45T 037-2022 高速公路出行信息服務(wù)管理指南
- 顳下頜關(guān)節(jié)疾病試題
- 2025眼科護(hù)理工作計(jì)劃
- 校園牛奶消費(fèi)推廣方案
- 期末試卷(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)蘇教版
- 天津市南開區(qū)2023-2024學(xué)年四年級上學(xué)期期末英語試題
- 期末考試-公共財(cái)政概論-章節(jié)習(xí)題
- EVM500在電纜中應(yīng)用
- 聯(lián)想集團(tuán)內(nèi)訓(xùn)師管理制度
- 空心板計(jì)算書
評論
0/150
提交評論