visual basic程序設(shè)計基礎(chǔ)_第1頁
visual basic程序設(shè)計基礎(chǔ)_第2頁
visual basic程序設(shè)計基礎(chǔ)_第3頁
visual basic程序設(shè)計基礎(chǔ)_第4頁
visual basic程序設(shè)計基礎(chǔ)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學(xué)1visualbasic程序設(shè)計基礎(chǔ)1.VB中的數(shù)據(jù)訪問VB提供的數(shù)據(jù)庫引擎叫Jet。VB提供了兩種與Jet數(shù)據(jù)庫引擎接口的方法:Data控件(DataControl)和數(shù)據(jù)訪問對象(DAO)。這兩種方法可以同時使用。

6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

Data控件提供了有限的不需編程就能訪問現(xiàn)存數(shù)據(jù)庫的功能DAO模型是全面控制數(shù)據(jù)庫的完整編程接口第1頁/共93頁VB通過DAO、ADO和Jet引擎可以識別三類數(shù)據(jù)庫:(1)VB數(shù)據(jù)庫

也稱本地數(shù)據(jù)庫,本地數(shù)據(jù)庫文件格式與MicrosoftAccess相同。Jet引擎直接創(chuàng)建和操作這些數(shù)據(jù)庫。(2)外部數(shù)據(jù)庫

訪問符合“索引順序訪問文件方法(ISAM)”數(shù)據(jù)庫,包括:dBaseIII、dBaseIV、Foxpro2.0和2.5以及Paradox3.x和4.x。(3)ODBC數(shù)據(jù)庫

訪問符合ODBC標(biāo)準(zhǔn)的客戶機/服務(wù)器數(shù)據(jù)庫,如MicrosoftSQLServer。6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

第2頁/共93頁2.VB數(shù)據(jù)庫體系結(jié)構(gòu)Jet引擎負(fù)責(zé)處理存儲、檢索、更新數(shù)據(jù)的結(jié)構(gòu),并提供了功能強大的面向?qū)ο蟮腄AO編程接口。(1)

VB數(shù)據(jù)庫應(yīng)用程序的組成VB數(shù)據(jù)庫應(yīng)用程序包含三部分,如圖6.1所示。圖6.1VB數(shù)據(jù)庫應(yīng)用程序的組成6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

用戶界面Jet引擎數(shù)據(jù)庫第3頁/共93頁①用戶界面和應(yīng)用程序代碼用戶界面是用戶所看見的用于交互的界面,它包括顯示數(shù)據(jù)并允許用戶查看或更新數(shù)據(jù)的窗體。驅(qū)動這些窗體的是應(yīng)用程序的VB代碼,包括用來請求數(shù)據(jù)庫服務(wù)的數(shù)據(jù)訪問對象和方法,比如添加或刪除記錄,或執(zhí)行查詢等。

6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

第4頁/共93頁②Jet引擎Jet引擎實際是一組動態(tài)鏈接庫(DLL)文件。在運行時,這些文件被鏈接到VB程序。它把應(yīng)用程序的請求翻譯成.mdb(Access文件后綴)文件或其他數(shù)據(jù)庫的物理操作。Jet引擎真正讀取、寫入和修改數(shù)據(jù)庫,并處理所有內(nèi)部事務(wù),如索引、鎖定、安全性和引用完整性。Jet引擎包含一個查詢處理器,接收并執(zhí)行SQL查詢,實現(xiàn)所需的數(shù)據(jù)操作。6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

第5頁/共93頁③數(shù)據(jù)庫數(shù)據(jù)庫是包含數(shù)據(jù)庫表的一個或多個文件。本地VB或Access數(shù)據(jù)庫文件后綴為.mdb文件。(2)數(shù)據(jù)庫應(yīng)用程序的存放在單系統(tǒng)機中數(shù)據(jù)庫、數(shù)據(jù)引擎和用戶界面集中存放。在客戶機/服務(wù)器系統(tǒng)中,數(shù)據(jù)庫引擎和數(shù)據(jù)庫一起被放置在服務(wù)器上。數(shù)據(jù)庫引擎可以同時對多個客戶機的應(yīng)用程序提供服務(wù)、操作數(shù)據(jù)庫并對每個本地應(yīng)用程序返回所請求的記錄。6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

第6頁/共93頁6.1數(shù)據(jù)庫設(shè)計基礎(chǔ)

數(shù)據(jù)庫數(shù)據(jù)庫引擎用戶界面服務(wù)器客戶機客戶機/服務(wù)器引擎,通過ODBC方式使用。在VB中,通過連接到ODBC數(shù)據(jù)源,如MicrosoftSQLServer等,可直接把查詢傳遞給服務(wù)器數(shù)據(jù)庫引擎。第7頁/共93頁

VB中創(chuàng)建和訪問數(shù)據(jù)庫的途徑主要有3個:可視化數(shù)據(jù)管理器使用可視化數(shù)據(jù)管理器,不需要編程就可以創(chuàng)建Jet數(shù)據(jù)庫。DAO使用VB的DAO部件通過編程的方法創(chuàng)建數(shù)據(jù)庫。ISAM或ODBC

VB可通過ISAM或ODBC驅(qū)動程序來訪問外部數(shù)據(jù)庫數(shù)據(jù)庫。6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)第8頁/共93頁1.可視化數(shù)據(jù)管理器數(shù)據(jù)管理器(DataManager)是VB的一個傳統(tǒng)成員;用于快速地建立數(shù)據(jù)庫結(jié)構(gòu)及數(shù)據(jù)庫內(nèi)容??梢酝瓿捎嘘P(guān)數(shù)據(jù)庫的操作,比如數(shù)據(jù)庫結(jié)構(gòu)的建立、記錄的添加及修改以及用ODBC連接到服務(wù)器端的數(shù)據(jù)庫如SQLServer等。啟動數(shù)據(jù)管理器選擇“外接程序”菜單下的“可視化數(shù)據(jù)管理器”項就可以啟動數(shù)據(jù)管理器,打開“VisData”窗口。6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)第9頁/共93頁

2)工具欄按鈕6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)數(shù)據(jù)庫窗口SQL語句窗口顯示數(shù)據(jù)庫的結(jié)構(gòu),包括表名、列名、索引可輸入SQL命令,對數(shù)據(jù)庫中的表進(jìn)行查詢操作VisData窗口

第10頁/共93頁6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)設(shè)置記錄集的訪問方式指定數(shù)據(jù)表中數(shù)據(jù)的顯示方式進(jìn)行事務(wù)處理第11頁/共93頁6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)表類型記錄集按鈕,允許直接對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行增、刪、改、查等操作。動態(tài)集類型記錄集按鈕,將指定的數(shù)據(jù)打開并讀入到內(nèi)存中,進(jìn)行數(shù)據(jù)編輯操作??煺疹愋陀涗浖?只能讀數(shù)據(jù)不能修改,適用于只查詢的情況第12頁/共93頁6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)指定數(shù)據(jù)表中數(shù)據(jù)的顯示方式,在新窗體上使用DATA控件指定數(shù)據(jù)表中數(shù)據(jù)的顯示方式,在新窗體上不使用DATA控件指定數(shù)據(jù)表中數(shù)據(jù)的顯示方式,在新窗體上使用DBGrid控件進(jìn)入第13頁/共93頁2.具體實現(xiàn)1)建立數(shù)據(jù)庫數(shù)據(jù)庫student.mdb(學(xué)生數(shù)據(jù)庫)中的表定義:

學(xué)生成績表(學(xué)號,課程,成績,學(xué)期)。6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)

學(xué)生成績表結(jié)構(gòu)字段名類型寬度學(xué)號Text6課程Text10成績Long4學(xué)期Text2第14頁/共93頁基本情況表(學(xué)號,姓名,性別,專業(yè),出生年月,照片,備注)6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)學(xué)生基本情況表結(jié)構(gòu)字段名類型寬度學(xué)號Text6姓名Text10性別Text2專業(yè)Text10出生年月Date8照片Binary0備注Memo0第15頁/共93頁2)錄入數(shù)據(jù)照片的輸入:靜態(tài)設(shè)置:通過一個圖片編輯程序?qū)⒄掌b入剪貼板,等待從剪貼板復(fù)制到Picture1控件。動態(tài)設(shè)置:通過Picture1_DblClick事件來完成剪貼板到Picture1控件的復(fù)制,當(dāng)移動記錄指針時,Picture1控件內(nèi)的照片存入數(shù)據(jù)庫。PrivateSubPicture1_DblClick()Picture1.Picture=Clipboard.GetDataEndSub6.3.1數(shù)據(jù)控件屬性第16頁/共93頁3)建立查詢VB的數(shù)據(jù)管理器提供了一個圖形化的設(shè)置查詢條件的窗口——查詢生成器。例如:查詢AuthorsID=10或AuthorsID=1的情況6.2本地數(shù)據(jù)庫設(shè)計(ACCESS)進(jìn)入第17頁/共93頁Data控件數(shù)據(jù)控件提供有限的不需編程而能訪問現(xiàn)存數(shù)據(jù)庫的功能,允許將VisualBasic的窗體與數(shù)據(jù)庫方便地進(jìn)行連接。使用數(shù)據(jù)控件獲取數(shù)據(jù)庫中記錄的集合,先在窗體上畫出控件,再通過它的三個基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問的數(shù)據(jù)資源。6.3數(shù)據(jù)控件第18頁/共93頁1.Connect屬性Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫類型,VisualBasic默認(rèn)的數(shù)據(jù)庫是Access的MDB文件,也可連接ODBC等類型的數(shù)據(jù)庫。Access數(shù)據(jù)庫的所有表都包含在一個MDB文件中。6.3.1數(shù)據(jù)控件屬性第19頁/共93頁2.DatabaseName屬性DatabaseName屬性指定具體使用的數(shù)據(jù)庫文件名,包括文件所在的路徑名。數(shù)據(jù)庫中的基本表名可由RecordSource屬性指定。例如,要連接一個MicrosoftAccess的數(shù)據(jù)庫存放在C:\Student.mdb.設(shè)置DatabaseName=”C:\Student.mdb“,該方法可以通過屬性欄設(shè)置,或在過程中指定.在過程中可以使用相對路徑來描述,DatabaseName=”..\Student.mdb“。6.3.1數(shù)據(jù)控件屬性第20頁/共93頁3.RecordSource屬性RecordSource確定具體可訪問的記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個表名或者是使用SQL查詢語言的一個查詢。例如,指定Student.mdb數(shù)據(jù)庫中的基本情況表:RecordSource=”基本情況”。例如,訪問基本情況表中所有物理系學(xué)生的數(shù)據(jù)。RecordSource=”SelectFrom基本情況Where專業(yè)=’物理’

”,6.3.1數(shù)據(jù)控件屬性第21頁/共93頁4.RecordsetType屬性RecordsetType屬性確定記錄集類型,可靜態(tài)或動態(tài)設(shè)定。(1)Table:表記錄集類型,一個記錄集(單個表)(2)Dynaset:動態(tài)集類型,一個動態(tài)記錄集(多個表),默認(rèn)值。(3)Snapshot:快照類型,一個記錄集靜態(tài)副本(不可改)6.3.1數(shù)據(jù)控件屬性第22頁/共93頁5.EofAction和BofAction屬性可靜態(tài)或動態(tài)設(shè)定。當(dāng)記錄指針指向Recordset對象的開始(第一個記錄前)或結(jié)束(最后一個記錄后)時,BofAction和EofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。操作屬性的取值如表6.1所示。6.3.1數(shù)據(jù)控件屬性第23頁/共93頁6.3.1數(shù)據(jù)控件屬性屬性值設(shè)置操作BofAction0vbBOFActionMoveFirst控件重定位到第1個記錄(缺省)1vbBOFActionBOF移過Recordset的開始位,定位到一個無效記錄;將在第一個記錄上觸發(fā)Data控件的Validate事件,緊跟著是非法(BOF)記錄上的Reposition事件。此刻禁止Data控件上的MovePrevious按鈕。焦點將從一個記錄轉(zhuǎn)換到另一個記錄之前,Validate事件發(fā)生

該事件發(fā)生在某行變?yōu)楫?dāng)前行之后

第24頁/共93頁6.3.1數(shù)據(jù)控件屬性屬性值設(shè)置操作EofAction0vbEOFActionMoveLast控件重定位到最后一個記錄(缺省)1vbEOFActionEOF移過Recordset的結(jié)尾,定位到一個無效記錄;在最后一個記錄上觸發(fā)Data控件的Validate事件,緊跟著是在非法(EOF)記錄上的事件

Reposition.此刻禁止Data控件上的MoveNext按鈕.2vbEOFActionAddNew移過最后一個記錄,在當(dāng)前記錄上觸發(fā)Data控件的Validate事件,緊跟著是自動的AddNew,向記錄集加入新的空記錄,接下來是在新記錄上的Reposition事件,移動記錄指針,新記錄寫入數(shù)據(jù)庫.第25頁/共93頁6.與數(shù)據(jù)控件綁定數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過能與它綁定的控件來實現(xiàn)。可與數(shù)據(jù)控件綁定的控件對象有:文本框、標(biāo)簽、圖像框、圖形框、列表框、組合框、復(fù)選框、網(wǎng)格、DB列表框、DB組合框、DB網(wǎng)格和OLE容器等。要使綁定控件能被數(shù)據(jù)庫約束,必需在靜態(tài)或動態(tài)時對上述控件的兩個屬性進(jìn)行設(shè)置:DataSource屬性該屬性通過指定—個有效的數(shù)據(jù)控件連接到一個數(shù)據(jù)庫上。DataField屬性該屬性設(shè)置數(shù)據(jù)庫有效的字段與綁定控件建立聯(lián)系。6.3.1數(shù)據(jù)控件屬性第26頁/共93頁數(shù)據(jù)控件在裝入數(shù)據(jù)庫時,它把記錄集的第一個記錄作為當(dāng)前記錄。當(dāng)上述控件與數(shù)據(jù)控件綁定后,VB將當(dāng)前記錄的字段值賦給控件。綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系如圖下示。6.3.1數(shù)據(jù)控件屬性綁定控件數(shù)據(jù)庫第27頁/共93頁例6.2設(shè)計一個窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。要顯示基本情況表中除了備注字段外的6個字段,故需要用6個綁定控件與之對應(yīng)。這里用一個圖形框顯示照片和5個文本框顯示學(xué)號、姓名等數(shù)據(jù)。6.3.1數(shù)據(jù)控件屬性進(jìn)入第28頁/共93頁數(shù)據(jù)控件Data1屬性設(shè)置Connect屬性指定為Access類型DatabaseName屬性連接數(shù)據(jù)庫Student.mdbRecordSource屬性設(shè)置為“基本情況”表。圖片框和5個文本框控件屬性設(shè)置Text1~Text5的DataSource屬性設(shè)置成Data1。Text1~Text5的DataField屬性分別選擇與其對應(yīng)的字段學(xué)號、姓名、性別、專業(yè)和出生年月。Picture1的DataField屬性選擇字段照片6.3.1數(shù)據(jù)控件屬性進(jìn)入第29頁/共93頁例6.3用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。6.3.1數(shù)據(jù)控件屬性進(jìn)入第30頁/共93頁MsFlexGrid控件不是VisualBasic工具箱內(nèi)的默認(rèn)控件,需要在開發(fā)環(huán)境中選擇“工程|部件”菜單命令,并在隨即出現(xiàn)的對話框中選擇“MicrosoftFlexGridControl6.0”選項,將其添加到工具箱中。數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個Data控件,運行時網(wǎng)格控件的列標(biāo)題會用Data控件的記錄集里的數(shù)據(jù)自動地設(shè)置。6.3.1數(shù)據(jù)控件屬性第31頁/共93頁

DataSource=Data1FixedCols=0MSFlexGrid1DatabaseName=”c:\student.mdb”RecordsetType=1RecordSource=”基本情況”Data1其它屬性設(shè)置默認(rèn)控件名表6.4控件屬性本例所用控件的屬性設(shè)置如下表所示。6.3.1數(shù)據(jù)控件屬性注意:不可卷動列屬性FixedCols=0與FixedCols=1的區(qū)別進(jìn)入第32頁/共93頁1.Reposition事件Reposition事件激活的條件:當(dāng)記錄集指針從一條記錄移到另一條記錄,會產(chǎn)生Reposition事件。Reposition事件作用:顯示當(dāng)前指針的位置。6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubData1_Reposition()Data1.Caption=Data1.Recordset.AbsolutePosition+1EndSubAbsolutePosition屬性指示當(dāng)前指針值(從0開始)。當(dāng)單擊數(shù)據(jù)控件對象上的箭頭按鈕時,數(shù)據(jù)控件的標(biāo)題區(qū)會顯示記錄的序號第33頁/共93頁2.Validate事件Validate事件激活的方法:在焦點轉(zhuǎn)換到一個(第二個)控件之前發(fā)生。該控件CausesValidation屬性默認(rèn)值設(shè)置為True。Validate事件的作用:用于檢查被數(shù)據(jù)控件綁定控件的狀態(tài),例如,由一個記錄移到另一個記錄;或者焦點由一個文本框移到另一個文本框.6.3.2數(shù)據(jù)控件的事件和常用方法第34頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法例題:在窗體中放置一個CommandButton和兩個TextBox控件,來演示Validate

事件和CausesValidation屬性的使用。限制條件為:如果Text1沒有包含日期或Text2沒有包含一個小于10的數(shù)字,將阻止焦點的轉(zhuǎn)換。兩個TextBox控件的CausesValidation屬性在缺省情況為True,這樣當(dāng)把焦點從一個TextBox轉(zhuǎn)換到另一個時,Validate事件發(fā)生。進(jìn)入第35頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法部分屬性方法的使用:(1)控件對象.SetFocus為控件對象設(shè)置焦點,例如:Text1.SetFocus(2)KeepFocus保持或取消焦點,例如:KeepFocus

=True(3)Show顯示指定的窗體或控件,可以配合KeepFocus方法設(shè)置控件的焦點。(4)Val(Text2.Text)將控件對象的字符屬性轉(zhuǎn)換為數(shù)值屬性(5)NotIsDate(控件對象.Text)判斷對象的屬性是否為日期類型,如是返回Ture(6)NotIsNumeric

(控件對象.Text)判斷對象的屬性是否為數(shù)值,如是返回Ture第36頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubForm_Load()Command1.CausesValidation=False

‘設(shè)置該屬性為False,當(dāng)用戶單擊按鈕時Validate事件不發(fā)生。Command1.Caption="Help"Show'顯示FromText1.SetFocus

'。EndSub為Text1設(shè)置焦點第37頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubCommand1_Click()

‘當(dāng)單擊此按鈕時給出用戶幫助信息。MsgBox_

"Text1必須為日期類型的數(shù)"&vbCrLf&_"Text2必須為小于或等于10的數(shù)."EndSub回車換行第38頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubText1_Validate(KeepFocusAsBoolean)

‘如果值不是一個日期,則保持焦點,除非用戶單擊Help。IfNotIsDate(Text1.Text)ThenKeepFocus=TrueMsgBox"請在這里輸入日期.",,"Text1"EndifEndSub返回Boolean值指明某表達(dá)式是否為日期類型。

第39頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubText2_Validate(KeepFocusAsBoolean)

‘如果值是一個大于10的數(shù)字,保持焦點。

IfNotIsNumeric(Text2.Text)OrVal(Text2.Text)>10ThenKeepFocus=TrueMsgBox_"請輸入一個小于或等于10的數(shù).",,"Text2"EndIfEndSub返回Boolean值指明表達(dá)式的值是否為數(shù)字。進(jìn)入第40頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法Validate事件的檢查方法:在一條不同的記錄成為當(dāng)前記錄之前,Update、Delete、Unload、Find或Close方法操作之前會均會發(fā)生Validate事件。通過Save參數(shù)(True或False)判斷被連接的數(shù)據(jù)(被綁定的控件)

是否發(fā)生變化。Action是一個整數(shù),用來指示引發(fā)Validate事件的操作。通過Action參數(shù)判斷哪一種操作觸發(fā)了Validate事件。第41頁/共93頁

6.3.2數(shù)據(jù)控件的事件和常用方法

Validate事件的Action參數(shù)

常數(shù)值描述vbDataActionCancel0Sub退出時取消操作vbDataActionMoveFirst1MoveFirst方法。vbDataActionMovePrevious2MovePrevious方法vbDataActionMoveNext3MoveNext方法vbDataActionMoveLast4MoveLast方法。vbDataActionAddNew5AddNew方法第42頁/共93頁

6.3.2數(shù)據(jù)控件的事件和常用方法

Validate事件的Action參數(shù)

常數(shù)值描述vbDataActionUpdate6Update操作。vbDataActionDelete7Delete方法vbDataActionFind8Find方法vbDataActionBookmark9Bookmark屬性已被設(shè)置vbDataActionClose10Close的方法vbDataActionUnload11窗體正在卸載。保存對Recorded對象的當(dāng)前記錄所做的所有更改。第43頁/共93頁例如,不允許用戶在數(shù)據(jù)瀏覽時清空性別數(shù)據(jù),可使用下列代碼:6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubData1_Validate(ActionAsInteger,_SaveAsInteger)IfSaveAndLen(Trim(Text3.Text))=0ThenAction=0'取消本次移動記錄指針的操作MsgBox"性別不能為空!"EndIfEndSub

檢查控件Text3內(nèi)的數(shù)據(jù)是否被清空。如果Text3內(nèi)數(shù)據(jù)發(fā)生變化,則Save參數(shù)返回True,若性別對應(yīng)的文本框Text3被置空,則通過Action=0取消對數(shù)據(jù)控件指針移動的操作去除前導(dǎo)空格和末尾空格第44頁/共93頁3.?dāng)?shù)據(jù)控件的常用方法數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問這些屬性。1)Refresh方法當(dāng)RecordSource在運行時被改變時,使用Refresh方法,將當(dāng)前指定RecordSource中的數(shù)據(jù)裝入內(nèi)存工作區(qū),達(dá)到激活數(shù)據(jù)庫中一個表的作用。6.3.2數(shù)據(jù)控件的事件和常用方法第45頁/共93頁6.3.2數(shù)據(jù)控件的事件和常用方法PrivateSubForm_Load()DimMpathAsStringMpath=App.Path’獲取當(dāng)前路徑Data1.DatabaseName=mpath+”/”+”Student.mdb”

’連接Student數(shù)據(jù)庫

Data1.RecordSource=‘基本情況’

’連接基本情況表

Data1.Refresh’激活數(shù)據(jù)控件所連接的表EndSubApp

對象是通過關(guān)鍵字App訪問的全局對象。它指定如下信息:應(yīng)用程序的標(biāo)題、版本信息、可執(zhí)行文件的路徑及名稱以及是否運行前一個應(yīng)用程序的示例。Path返回或設(shè)置當(dāng)前路徑,在編程時無效,運行時有效。第46頁/共93頁2)UpdateControls方法UpdateControls方法從數(shù)據(jù)庫中重新讀數(shù)據(jù)送到被數(shù)據(jù)控件綁定的控件內(nèi)。6.3.2數(shù)據(jù)控件的事件和常用方法控件DATA控件數(shù)據(jù)庫控件DATA控件數(shù)據(jù)庫

3)UpdateRecord方法對綁定控件內(nèi)的數(shù)據(jù)修改后,數(shù)據(jù)控件需要移動記錄集的指針才能保存修改。如果使用UpdateRecord方法,可強制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫入到數(shù)據(jù)庫中,而不再觸發(fā)Validate事件。第47頁/共93頁記錄集Recordset常用的屬性和方法。1.AbsolutePosition屬性AbsolutePosition返回當(dāng)前指針值,如果是第1條記錄,其值為0,該屬性為只讀屬性。2.Bof和Eof的屬性Bof判定記錄指針是否在首記錄之前,若Bof為True,則當(dāng)前位置位于記錄集的第1條記錄之前。Eof判定記錄指針是否在末記錄之后,若Eof為True,則當(dāng)前位置位于記錄集的最后1條記錄之后。6.3.3記錄集的屬性和方法6.3.2數(shù)據(jù)控件的事件和常用方法第48頁/共93頁3.Bookmark屬性Bookmark屬性的值采用字符串類型,用于設(shè)置或返回當(dāng)前指針的標(biāo)簽。在程序中可使用Bookmark屬性重定位記錄集的指針。4.Nomatch屬性在記錄集中進(jìn)行查找時,如果找到相匹配的記錄,則Recordset的NoMatch屬性為False,否則為True。5.RecordCount屬性RecordCount屬性對Recordset對象中的記錄計數(shù),使用RecordCount屬性可確定Recordset對象中記錄的數(shù)目。6.3.3記錄集的屬性和方法第49頁/共93頁6.Move方法

五種Move方法是:MoveFirst將控件移動到第1條記錄。MoveLast

將控件移動到最后一條記錄。MoveNext

將控件移動到后一條記錄。MovePrevious

將控件移動到前一條記錄。Move[n]

向前或向后移n條記錄,n為指定的數(shù)值。6.3.3記錄集的屬性和方法第50頁/共93頁例6.4設(shè)計一個窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。在窗體上用4個命令按鈕實現(xiàn)對數(shù)據(jù)庫的操作。圖6.10用按鈕代替數(shù)據(jù)控件對象的箭頭按鈕6.3.3記錄集的屬性和方法第51頁/共93頁命令按鈕Command1_Click事件移至第1條記錄,代碼如下:6.3.3記錄集的屬性和方法命令按鈕Command4_Click事件移至最后一條記錄,代碼如下:PrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSubPrivateSubCommand1_Click()Data1.Recordset.MoveFirstEndSub第52頁/共93頁使用Move方法需要考慮Recordset對象的邊界狀態(tài)。如果越界,則用MoveFirst方法定位到第1條記錄或用MoveLast方法定位到最后一條記錄。使用MoveFirst方法定位到第1條記錄:6.3.3記錄集的屬性和方法PrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThenData1.Recordset.MoveFirstEndSub第53頁/共93頁使用MoveLast方法定位到最后一條記錄:6.3.3記錄集的屬性和方法PrivateSubCommand3_Click()Data1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub第54頁/共93頁7.Find方法使用Find方法可在Recordset對象中查找與指定條件相符的一條記錄,并使之成為當(dāng)前記錄。四種Find方法是:FindFirst方法從記錄集的開始查找滿足條件的第1條記錄。FindLast方法從記錄集的尾部向前查找滿足條件的第l條記錄。FindNext方法從當(dāng)前記錄開始查找滿足條件的下一條記錄。FindPrevious方法從當(dāng)前記錄開始查找滿足條件的上一條記錄。6.3.3記錄集的屬性和方法第55頁/共93頁Find方法的語法格式:4種格式相同

數(shù)據(jù)集.Find方法條件表達(dá)式條件表達(dá)式:是一個指定字段與常量關(guān)系的字符串表達(dá)式。在構(gòu)造表達(dá)式時,除了用普通的關(guān)系運算外,還可以用Like運算符例如,查找專業(yè)=物理的紀(jì)錄

“Data1.Recordset.FindFirst專業(yè)=’物理’”查找下一條符合條件的記錄,可繼續(xù)使用語句:

”Data1.Recordset.FindNext專業(yè)=’物理’”。6.3.3記錄集的屬性和方法“=”用于精確查找第56頁/共93頁例如,要在記錄集內(nèi)查找專業(yè)名稱中帶有“建”字的專業(yè):

Data1.Recordset.FindFirst專業(yè)Like‘%建%’如果Find方法找不到相匹配的記錄,則記錄保持在查找的始發(fā)處,Recordset的NoMatch屬性為True。如果Find方法找到相匹配的記錄,則記錄定位到該記錄,Recordset的NoMatch屬性為False。6.3.3記錄集的屬性和方法“Like”用于模糊查找第57頁/共93頁6.3.3記錄集的屬性和方法PrivateSubCommand1_Click()Data1.Recordset.FindFirst“

course=‘English’”IfData1.Recordset.NoMatchThenMsgBox“Nosuchrecordfound”ElseMsgBoxData1.Recordset.Fields(“course”)EndIfEndSub第58頁/共93頁8.Seek方法Seek方法:是根據(jù)索引字段的值,查找與指定索引規(guī)則相符的第1條記錄,并使之成為當(dāng)前記錄。其語法格式為:

數(shù)據(jù)表對象.seekcomparison,keyl,key2…比較運算符comparison,可用的比較運算符有:=、>=、>、<>、<、<=Seek允許接受多個參數(shù)keyl,key2,…;在使用Seek方法定位記錄時,必須打開索引文件,通過Index屬性設(shè)置索引文件。若在記錄集中多次使用同樣的Seek方法(參數(shù)相同),那么找到的總是同一條記錄。6.3.3記錄集的屬性和方法第59頁/共93頁例如,假設(shè)數(shù)據(jù)庫Student內(nèi)基本情況表的索引字段為學(xué)號,滿足學(xué)號字段值大于等于200301的第1條記錄可使用以下程序代碼:6.3.3記錄集的屬性和方法

DimDbAsDatabase,RsAsRecordset'定義變量

SetDb=OpenDatabase("student.mdb")SetRs=Db.OpenRecordset("基本情況表")SetData1.Recordset=Rs'為Recordset賦值

Data1.Recordset.Index="學(xué)號"'打開名稱為“學(xué)號”的索引

Data1.Recordset.Seek">","200301"IfData1.Recordset.NoMatchThenMsgBox"Nosuchrecordfound"ElseMsgBoxData1.Recordset.Fields("學(xué)號")EndIf第60頁/共93頁數(shù)據(jù)庫記錄的增、刪、改操作需要使用AddNew、Delete、Edit和Update方法。它們的語法格式為:

數(shù)據(jù)控件.記錄集.方法名1.增加記錄

①調(diào)用AddNew方法。②給各字段賦值。給字段賦值格式為:Recordset.Fields(”字段名”)=值。③調(diào)用Update方法,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫入數(shù)據(jù)庫。6.3.4數(shù)據(jù)庫記錄的增刪改操作第61頁/共93頁1.增加記錄PrivateSubcmdadd_Click()

Data1.Recordset.AddNewFori=0To5Text1(i).Enabled=TrueText1(i).Text=""NextiText1(0).SetFocusEndSub注:控件對象.EnabledEnabled是設(shè)置激活或者禁用控件對象,=True表示激活,=false表示禁止6.3.4數(shù)據(jù)庫記錄的增刪改操作增加新記錄第62頁/共93頁PrivateSubcmdsave_Click()IfText1(0).Text=""ThenMsgBox“學(xué)號不能為空!"Text1(0).SetFocusExitSubEndIfData1.Recordset.Fields(“學(xué)號")=Text1(0).TextData1.Recordset.Fields(“姓名")=Text1(1).TextData1.Recordset.Fields(“性別")=Text1(2).TextData1.Recordset.Fields(“年齡")=Text1(3).TextData1.Recordset.Fields(“系別")=Text1(4).TextData1.Recordset.Fields(“入學(xué)成績")=Text1(5).TextData1.Recordset.UpdateEndSub

6.3.4數(shù)據(jù)庫記錄的增刪改操作給各字段賦值調(diào)用Update方法第63頁/共93頁

如果使用AddNew方法添加新的記錄,但是沒有使用Update方法而移動到其他記錄,或者關(guān)閉記錄集,那么所做的輸入將全部丟失,而且沒有任何警告。當(dāng)調(diào)用Update方法寫入記錄后,記錄指針自動返回到添加新記錄前的位置上,而不顯示新記錄。因此,需要在調(diào)用Update方法后,使用MoveLast方法將記錄指針再次移到新記錄上。6.3.4數(shù)據(jù)庫記錄的增刪改操作第64頁/共93頁2.刪除記錄

①定位被刪除的記錄使之成為當(dāng)前記錄。②調(diào)用Delete方法。③移動記錄指針。在使用Delete方法時,當(dāng)前記錄立即刪除,不加任何的警告或者提示。刪除一條記錄后,被數(shù)據(jù)庫所約束的綁定控件仍舊顯示該記錄的內(nèi)容。因此,必須移動記錄指針?biāo)⑿陆壎丶?,一般采用移至下一記錄的處理方法。在移動記錄指針后,?yīng)該檢查Eof屬性6.3.4數(shù)據(jù)庫記錄的增刪改操作第65頁/共93頁2.刪除記錄PrivateSubcmddelete_Click()

DimmyvalAsStringmyval=MsgBox("是否要刪除該記錄?",vbYesNo)Ifmyval=vbYesThenData1.Recordset.DeleteData1.Recordset.MoveNextEndIfIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndIfEndSub6.3.4數(shù)據(jù)庫記錄的增刪改操作刪除記錄第66頁/共93頁3.編輯記錄數(shù)據(jù)控件自動提供了修改現(xiàn)有記錄的能力,當(dāng)直接改變被數(shù)據(jù)庫所約束的綁定控件的內(nèi)容后,需單擊數(shù)據(jù)控件對象的任一箭頭按鈕來改變當(dāng)前記錄,確定所做的修改。使用程序代碼修改當(dāng)前記錄步驟的為:

①調(diào)用Edit方法。②給各字段賦值。③調(diào)用Update方法,確定所做的修改。如果要放棄對數(shù)據(jù)的所有修改,可用updatecontrols方法,重讀數(shù)據(jù)庫的數(shù)據(jù),沒有調(diào)用Update方法,數(shù)據(jù)的修改沒有寫入數(shù)據(jù)庫的表中。6.3.4數(shù)據(jù)庫記錄的增刪改操作第67頁/共93頁3.編輯記錄PrivateSubcmdedit_Click()Fori=0To5Text1(i).Enabled=TrueNextIData1.Recordset.Edit;EndSub6.3.4數(shù)據(jù)庫記錄的增刪改操作編輯當(dāng)前記錄第68頁/共93頁PrivateSubcmdsave_Click()Data1.Recordset.Fields(“學(xué)號")=Text1(0).TextData1.Recordset.Fields(“姓名")=Text1(1).TextData1.Recordset.Fields(“性別")=Text1(2).TextData1.Recordset.Fields(“年齡")=Text1(3).TextData1.Recordset.Fields(“系別")=Text1(4).TextData1.Recordset.Fields(“入學(xué)成績")=Text1(5).TextData1.Recordset.UpdateEndSub

6.3.4數(shù)據(jù)庫記錄的增刪改操作給各字段賦值調(diào)用Update方法第69頁/共93頁4.放棄編輯記錄如果要放棄對數(shù)據(jù)的所有修改,可用updatecontrols方法,重讀數(shù)據(jù)庫的數(shù)據(jù),沒有調(diào)用Update方法,數(shù)據(jù)的修改沒有寫入數(shù)據(jù)庫,所以這樣的記錄會在刷新記錄集時丟失。PrivateSubcmdcancel_Click()

Data1.UpdateControlsData1.Recordset.MoveFirstEndSub6.3.4數(shù)據(jù)庫記錄的增刪改操作放棄修改第70頁/共93頁圖6.11編程建立增、刪、改、查功能例6.5設(shè)計一個窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。并加入“新增”、“刪除”、“修改”、“放棄”和“查找”鈕,通過對5個按紐的編程建立增、刪、改、查功能。6.3.4數(shù)據(jù)庫記錄的增刪改操作進(jìn)入第71頁/共93頁Command1_Click事件的功能:當(dāng)按鈕提示為“新增”時調(diào)用AddNew方法,并將提示文字改為“確認(rèn)”,同時使“刪除”按鈕Command2、“修改”按鈕Command3和“查找”按鈕Command5不可用,而使“放棄”按鈕Command4可用。新增記錄后,需再次單擊Command1調(diào)用Update方法確認(rèn)添加的記錄,再將提示文字改為“新增”,并使“刪除”、“修改”和“查找”按鈕可用,而使“放棄”按鈕不可用。OnErrorResumeNext語句表示在程序運行時發(fā)生錯誤,忽略錯誤行,繼續(xù)執(zhí)行下一語句。6.3.4數(shù)據(jù)庫記錄的增刪改操作第72頁/共93頁

6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubCommand1_Click()OnErrorResumeNext。Command2.Enabled=NotCommand2.EnabledCommand3.Enabled=NotCommand3.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.Enabled第73頁/共93頁

6.3.4數(shù)據(jù)庫記錄的增刪改操作IfCommand1.Caption="新增"ThenCommand1.Caption=“確認(rèn)”

Data1.Recordset.AddNewText1.SetFocusElseCommand1.Caption="新增"

Data1.Recordset.UpdateData1.Recordset.MoveLastEndIfEndSub第74頁/共93頁命令按鈕Command2_Click事件功能:調(diào)用方法刪除當(dāng)前記錄。當(dāng)記錄集中的記錄全部被刪除后,再執(zhí)行Move語句將發(fā)生錯誤,這時由OnErrorResumeNext語句處理錯誤。

6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubCommand2_Click()

OnErrorResumeNextData1.Recordset.DeleteData1.Recordset.MoveNext

IfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub第75頁/共93頁命令按鈕Command3_Click事件的功能:根據(jù)按鈕提示文字調(diào)用Edit方法進(jìn)入編輯狀態(tài)或調(diào)用Update方法將修改后的數(shù)據(jù)寫入到數(shù)據(jù)庫,并控制其他3個按鈕的可用性,代碼如下:

6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubCommand3_Click()OnErrorResumeNextCommand1.Enabled=NotCommand1.EnabledCommand2.Enabled=NotCommand2.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.Enabled第76頁/共93頁

6.3.4數(shù)據(jù)庫記錄的增刪改操作IfCommand3.Caption="修改"ThenCommand3.Caption="確認(rèn)"

Data1.Recordset.EditText1.SetFocusElseCommand3.Caption="修改"

Data1.Recordset.UpdateEndIfEndSub第77頁/共93頁命令按鈕Command4_Click事件的功能:使用UpdateControls方法放棄操作,代碼如下:6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubCommand4_Click()OnErrorResumeNextCommand1.Caption="新增"

Command3.Caption="修改"第78頁/共93頁

6.3.4數(shù)據(jù)庫記錄的增刪改操作Command1.Enabled=TrueCommand2.Enabled=TrueCommand3.Enabled=TrueCommand4.Enabled=falseCommand5.Enabled=TrueData1.UpdateControlsDala1.Recordset.MoveNextEndSub第79頁/共93頁命令按鈕Command5_Click事件的功能:根據(jù)輸入專業(yè)使用SQL語句查找記錄,代碼如下:6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubCommand5_Click()DimmzyAsStringmzy=InputBox$("請輸入專業(yè)","查找窗")

Data1.RecordSource="Select*From基本情況_Where專業(yè)='"&mzy&"'"Data1.Refresh第80頁/共93頁上面的代碼給出了數(shù)據(jù)表內(nèi)數(shù)據(jù)處理的基本方法6.3.4數(shù)據(jù)庫記錄的增刪改操作

IfData1.Recordset.EOFThenMsgBox"無此專業(yè)!",,"提示"

Data1.RecordSource=“基本情況”

Data1.RefreshEndIfEndSub第81頁/共93頁使用Data1_Validate事件過濾無效記錄單擊數(shù)據(jù)控件的箭頭按鈕可改變當(dāng)前記錄,完成添加新記錄或?qū)σ延杏涗浀男薷?。單擊?shù)據(jù)控件的箭頭按鈕時會觸發(fā)Validate事件,在該事件中,可以根據(jù)Action取值(14)來判斷單擊了數(shù)據(jù)控件哪一個箭頭按鈕。例如,對學(xué)號字段進(jìn)行測試,如果學(xué)號為空則輸入無效。在例6.5中被學(xué)號字段所約束的綁定控件是Text1,可用Text1.DataChanged屬性檢測Text1控件所對應(yīng)的當(dāng)前記錄中的字段值的內(nèi)容是否發(fā)生了變化,Action=6表示Update操作。6.3.4數(shù)據(jù)庫記錄的增刪改操作第82頁/共93頁6.3.4數(shù)據(jù)庫記錄的增刪改操作PrivateSubData1_Validate(ActionAsInteger,SaveAsInteger)IfText1.Text=""And_(Action=6OrText1.DataChanged)

‘Action=6表示Update操作ThenMsgBox"數(shù)據(jù)不完整,必須要有學(xué)號!"

Data1.UpdateControls‘讀回原數(shù)據(jù)EndIf第83頁/共93頁

6.3.4數(shù)據(jù)庫記錄的增刪改操作IfAction>=1AndAction<=4ThenCommand1.Caption="新增"

Command3.Caption="修改"

Command1.Enabled=TrueCommand2.Enabled=Tru

溫馨提示

  • 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

提交評論