VB程序設(shè)計第11章 數(shù)據(jù)庫訪問_第1頁
VB程序設(shè)計第11章 數(shù)據(jù)庫訪問_第2頁
VB程序設(shè)計第11章 數(shù)據(jù)庫訪問_第3頁
VB程序設(shè)計第11章 數(shù)據(jù)庫訪問_第4頁
VB程序設(shè)計第11章 數(shù)據(jù)庫訪問_第5頁
已閱讀5頁,還剩134頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、L o g oL o g o第第11章數(shù)據(jù)庫訪問技術(shù)章數(shù)據(jù)庫訪問技術(shù)L o g oL o g o知識要點知識要點習(xí)題與解答習(xí)題與解答實訓(xùn)指導(dǎo)實訓(xùn)指導(dǎo)測驗題測驗題第第11章數(shù)據(jù)庫訪問技術(shù)章數(shù)據(jù)庫訪問技術(shù)L o g oL o g o 11.1 知識要點知識要點v1、SQL語句的基本結(jié)構(gòu)語句的基本結(jié)構(gòu)vSQL是結(jié)構(gòu)化查詢語言(是結(jié)構(gòu)化查詢語言(Structured Query Language)的縮寫,是一種數(shù))的縮寫,是一種數(shù)據(jù)查詢和編程語言。據(jù)查詢和編程語言。SQL的語句,可以的語句,可以說是說是SQL語法的主體,用來對某一個特語法的主體,用來對某一個特定的數(shù)據(jù)庫發(fā)出指示,并返回相關(guān)的數(shù)定的數(shù)據(jù)

2、庫發(fā)出指示,并返回相關(guān)的數(shù)據(jù),而據(jù),而SQL的語法結(jié)構(gòu),基本上可以表的語法結(jié)構(gòu),基本上可以表示為:示為:L o g oL o g ovSELECT select_list FROM tab_name|view_name vWHERE condition vGROUP BY column_name vHAVING condition vORDER BY column_list vINTO TEMP table_name L o g oL o g ov其中的參數(shù)說明如下:其中的參數(shù)說明如下:select_list:選擇表或:選擇表或*;tab_name:表名稱;:表名稱;view_name:視圖名

3、稱;:視圖名稱;condition:查詢條件,可使用:查詢條件,可使用BETWEEN、IN、LIKE、IS NULL、LIKE、MATCHES、NOT、AND、OR、=、!=或或、= 、=、=1 AND Day(Birthday)50 datPrimaryRS.Refresh 如果不使用如果不使用Refresh方法,對方法,對RecordSource屬性的修改不會生效。屬性的修改不會生效。L o g oL o g o8如何關(guān)閉(斷開)用ADO創(chuàng)建的數(shù)據(jù)庫連接?v答:用ADO打開數(shù)據(jù)庫無非是用兩個對象Recordset和connction,要想關(guān)閉用它們打開的數(shù)據(jù)庫的方法是object.clos

4、e。 L o g oL o g o9何用何用ado recordset的的sort 屬性對記錄集屬性對記錄集的某個字段按降序排列?的某個字段按降序排列?答:看到答:看到Sort屬性的格式就是:屬性的格式就是: v 字段字段1 DESC 字段字段2 ASC . v 其中其中ASC表示升序,表示升序,DESC表示降序。表示降序。排在前面的字段優(yōu)先。程序代碼代碼示例:排在前面的字段優(yōu)先。程序代碼代碼示例: L o g oL o g ov Public Sub SortX() v Dim cnn As New ADODB.Connection v Dim rst As New ADODB.Record

5、set v rst.CursorLocation = adUseClient v cnn.Open DSN=Pubs;Provider=MSDASQL;uid=sa;pwd=; v rst.Open SELECT * FROM Authors, cnn, _ v adOpenStatic, adLockReadOnly, adCmdText v SortXprint Initial Order, rst v rst.Sort = au_lname ASC, au_fname ASC v SortXprint Last Name Ascending, rst v rst.Sort = au_ln

6、ame DESC, au_fname ASC v SortXprint Last Name Descending, rst L o g oL o g ov rst.Close v cnn.Close v End Sub v Public Sub SortXprint ( title As String, rstp As ADODB.Recordset ) v Debug.Print - & title & - v Debug.Print First Name Last Name & vbCr & _ v - v rstp.MoveFirst v While No

7、t rstp.EOF v Debug.Print rstp!au_fname & & rstp!au_lname v rstp.MoveNext v Wend v Debug.Print v End SubL o g oL o g o10如何創(chuàng)建數(shù)據(jù)庫的表格?如何創(chuàng)建數(shù)據(jù)庫的表格?v答:如果創(chuàng)建答:如果創(chuàng)建Access數(shù)據(jù)庫的表,應(yīng)該使數(shù)據(jù)庫的表,應(yīng)該使用用CreateTableDef方法。如果創(chuàng)建方法。如果創(chuàng)建SQL Server等數(shù)據(jù)庫的表,需要使用等數(shù)據(jù)庫的表,需要使用CREATE TABLE查詢查詢 。 L o g oL o g o(1) 創(chuàng)建Access數(shù)據(jù)庫的表 v

8、 Dim dbs As Database, tdf As TableDef, fld As Field v 返回當(dāng)前數(shù)據(jù)庫 v Set dbs = CurrentDb v 返回指向新表的TableDef對象 v Set tdf = dbs.CreateTableDef(Contacts) v 在表中添加一個新字段 v Set fld = tdf.CreateField(ContactName, dbText, 40) v 使用Append追加Field對象到TableDef的Fields集合中 L o g oL o g ov tdf.Fields.Append fld v tdf.Fields

9、.Refresh v 使用使用Append追加追加TableDef對象到數(shù)據(jù)庫的對象到數(shù)據(jù)庫的TableDefs集合中集合中 v dbs.TableDefs.Append tdf v dbs.TableDefs.Refresh v Set dbs = Nothing v (2)創(chuàng)建)創(chuàng)建SQL Server等數(shù)據(jù)庫的表等數(shù)據(jù)庫的表 v Dim dbs As Database v . v 使用兩個文本字段來創(chuàng)建表使用兩個文本字段來創(chuàng)建表 。 v dbs.Execute CREATE TABLE ThisTable _ v & ( + Text1.Text TEXT, + Text2.Te

10、xt + TEXT); v dbs.Close L o g oL o g o11如何能夠提高調(diào)用如何能夠提高調(diào)用ADO數(shù)據(jù)庫的速度?數(shù)據(jù)庫的速度?答:可以直接使用答:可以直接使用ADO對象編程。對象編程。 v 引用:引用:Microsoft ActiveX Data Object 2.0 Library dim db as new adodb.connection dim rs as new adodb.recordset db.open Provider=Microsfot.olddb.jet.3.51;. L o g oL o g o rs.open SQL 語 句 ,db,adopenk

11、eyset,adlockoptimistic if rs.RecordsetCount0 then . v 如果只顯示推薦使用ListView 控件;如果執(zhí)行編輯,推薦使用MsFlexGrid控件; 可將查詢出來的記錄集一條條地賦給ListView或MsFlexGrid控件。 v 使用代碼要比使用控件速度快很多且容易控制,但必須編程實現(xiàn)。將記錄集的鎖定屬性設(shè)為:lockReadonly。將curlocation屬性設(shè)為dbuesclient,速度將大大改善。L o g oL o g ov11如何用如何用VB打開一個打開一個Access數(shù)據(jù)庫查數(shù)據(jù)庫查看一個表里的內(nèi)容:看一個表里的內(nèi)容:v答:答

12、:VB本身支持?jǐn)?shù)據(jù)庫編程,查看本身支持?jǐn)?shù)據(jù)庫編程,查看Access內(nèi)容的最好辦法是使用內(nèi)容的最好辦法是使用Data控件和控件和DBGrid控件進(jìn)行綁定。控件進(jìn)行綁定。 L o g oL o g o12VB中的中的ADO、DAO、RDO等是如何區(qū)等是如何區(qū)分的?分的?v答:答:Data控件屬于控件屬于DAO,DAO主要適合本主要適合本機(jī)數(shù)據(jù)庫的讀寫,也可以通過機(jī)數(shù)據(jù)庫的讀寫,也可以通過ODBC訪問訪問網(wǎng)上的數(shù)據(jù)庫,但效率比較低,一般不采網(wǎng)上的數(shù)據(jù)庫,但效率比較低,一般不采用這種方法,更愿意采用用這種方法,更愿意采用RDO或或ADO。如。如果要使用果要使用 RDO或或ADO的數(shù)據(jù)庫控件都需要的數(shù)據(jù)

13、庫控件都需要另外從部件對話框中添加相應(yīng)的數(shù)據(jù)控件,另外從部件對話框中添加相應(yīng)的數(shù)據(jù)控件,三種方式的三種方式的 數(shù)據(jù)控件不同。數(shù)據(jù)控件不同。 L o g oL o g ov區(qū)分所作的程序是DAO、RDO,還是ADO的,可以看看打開數(shù)據(jù)庫的方式。DAO使用OpenDatabase方法,RDO使用OpenConnection方法,而ADO一般通過一個ConnectionString來確定數(shù)據(jù)庫的類型和位置。L o g oL o g ov13DAO與與ODBC有什么區(qū)別?有什么區(qū)別?v答:DAO和ODBC的工作原理差別較大。ODBC原本是通過ODBC API調(diào)用的,但VB的DAO和 RDO都封裝了OD

14、BC,所以,在VB中應(yīng)用起來感覺差別不大,調(diào)用的時候只是在指定驅(qū)動時有所不同,一般的數(shù)據(jù)庫操作差不多。DAO是針對VB/Access設(shè)計的,它所支持的數(shù)據(jù)庫類型就是VB的那幾種,很少見第三方驅(qū)動程序。 L o g oL o g ovODBC是開放的數(shù)據(jù)庫接口,幾乎支持所有數(shù)據(jù)庫類型,對于很多VB不能很好地支持的數(shù)據(jù)庫類型,如Visual FoxPro 5.0,都可以使用ODBC驅(qū)動。一般來說DAO支持本機(jī)Access數(shù)據(jù)庫比較理想,但在客戶/服務(wù)器體系上不如ODBC功能強大。L o g oL o g o知識要點知識要點習(xí)題與解答習(xí)題與解答實訓(xùn)指導(dǎo)實訓(xùn)指導(dǎo)測驗題測驗題第第11章數(shù)據(jù)庫訪問技術(shù)章數(shù)

15、據(jù)庫訪問技術(shù)L o g oL o g o 11.3實訓(xùn)指導(dǎo)實訓(xùn)指導(dǎo)11.3.1技能訓(xùn)練的目的v熟練數(shù)據(jù)庫訪問控件的使用方法。v掌握數(shù)據(jù)環(huán)境設(shè)計器的使用。v掌握數(shù)據(jù)報表的使用方法。L o g oL o g o11.3.2技能訓(xùn)練的內(nèi)容v【實訓(xùn)11.1】設(shè)計一個數(shù)據(jù)庫應(yīng)用程序,要求能夠自動搜索數(shù)據(jù)庫中的所有表的表名并將其顯示在列表框中,將選定表的所有記錄顯示在表格中。L o g oL o g o窗體設(shè)計如下:在窗體上添加一個Data控件、一個列表框ListBox控件和一個表格MSFlexGrid控件并將該列表框和表格的DataSource屬性設(shè)為Data1。具體設(shè)計如圖11-4所示。數(shù)據(jù)庫設(shè)計是將

16、“C:Program FilesMicrosoft Visual StudioVB98”目錄中的BIBLIO.MDB存放在當(dāng)前VB程序所在的文件夾中,并且只保留Authors、Publishers和Titles這三個表。這三個表的具體設(shè)計如表11-5至1-7所示。L o g oL o g o圖圖11-4L o g oL o g o圖圖11-5L o g oL o g o圖圖11-6L o g oL o g o圖圖11-7L o g oL o g o程序代碼設(shè)計如下:v Private Sub Form_Load()v Dim dbname As Stringv Dim db As Databa

17、sev Dim qdef As QueryDefv Dim td As TableDefv 打開數(shù)據(jù)庫v dbname = App.Pathv If Right$(dbname, 1) Then dbname = dbname & v dbname = dbname & data.mdbv Set db = OpenDatabase(dbname)v 列出所有數(shù)據(jù)庫中表的名字v For Each td In db.TableDefsL o g oL o g ov 不允許系統(tǒng)表列出v If Left$(td.Name, 4) MSys Then List1.AddItem td.

18、Namev Next tdv db.Closev 將數(shù)據(jù)庫與Data1控件連接v Data1.DatabaseName = dbnamev End Subv 打開指定的表v Private Sub List1_Click()v Dim table_name As Stringv Dim sql As Stringv table_name = List1.List(List1.ListIndex)圖11-8v sql = SELECT * FROM & table_namev Data1.Caption = table_namev Data1.RecordSource = sqlv Da

19、ta1.Refreshv End SubL o g oL o g ov程序運行結(jié)果如圖11-8所示。圖圖11-8L o g oL o g ov【實訓(xùn)實訓(xùn)11.2】利用利用DAO數(shù)據(jù)訪問對象,設(shè)數(shù)據(jù)訪問對象,設(shè)計一個數(shù)據(jù)庫控制演示程序,完成記錄的計一個數(shù)據(jù)庫控制演示程序,完成記錄的添加、刪除、搜索及瀏覽的功能。添加、刪除、搜索及瀏覽的功能。窗體設(shè)計:在窗體上分別添加四個標(biāo)簽、四窗體設(shè)計:在窗體上分別添加四個標(biāo)簽、四個文本框架和五個命令按鈕,其屬性設(shè)置個文本框架和五個命令按鈕,其屬性設(shè)置如表如表11-1所示;窗體設(shè)計效果,如圖所示;窗體設(shè)計效果,如圖11-9所示。所示。數(shù)據(jù)庫設(shè)計:數(shù)據(jù)庫采用數(shù)據(jù)庫

20、設(shè)計:數(shù)據(jù)庫采用Access數(shù)據(jù)庫設(shè)計,數(shù)據(jù)庫設(shè)計,名為名為cy。其中的表名為。其中的表名為cytable,表結(jié)構(gòu)如,表結(jié)構(gòu)如圖圖11-10所示。所示。L o g oL o g o圖圖11-9L o g oL o g o圖圖11-10L o g oL o g o表表11-1 “數(shù)據(jù)庫控制演示程序數(shù)據(jù)庫控制演示程序”窗體設(shè)計控件名稱及屬性值窗體設(shè)計控件名稱及屬性值控件名稱屬性名稱屬性值屬性名稱屬性值CommonButton1名稱cmdBackCaptionCommonButton2名稱cmdAddCaption添加CommonButton 3名稱cmdDeleteCaption刪除CommonB

21、utton 4名稱cmdSearchCaption搜索CommonButton 5名稱cmdForwardCaptionText1 名稱txtNameText 2名稱txtEmailText 3名稱txtPhoneText 4名稱txtFaxL o g oL o g o程序代碼設(shè)計如下:程序代碼設(shè)計如下:v Dim db As Databasev Dim rs As Recordsetv Private Sub cmdAdd_Click()v newName = InputBox(Please Enter The Name To Add, AddressBook)v newEmail = In

22、putBox(Please Enter The Email To Add, AddressBook)v newPhone = InputBox(Please Enter The Phone Number To Add, AddressBook)v newFax = InputBox(Please Enter The Fax Number To Add, AddressBook)v With rsv .AddNewv !Name = LCase(newName)v !Email = LCase(newEmail)v !Phone = LCase(newPhone)v !Fax = LCase(n

23、ewFax)v .Updatev End WithL o g oL o g ov MsgBox (newName & Was Added To The Address Book)v End Subv Private Sub cmdBack_Click()v On Error Resume Nextv rs.MovePreviousv txtName = rs.Fields(Name)v txtEmail = rs.Fields(Email)v txtPhone = rs.Fields(Phone)v txtFax = rs.Fields(Fax)v End Subv Private S

24、ub cmdDelete_Click()v Set rs = db.OpenRecordset(SELECT * From cytable WHERE name = _v + Chr$(34) + txtName.Text + Chr$(34) + ;)L o g oL o g ov rs.MoveFirstv Do Until rs.EOFv rs.Deletev rs.MoveNextv v Loopv db.Closev Form_Loadv End Subv Private Sub cmdForward_Click()v On Error Resume Nextv rs.MoveNex

25、tv txtName = rs.Fields(Name)v txtEmail = rs.Fields(Email)v txtPhone = rs.Fields(Phone)L o g oL o g ov txtFax = rs.Fields(Fax)v End Subv Private Sub cmdSearch_Click()v Set rs = db.OpenRecordset(SELECT * FROM cytable)v NameQuery = InputBox(Enter A Name To Search For, Name Query)v rs.MoveFirstv Do Unti

26、l rs.EOFv If rs.Fields(name) Like * & LCase(NameQuery) & * Thenv txtName = rs.Fields(Name)v txtEmail = rs.Fields(Email)v txtPhone = rs.Fields(Phone)v txtFax = rs.Fields(Fax)v Exit Subv Elsev rs.MoveNextv End IfL o g oL o g ov Loopv End Subv Private Sub Form_Load()v Set db = OpenDatabase(App.

27、Path + /cy.mdb)v Set rs = db.OpenRecordset(cytable)v If rs.EOF Thenv MsgBox Please Add Someone To The Databse圖11-11v Elsev rs.MoveFirstv txtName = rs.Fields(Name)v txtEmail = rs.Fields(Email)v txtPhone = rs.Fields(Phone)v txtFax = rs.Fields(Fax)v End Ifv End SubL o g oL o g ov程序運行結(jié)果如圖11-11所示。圖圖11-11

28、L o g oL o g ov【實訓(xùn)11.3】使用Data控件訪問數(shù)據(jù)庫,保存用戶的個性化設(shè)置。v程序設(shè)計要求:利用程序設(shè)計要求:利用VB設(shè)計一個應(yīng)用程序,設(shè)計一個應(yīng)用程序,將用戶對文本框所作的設(shè)置保存下來,以將用戶對文本框所作的設(shè)置保存下來,以便用戶下一次啟動時其程序界面及相關(guān)設(shè)便用戶下一次啟動時其程序界面及相關(guān)設(shè)置都是自己本次關(guān)機(jī)前最中意和習(xí)慣的設(shè)置都是自己本次關(guān)機(jī)前最中意和習(xí)慣的設(shè)計。假設(shè)用計。假設(shè)用TextBox做編輯欄的字處理程序,做編輯欄的字處理程序,該程序提供了讓用戶對編輯欄背景色和字該程序提供了讓用戶對編輯欄背景色和字體進(jìn)行設(shè)置的按鈕。體進(jìn)行設(shè)置的按鈕。L o g oL o g

29、 ov窗體設(shè)計如下:首先,給窗體添加一個Data控件、一個文本框text1、兩個命令按鈕(CmdBackColorSetting和CmdFontSetting)和一個通用對話框CommonDialog控件。然后,用Access建立一個名為Pad的數(shù)據(jù)庫,在庫中建立一個表Myset,給表添加四個字段:背景色(數(shù)據(jù)),前景色(文本),字體名稱(文本),字體大?。ㄎ谋荆W⒁猓赫垖煳募嫒氤绦蛩谀夸?。窗體和數(shù)據(jù)庫中表的設(shè)計如圖11-12和11-13所示。L o g oL o g o圖圖11-12圖圖11-13L o g oL o g ov 編寫程序代碼如下:編寫程序代碼如下: v Private

30、 Sub CmdBackColorSetting_Click()v 設(shè)置背景色v CommonDialog1.Flags = cdlCCFullOpenv CommonDialog1.ShowColorv On Error GoTo errv Data1.Recordset.Editv err:v If err.Number = 3021 Thenv Data1.Recordset.AddNewv End Ifv Data1.Recordset.Fields(背景色) = CommonDialog1.Colorv Data1.Recordset.Updatev Text1.BackColor

31、= CommonDialog1.Colorv End SubL o g oL o g ov Private Sub CmdFontSetting_Click()v 設(shè)置字體v CommonDialog1.Flags = cdlCFEffects Or cdlCFBothv CommonDialog1.ShowFontv On Error GoTo FontErrv Data1.Recordset.Editv FontErr:v If err.Number = 3021 Thenv Data1.Recordset.AddNewv End Ifv Data1.Recordset.Fields(字體

32、大小) = CommonDialog1.FontSizev Data1.Recordset.Fields(字體顏色) = CommonDialog1.Colorv Data1.Recordset.Fields(字體名稱) = CommonDialog1.FontNamev Data1.Recordset.UpdateL o g oL o g ov Text1.ForeColor = CommonDialog1.Colorv Text1.Font.Name = CommonDialog1.FontNamev Text1.Font.Size = CommonDialog1.FontSizev En

33、d Subv 窗體的Activate事件v Private Sub Form_Activate()v On Error Resume Nextv Text1.BackColor = Data1.Recordset.Fields(背景色)v Text1.Font.Size = Data1.Recordset.Fields(字體大小)v Text1.ForeColor = Data1.Recordset.Fields(字體顏色)v Text1.Font.Name = Data1.Recordset.Fields(字體名稱)v End Subv Private Sub Form_Load()v 定位

34、庫文件路徑v Data1.DatabaseName = App.Path + pad.mdbv Data1.RecordSource = MySetv End SubL o g oL o g ov程序運行結(jié)果如圖11-14和11-15所示。 圖圖11-14圖圖11-15L o g oL o g o【實訓(xùn)實訓(xùn)11.4】采用采用ADO控件動態(tài)鏈接庫訪問控件動態(tài)鏈接庫訪問數(shù)據(jù)庫,存取數(shù)據(jù)庫中的圖片。數(shù)據(jù)庫,存取數(shù)據(jù)庫中的圖片。v數(shù)據(jù)庫的設(shè)計數(shù)據(jù)庫的設(shè)計 :數(shù)據(jù)庫:數(shù)據(jù)庫MyDataPicture采采用用SQL Server 2000設(shè)計(也可使用設(shè)計(也可使用Access數(shù)據(jù)庫),首先新建一張表,取

35、名數(shù)據(jù)庫),首先新建一張表,取名為為MyTable,添加三個字段,分別是:,添加三個字段,分別是:name (Char型型);number (Char型型);picture (image型型),設(shè)計好后存盤。,設(shè)計好后存盤。 L o g oL o g ov為了可以進(jìn)行遠(yuǎn)程調(diào)用,我們采用ODBC的方法進(jìn)行,雙擊打開控制面板里的ODBC數(shù)據(jù)源,點“系統(tǒng)DSN”選項卡,按“添加”按鈕選擇對應(yīng)的數(shù)據(jù)源驅(qū)動程序SQL Server,依照添加向?qū)Ъ犹砑訑?shù)據(jù)源,下面就可以開始程序的編寫了。 L o g oL o g ov窗體設(shè)計:新建一個工程。本程序采用ADO控件和動態(tài)鏈接庫訪問數(shù)據(jù)庫,需要加入ADO的運行

36、庫,單擊“工程引用”菜單,出現(xiàn)引用對話框,選擇Microsoft ActiveX Data Objects2.0 Library并確定。在窗體Form1上,分別添加四個Label控件,兩個TextBox控件,一個PictureBox控件,一個ADODC控件, 三個CommandButton控件, 一個CommandDialog控件, L o g oL o g ov如果ADODC和CommandDialog控件沒有出現(xiàn)在工具框上,請單擊菜單“工程部件”。點“控件”選項卡,在其中選中Microsoft ADO Data Control 6.0(OLEDB)和Microsoft Common Dia

37、log Control 6.0兩項按“確定”按鈕。v 窗體控件的屬性設(shè)置如表11-2所示,窗體設(shè)計的結(jié)果如圖11-16所示。L o g oL o g o表表11-2 “存取數(shù)據(jù)庫中的圖片存取數(shù)據(jù)庫中的圖片”窗體設(shè)計控件名稱及屬性值窗體設(shè)計控件名稱及屬性值控件名稱屬性名稱屬性設(shè)置控件名稱屬性名稱屬性設(shè)置Form1MaxButtonFalseCommonDialog1名稱CDlgLabel1Caption姓名:Adodc1名稱AdoCtrLabel2Caption編號:CommonButton1名稱PreViewLabel3名稱ResNameCommonButton1Caption預(yù)覽Label3

38、BackColor&H80000009CommonButton2名稱SaveLabel3BorderStyle1Fixed CommonButton2Caption保存Label3DataField姓名CommonButton3NameUpdateLabel3DataSourceMyDataPictureCommonButton3Caption更新Label4名稱ResNumbPictureBox1名稱PicBoxLabel4BackColor&H80000009PictureBox1 AutoSize FalseLabel4BorderStyle1FixedPictureBo

39、x1AutoRedrawFalseLabel4DataField編號PictureBox1DataField照片Label4DataSourceAdoCtrPictureBox1DataSourceAdpCtrText1名稱NamesText2名稱NumbL o g oL o g o圖圖11-16L o g oL o g o程序代碼設(shè)計如下:程序代碼設(shè)計如下: v Dim Constr As String ODBC路徑v Dim FileName As String 圖片文件名v Const BLOCKSIZE = 4096 每次讀寫塊的大小v Dim ADOCon As New ADODB.

40、Connection ADODB Connection對象v Dim ADORst As New ADODB.Recordset ADODB Recordset 對象v Dim ADOFld As ADODB.Field ADODB Field 對象v Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)v Dim byteData() As Byte 定義數(shù)據(jù)塊數(shù)組v Dim NumBlocks As Long 定義數(shù)據(jù)塊個數(shù)v Dim FileLength As Long 標(biāo)識文件長度v Dim LeftOve

41、r As Long 定義剩余字節(jié)長度v Dim SourceFile As Long 定義自由文件號v Dim i As Long 定義循環(huán)變量v SourceFile = FreeFile 提供一個尚未使用的文件號L o g oL o g ov Open DiskFile For Binary Access Read As SourceFile 打開文件v FileLength = LOF(SourceFile) 得到文件長度v If FileLength = 0 Then 判斷文件是否存在v Close SourceFilev MsgBox DiskFile & 無內(nèi)容或不存在!v

42、 Elsev NumBlocks = FileLength BLOCKSIZE 得到數(shù)據(jù)塊的個數(shù)v LeftOver = FileLength Mod BLOCKSIZE 得到剩余字節(jié)數(shù)v Fld.Value = Nullv ReDim byteData(BLOCKSIZE) 重新定義數(shù)據(jù)塊的大小v For i = 1 To NumBlocksv Get SourceFile, , byteData() 讀到內(nèi)存塊中v Fld.AppendChunk byteData() 寫入FLDL o g oL o g ov Next iv ReDim byteData(LeftOver) 重新定義數(shù)據(jù)塊

43、的大小重新定義數(shù)據(jù)塊的大小v Get SourceFile, , byteData() 讀到內(nèi)存塊中讀到內(nèi)存塊中v Fld.AppendChunk byteData() 寫入寫入FLDv Close SourceFile 關(guān)閉源文件關(guān)閉源文件v End Ifv End Subv Private Sub Form_Load()v Constr = DSN=cy_image 定義定義ODBC連接連接v ADOCon.Open Constr 創(chuàng)建一個連接創(chuàng)建一個連接v ADORst.Open MyTable, ADOCon, adOpenDynamic, adLockOptimisticv 打開一個

44、打開一個ADO動態(tài)集動態(tài)集 表名為表名為MyTablev Set AdoCtr.Recordset = ADORst 將動態(tài)集賦給將動態(tài)集賦給ADO控件控件v End Subv Private Sub Form_Unload(Cancel As Integer)v 記得關(guān)閉打開的數(shù)據(jù)集,釋放資源記得關(guān)閉打開的數(shù)據(jù)集,釋放資源L o g oL o g ov ADORst.Closev ADOCon.Closev Set ADORst = Nothingv Set ADOCon = Nothingv End Subv Private Sub PreView_Click()v 顯示打開文件的公用對話

45、框,選擇需要加入數(shù)據(jù)庫的圖片v CDlg.Filter = 圖(*.bmp)|*.bmpv CDlg.ShowOpenv FileName = CDlg.FileNamev PicBox.Picture = LoadPicture(FileName) 預(yù)覽圖片v End Subv Private Sub Save_Click()v Update_Click 重新打開紀(jì)錄集,刷新紀(jì)錄v ADORst.AddNew 新增紀(jì)錄v ADORst(name).Value = Names.Text 給動態(tài)集的第一個字段賦值v ADORst(number).Value = Numb.Text 給動態(tài)集的第二

46、個字段賦值v Set ADOFld = ADORst(picture) 給ADODB.Field對象賦值L o g oL o g ov Call SaveToDB(ADOFld, FileName) 調(diào)用子程序,給第三個字段(image)賦值v ADORst.Updatev End Subv Private Sub Update_Click() 重新打開紀(jì)錄集,刷新紀(jì)錄v ADORst.Closev ADOCon.Closev Set ADORst = Nothingv Set ADOCon = Nothingv ADOCon.Open Constrv ADORst.Open MyTable,

47、 ADOCon, adOpenDynamic, adLockOptimisticv Set AdoCtr.Recordset = ADORst 將動態(tài)集賦給ADO控件v End Subv 程序運行結(jié)果如圖11-17和11-18所示。L o g oL o g o圖圖11-17圖圖11-18L o g oL o g ov【實訓(xùn)實訓(xùn)11.5】“登錄登錄”窗體的設(shè)計。具體要窗體的設(shè)計。具體要求如下:求如下:v“登錄登錄”窗體主要用于解決應(yīng)用程序的窗體主要用于解決應(yīng)用程序的使用安全性問題,因此,設(shè)計任何一個系使用安全性問題,因此,設(shè)計任何一個系統(tǒng)應(yīng)用程序,統(tǒng)應(yīng)用程序,“密碼登錄密碼登錄”設(shè)計是不可缺設(shè)計

48、是不可缺少的。本例將用戶名和密碼寫在用少的。本例將用戶名和密碼寫在用SQL Server 2000設(shè)計的數(shù)據(jù)庫設(shè)計的數(shù)據(jù)庫library中的用戶中的用戶表表user中。表中。表use的詳細(xì)設(shè)計如圖的詳細(xì)設(shè)計如圖11-19所所示;窗體設(shè)計如圖示;窗體設(shè)計如圖11-20所示,其中各個控所示,其中各個控件的屬性設(shè)置如表件的屬性設(shè)置如表11-3所示。所示。L o g oL o g o圖圖11-19L o g oL o g o圖圖11-20L o g oL o g o表表11-3 “登錄信息登錄信息”窗體各個控件的屬性設(shè)置窗體各個控件的屬性設(shè)置對象對象屬性屬性設(shè)置值設(shè)置值對象對象屬性屬性設(shè)置值設(shè)置值Co

49、mmonButton1名稱名稱cmdOKText1名稱名稱TxtServerCommonButton1Caption確定確定Text2名稱名稱txtUserNameCommonButton2名稱名稱cmdCancelText3名稱名稱txtPasswordCommonButton2Caption取消取消Form1名稱名稱frmLoginLabel1名稱名稱Label1Form1Caption登錄登錄Label1Caption圖書館管理信息系統(tǒng)圖書館管理信息系統(tǒng)L o g oL o g o程序代碼設(shè)計如下:v Dim Cnn As ADODB.Connectionv Dim Rst As ADO

50、DB.Recordsetv Private Sub cmdCancel_Click()v Me.Hidev End Subv Private Sub cmdOK_Click()v Set Cnn = New ADODB.Connection 數(shù)據(jù)庫連接v Cnn.ConnectionString = Provider=SQLOLEDB.1; & _v Data Source= & Me.TxtServer.Text & ;Initial Catalog=library;User ID=sa;Password=888;v Cnn.Openv Set Rst = New A

51、DODB.Recordsetv Rst.CursorType = adOpenKeysetL o g oL o g ov Rst.LockType = adLockOptimisticv Rst.Open SELECT username, password FROM users, Cnnv 檢查正確密碼v If Trim(Rst! ) = Me.txtUserName.Text And _v Trim(Rst!password) = Me.txtPassword.Text And _v Me.TxtServer.Text Thenv Me.Hidev frmBook1.Showv Elsev

52、MsgBox 請輸入正確的服務(wù)器名、用戶名和密碼!, , 登錄v Me.TxtServer.Text = v Me.txtUserName.Text = v Me.txtPassword.Text = v Me.TxtServer.SetFocusv End Ifv End SubL o g oL o g ov“登錄”窗體程序的運行結(jié)果如圖11-21所示。 圖11-21L o g oL o g o【實訓(xùn)11.6】利用ADO數(shù)據(jù)訪問對象,設(shè)計一個通用的數(shù)據(jù)庫訪問模塊。v一般在應(yīng)用程序的運行過程中,由于要依據(jù)不同的情況設(shè)置不同的記錄集,所以需要多次連接服務(wù)器中的數(shù)據(jù)庫,所以為了簡化程序代碼的編寫,

53、需要將數(shù)據(jù)庫的訪問及記錄集的生成寫在模塊中。本例在模塊Module1中分別設(shè)計了函數(shù)ConnectString和ExecuteSQL, L o g oL o g ov其中ExecuteSQL函數(shù)的返回值是利用ADO數(shù)據(jù)訪問對象,訪問SQL Server 2000開發(fā)的數(shù)據(jù)庫library,依據(jù)SQL語句形成的記錄集。數(shù)據(jù)庫訪問模塊的程序代碼設(shè)計如下:Public Function ConnectString() As String返回數(shù)據(jù)庫的連接 ConnectString = Provider=SQLOLEDB.1; & _ Data Source= & Name of Se

54、rver & ;Initial Catalog=library;User ID=sa;Password=;End FunctionL o g oL o g ov執(zhí)行SQL語句并且返回記錄集vPublic Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordsetv Dim Cnn As ADODB.Connectionv Dim Rst As ADODB.Recordsetv Dim sTokens() As Stringv v On Error GoTo ExecuteSQL_Err

55、orv sTokens = Split(SQL)v Set Cnn = New ADODB.ConnectionL o g oL o g ov Cnn.Open ConnectStringv If InStr(INSERT,DELETE,UPDATE, UCase$(sTokens(0) Thenv Cnn.Execute SQLv MsgString = sTokens(0) & query successfulv Elsev Set Rst = New ADODB.Recordsetv Rst.Open Trim$(SQL), Cnn, adOpenKeyset, adLockOptimisticv Set ExecuteSQL = Rstv MsgSt

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論