| | re:[b]2.[/b][b]注意事項[/b]...
2.注意事項 (1) 函數名的命名規則與變量命名規則相同;函數過(guò)程必須由函數名返回一個(gè)值。 (2) 如果函數體內沒(méi)有給函數名賦值,則返回對應類(lèi)型的缺省值,數值型返回0,字符型返回空字符串。 (3) 函數過(guò)程內部不得再定義Sub過(guò)程或Function過(guò)程。 例:編寫(xiě)一個(gè)計算N!的函數過(guò)程 3.Function過(guò)程的調用 調用Function過(guò)程與調用VB內部函數的方法一樣,即在表達式中寫(xiě)出它的名稱(chēng)和相應的實(shí)在參數。 語(yǔ)法: 過(guò)程名([實(shí)參列表]) 注意:(1)必須給參數加上括號,即使沒(méi)有參數也不可省略括號; (2)VB中也允許象調用Sub過(guò)程一樣來(lái)調用Function,但這樣就沒(méi)有返回值。 4.調用其他模塊中的過(guò)程 ?。?)調用窗體中的過(guò)程 從窗體模塊的外部調用窗體中的公有過(guò)程,必須用窗體的名字作為調用前綴。如: Call Form1.Examsub([實(shí)參表]) ?。?)調用標準模塊中的過(guò)程 如果在應用程序中,過(guò)程名是唯一的,則調用時(shí)不必加模塊名。如果有同名的,則在同一模塊內調用時(shí)可以不加模塊名,而在其他模塊中調用時(shí)必須加模塊名。 ?。?)類(lèi)模塊中的過(guò)程 調用類(lèi)模塊的公有過(guò)程時(shí),要求用指向該類(lèi)某一實(shí)例的變量修飾過(guò)程,即首先要聲明類(lèi)的實(shí)例為對象變量,并以此變量作為過(guò)程名前綴修飾詞,不可直接用類(lèi)名作為前綴修飾詞。 如:在類(lèi)模塊Class1中含有過(guò)程clssub,變量Democlass是類(lèi)Class1的一個(gè)實(shí)例,則調用clssub的方法是: Dim Democlass AS New Class1 Call Democlass.clasub 例:函數過(guò)程與子過(guò)程的異同,計算級數的部分和 1 + x + x2/2! +……+ xn/n! +……, |xn/n!| 6.3 參數的傳遞 1.形參與實(shí)參的概念 形參:指出現在Sub 和Function過(guò)程形參表中的變量名、數組名,過(guò)程被調用前,沒(méi)有分配內存,其作用是說(shuō)明自變量的類(lèi)型和形態(tài)以及在過(guò)程中的角色。形參可以是: 1)除定長(cháng)字符串變量之外的合法變量名; 2)后面跟()括號的數組名。 實(shí)參:是在調用Sub 和Function過(guò)程時(shí),傳送給相應過(guò)程的變量名、數組名、常數或表達式。在過(guò)程調用傳遞參數時(shí),形參與實(shí)參是按位置結合的,形參表和實(shí)參表中對應的變量名可以不必相同,但位置必須對應起來(lái)。 形參與實(shí)參的關(guān)系:形參如同公式中的符號,實(shí)參就是符號具體的值;調用過(guò)程:即實(shí)現形參與實(shí)參的結合,也就是把值代入公式進(jìn)行計算。 2. 按值傳遞參數(定義時(shí)加ByVal) 按值傳遞參數(Passed By Value)時(shí),是將實(shí)參變量的值復制一個(gè)到臨時(shí)存儲單元中,如果在調用過(guò)程中改變了形參的值,不會(huì )影響實(shí)參變量本身,即實(shí)參變量保持調用前的值不變。 3.按地址傳遞參數(定義時(shí)沒(méi)有修飾詞或帶關(guān)鍵字ByRef) 按地址傳遞參數時(shí),把實(shí)參變量的地址傳送給被調用過(guò)程,形參和實(shí)參共用內存的同一地址。在被調用過(guò)程中,形參的值一旦改變,相應實(shí)參的值也跟著(zhù)改變。如果實(shí)參是一個(gè)常數或表達式,VB會(huì )按“傳值”方式來(lái)處理。 4.數組參數 VB允許把數組作為形參出現在形參表中,語(yǔ)法: [b]形參數組名() [As [/b]數據類(lèi)型] 形參數組只能按地址傳遞參數,對應的實(shí)參也必須是數組,且數據類(lèi)型相同。調用過(guò)程時(shí),把要傳遞的數組名放在實(shí)參表中,數組名后面不跟圓括號。在過(guò)程中不可 以用Dim語(yǔ)句對形參數組進(jìn)行聲明,否則會(huì )產(chǎn)生“重復聲明”的錯誤。但在使用動(dòng)態(tài)數組時(shí),可以用ReDim語(yǔ)句改變形參數組的維界,重新定義數組的大小。 5. 對象參數 VB中可以向過(guò)程傳遞對象,在形參表中,把形參變量的類(lèi)型聲明為“Control”,可以向過(guò)程傳遞控件;若聲明為“Form”,則可向過(guò)程傳遞窗體。對象的傳遞只能按地址傳遞。 6.4 變量、過(guò)程的作用域 1. VB應用程序的組成: 2. 過(guò)程的作用域 作用范圍 模塊級 全局級 窗體 標準模塊 窗體 標準模塊 定義方式 過(guò)程名前加Private 例:Private Sub my1(形參表) 過(guò)程名前加Pubilc 或默認 例:[ Pubilc ] Sub my2(形參表) 能否被本模塊其他過(guò)程調用 能 能 能 能 能否被本應用程序其他模塊調用 不能 不能 能,但必須在過(guò)程名前加窗體名。例: Call 窗體名. My1(實(shí)參表) 能,但過(guò)程名必須唯一,否則需要加標準模塊名。例: Call 標準模塊名.My2(實(shí)參表) 3. 變量的作用域 作用范圍 局部變量 窗體/模塊級變量 全局變量 窗體 標準模塊 聲明方式 Dim、Static Dim、Private Public 聲明位置 在過(guò)程中 窗體/模塊的“通用聲明”段 窗體/模塊的“通用聲明”段 能否被本模塊其他過(guò)程存取 不能 能 能 能否被其他模塊存取 不能 不能 能,但在變量名前加窗體名 能 4.靜態(tài)變量 用Static聲明的靜態(tài)變量,在每次調用過(guò)程時(shí)保持原來(lái)的值,不重新初始化。而用Dim聲明的變量,每次調用過(guò)程時(shí),重新初始化 例:顯示1到5個(gè)數。 5.同名變量 對不同范圍內出現的同名變量,可以用模塊名加以區別。一般情況下,當變量名相同而作用域不同時(shí),優(yōu)先訪(fǎng)問(wèn)局限性大的變量。 6.5 遞歸過(guò)程 1.遞歸的概念 通俗的講,用自身的結構來(lái)描述自身就稱(chēng)為“遞歸”。如對階乘運算的定義就是遞歸的: n!=n(n-1)! (n-1)!=(n-1)(n-2)! 2.遞歸子過(guò)程和遞歸函數 VB 允許一個(gè)自定義子過(guò)程或函數過(guò)程在過(guò)程體的內部調用自己,這樣的子過(guò)程或函數就叫遞歸子過(guò)程和遞歸函數。遞歸過(guò)程包含了遞推和回歸兩個(gè)過(guò)程。構成遞歸的條件是: (1)遞歸結束條件和結束時(shí)的值 (2)能用遞歸形式表示,并且遞歸向結束條件發(fā)展。 例:編制程序求fac(n)=n!的函數 3.注意事項 (1)遞歸算法設計簡(jiǎn)單,但消耗的上機時(shí)間和占據的內存空間比非遞歸大 (2) 設計一個(gè)正確的遞歸過(guò)程或函數過(guò)程必須具備兩點(diǎn):1)具備遞歸條件;2)具備遞歸結束條件 (3) 一般而言,遞歸函數過(guò)程對于計算階乘、級數、指數運算有特殊效果。 | | | re:[b]第七章[/b][b] VB[/b]...
第七章 VB中的文件操作 7.1 文件系統控件 1. 文件系統控件種類(lèi) ?。?) 驅動(dòng)器列表框(DriveListBox):用來(lái)顯示當前機器上的所有盤(pán)符 (2) 目錄列表框(DirListBox):用來(lái)顯示當前盤(pán)上的所有文件夾 (3) 文件列表框(FileListBox):用來(lái)顯示當前文件夾下的所有文件名 2. 重要屬性 屬性 適用的控件 作用 示例 Drive 驅動(dòng)器列表框 包含當前選定的驅動(dòng)器名 Driver1. Drive="C" Path 目錄和文件列表框 包含當前路徑 Dir1.Path="C:\WINDOWS" FileName 文件列表框 包含選定的文件名 MsgBox File1.FileName Pattern 文件列表框 決定顯示的文件類(lèi)型 File1.Pattern="*.BMP" 3. 重要事件 事件 適用的控件 事件發(fā)生的時(shí)機 Change 目錄和驅動(dòng)器列表框 驅動(dòng)器列表框的Change事件是在選擇一個(gè)新的驅動(dòng)器或通過(guò)代碼改變Drive屬性的設置時(shí)發(fā)生 目錄列表框的Change事件是在雙擊一個(gè)新的目錄或通過(guò)代碼改變Path屬性的設置時(shí)發(fā)生 PathChange 文件列表框 當文件列表框的Path屬性改變時(shí)發(fā)生 PattenChange 文件列表框 當文件列表框的Pattern屬性改變時(shí)發(fā)生 Click 目錄和文件列表框 用鼠標單擊時(shí)發(fā)生 DblClick 文件列表框 用鼠標雙擊時(shí)發(fā)生 7.2 文件的讀寫(xiě) 1. 文件的有關(guān)概念 記錄:計算機處理數據的基本單位,由若干個(gè)相互關(guān)聯(lián)的數據項組成。相當于表格中的一行。 文件:記錄的集合,相當于一張表。 文件類(lèi)型:順序文件、隨機文件、二進(jìn)制文件。 訪(fǎng)問(wèn)模式:計算機訪(fǎng)問(wèn)文件的方式,VB中有順序、隨機、二進(jìn)制三種訪(fǎng)問(wèn)模式。 2. 順序訪(fǎng)問(wèn)模式 順序訪(fǎng)問(wèn)模式的規則最簡(jiǎn)單,指讀出或寫(xiě)入時(shí),從第一條記錄“順序”地讀到最后一條記錄,不可以跳躍式訪(fǎng)問(wèn)。該模式專(zhuān)門(mén)用于處理文本文件,每一行文本相當于一條記錄,每條記錄可長(cháng)可短,記錄與記錄之間用“換行符”來(lái)分隔。 順序文件的寫(xiě)入步驟:打開(kāi)、寫(xiě)入、關(guān)閉; 讀出步驟:打開(kāi)、讀出、關(guān)閉。 (1)打開(kāi)文件 打開(kāi)文件的命令是Open,格式為: Open “文件名” For 模式 As [#] 文件號 [Len=記錄長(cháng)度] 說(shuō)明: 1)文件名可以是字符串常量也可以是字符串變量 2)模式可以是下面之一: OutPut:打開(kāi)一個(gè)文件,將對該文件進(jìn)行寫(xiě)操作 Input:打開(kāi)一個(gè)文件,將對該文件進(jìn)行讀操作 Append:打開(kāi)一個(gè)文件,將在該文件末尾追加記錄 3) 文件號是一個(gè)介于1-511之間的整數,打開(kāi)一個(gè)文件時(shí)需要指定一個(gè)文件號,這個(gè)文件號就代表該文件,直到文件關(guān)閉后這個(gè)號才可以被其他文件所使用??梢岳肍reeFile()函數獲得下一個(gè)可以利用的文件號。 例: Open "D:\sj\aaa" For Output As #1 意思是:打開(kāi)D:\SJ下aaa文件供寫(xiě)入數據,文件號為#1 | | | re:[b](2)[/b][b]寫(xiě)操作[/b]...
(2)寫(xiě)操作 將數據寫(xiě)入磁盤(pán)文件所用的命令是:Write# 或Print#。語(yǔ)法格式: [b] 1) Print #文件號,[輸出列表][/b] 例: Open “D:\SJ\TEST.DAT” For Output As #1 Print #1,Text1.Text '把文本框的內容一次性寫(xiě)入文件 Close #1 2)[b]Write #文件號,[輸出列表][/b] 其中的輸出列表一般指用逗號,分隔的數值或字符串表達式。Write #與Print #的功能基本相同,區別是Write #是以緊湊格式存放,在數據間插入逗號,并給字符串加上雙引號。 (3) 關(guān)閉文件 結束各種讀寫(xiě)操作后,必須將文件關(guān)閉,否則會(huì )造成數據丟失。關(guān)閉文件的命令是Close。 Close [#]文件號[,[#]文件號]…… 例: Close #1,#2,#3 (4) 讀操作 1) Input #文件號,變量列表 作用:將從文件中讀出的數據分別賦給指定的變量。 注意:與Write #配套才可以準確地讀出。 2)Line Input #文件號,字符串變量 用于從文件中讀出一行數據,并將讀出的數據賦給指定的字符串變量,讀出的數據中不包含回車(chē)符和換行符,可與Print #配套用。 3)Input$(讀取的字符數,#文件號) 該函數可以讀取指定數目的字符。 與讀文件有關(guān)的兩個(gè)函數: LOF():返回某文件的字節數 EOF():檢查指針是否到達文件尾。 例:將一個(gè)文本文件讀入文本框的三種方法。 3.隨機訪(fǎng)問(wèn)模式 該模式要求文件中的每條記錄的長(cháng)度都是相同的,記錄與記錄之間不需要特殊的分隔符號。只要給出記錄號,可以直接訪(fǎng)問(wèn)某一特定記錄,其優(yōu)點(diǎn)是存取速度快,更新容易。 ?。?) 打開(kāi)與關(guān)閉 打開(kāi):Open “文件名” For Random As [#] 文件號 [Len=記錄長(cháng)度] 關(guān)閉:Close #文件號 注意:文件以隨機方式打開(kāi)后,可以同時(shí)進(jìn)行寫(xiě)入和讀出操作,但需要指明記錄的長(cháng)度,系統默認長(cháng)度為128個(gè)字節。 ?。?)讀與寫(xiě) 讀操作:Get [#]文件號,[記錄號],變量名 說(shuō)明:Get命令是從磁盤(pán)文件中將一條由記錄號指定的記錄內容讀入記錄變量中;記錄號是大于1的整數,表示對第幾條記錄進(jìn)行操作,如果忽略不寫(xiě),則表示當前記錄的下一條記錄。 寫(xiě)操作:Put [#]文件號,[記錄號],變量名 說(shuō)明:Put命令是將一個(gè)記錄變量的內容,寫(xiě)入所打開(kāi)的磁盤(pán)文件指定的記錄位置;記錄號是大于1的整數,表示寫(xiě)入的是第幾條記錄,如果忽略不寫(xiě),則表示在當前記錄后插入一條記錄。 4. 二進(jìn)制訪(fǎng)問(wèn)模式 打開(kāi):Open “文件名” For Binary As [#] 文件號 [Len=記錄長(cháng)度] 關(guān)閉:Close #文件號 該模式是最原始的文件類(lèi)型,直接把二進(jìn)制碼存放在文件中,沒(méi)有什么格式,以字節數來(lái)定位數據,允許程序按所需的任何方式組織和訪(fǎng)問(wèn)數據,也允許對文件中各字節數據進(jìn)行存取和訪(fǎng)問(wèn)。 該模式與隨機模式類(lèi)似,其讀寫(xiě)語(yǔ)句也是Get 和Put,區別是二進(jìn)制模式的訪(fǎng)問(wèn)單位是字節,隨機模式的訪(fǎng)問(wèn)單位是記錄。在此模式中,可以把文件指針移到文件的任何地方,剛開(kāi)始打開(kāi)時(shí),文件指針指向第 一個(gè)字節,以后隨文件處理命令的執行而一旦。文件一旦打開(kāi),就可以同時(shí)進(jìn)行讀寫(xiě)。 7.3 常用的文件操作語(yǔ)句和函數 1. FileCopy語(yǔ)句 格式:FileCopy 源文件名 目標文件名 功能:復制一個(gè)文件 說(shuō)明:不能復制一個(gè)已打開(kāi)的文件 2. Kill語(yǔ)句 格式:Kill 文件名 功能:刪除文件 說(shuō)明:文件名中可以使用通配符 *,? 3. Name語(yǔ)句 格式:Name 舊文件名 新文件名 功能:重新命名一個(gè)文件或目錄 說(shuō)明:不能使用通配符;具有移動(dòng)文件功能;不能對已打開(kāi)的文件進(jìn)行重命名操作 4. ChDrive語(yǔ)句 格式:ChDrive 驅動(dòng)器 功能: 改變當前驅動(dòng)器 說(shuō)明:如果驅動(dòng)器為空,則不變;如果驅動(dòng)器中有多個(gè)字符,則只會(huì )使用首字母 5.MkDir語(yǔ)句 格式:MkDir 文件夾名 功能:創(chuàng )建一個(gè)新的目錄 6.ChDir語(yǔ)句 格式:ChDir 文件夾名 功能:改變當前目錄 說(shuō)明:改變默認目錄,但不改變默認驅動(dòng)器。 7. RmDir語(yǔ)句 格式:RmDir 文件夾名 功能:刪除一個(gè)存在的目錄 說(shuō)明:不能刪除一個(gè)含有文件的目錄 8. CurDir()函數 格式: CurDir[(驅動(dòng)器)] 功能:可以確定任何一個(gè)驅動(dòng)器的當前目錄。 說(shuō)明:括號中的驅動(dòng)器表示需要確定當前目錄的驅動(dòng)器,如果為空,返回當前驅動(dòng)器的當前目錄路徑。 | | | re:第八章 VB中Acti...
第八章 VB中ActiveX控件的使用 8.1 概述 這里的ActiveX控件是指VB標準工具箱里沒(méi)有的控件,用時(shí)需從“工程”菜單里選擇“部件…”(或右鍵單擊工具箱,從快捷菜單中選擇“部件…”),從部件窗口里勾上需要的控件。 常用ActiveX控件 ActiveX控件 ActiveX部件 文件名 TabStrip 頁(yè)框 Windows通用控件 Microsoft Windows Common Controls 6.0 路徑: Windows\system\ Mscomctl.ocx Toolbar 工具欄 StatusBar 狀態(tài)欄 ProgressBar 進(jìn)程條 TreeView 分層顯示 ListView 排列顯示 ImageList 圖象列表 Slider 滑塊 ImageCombo 圖象組合框 CommonDialog 通用對話(huà)框 Microsoft Common Dialog Control 6.0 Comdlg32.ocx MMControl1 多媒體 Microsoft Multimedia Control 6.0 Mci32.ocx MediaPlayer 媒體播放器 Microsoft Media Player Msdxm.ocx 8.1 多選項卡對話(huà)框——頁(yè)框(TabStrip) 1. 設置頁(yè)框的外觀(guān)樣式 (1) 先在窗體上畫(huà)出一個(gè)TabStrip對象; (2) 右擊該對象,從快捷菜單中選擇“屬性”; (3) 在TabStrip屬性窗口里選擇通用(General)標簽,在樣式(Style)列表框里選擇樣式; (4) 在TabStrip屬性窗口里選擇選項卡(Tabs)標簽,在標題(Caption)框里輸入標題和關(guān)鍵字; (5) 如果需要的話(huà),在工具提示文本(ToolTipText)框里輸入提示信息; (6) 在TabStrip屬性窗口里選擇字體(Font)標簽,設置標題的字體(可以直接采用默認值)。 2.增減標簽總數 在TabStrip屬性窗口里選擇選項卡標簽,單擊插入選項卡按鈕增加標簽,單擊刪除選項卡按鈕刪除標簽。 3.在TabStrip上顯示圖形 1) 在窗體里拖入一個(gè)圖象列表(ImageList)控件; 2) 在此對象上右擊,選擇屬性,打開(kāi)屬性頁(yè)窗口; 3) 選擇圖象標簽, 單擊插入圖片按鈕,在選定圖片對話(huà)框里選擇想使用的位圖或圖標,然后單擊打開(kāi)按鈕;為每個(gè)想添加圖形的選項卡重復此步; 4) 單擊確定按鈕, ImageList里就存儲了需要的圖片。 5) 選擇TabStrip, 進(jìn)入TabStrip屬性窗口并選擇通用標簽,在圖象列表框里選擇ImageList1; 6) 選擇選項卡標簽,單擊緊挨索引框的向左或向右箭頭以選擇一個(gè)Tab序號。在圖象框里輸入一個(gè)數,輸入為1,則顯示剛才ImageList控件里的第一個(gè)圖形,輸入為2,則顯示剛才ImageList控件里的第二個(gè)圖形,單擊確定按鈕完成。 4.在TabStrip上放置其它控件 在窗體上象添加普通控件一樣,把每一頁(yè)需要的控件添上,控件不止一個(gè)時(shí),應該用Frame來(lái)分組,注意:除了默認的第一頁(yè)上的Frame控件外,其他所有Frame的Visible屬性都應該設為假。 5.設計代碼 在用戶(hù)選擇了標簽后,TabStrip要求編寫(xiě)代碼來(lái)顯示或隱藏控件??捎妙?lèi)似下面的代碼來(lái)識別用戶(hù)在哪一個(gè)項目上單擊。 Private Sub TabStrip1_Click() Select Case TabStrip1.SelectedItem.key Case 1 <選第一項時(shí)需要執行的代碼> Case 2 <選第一項時(shí)需要執行的代碼> …… End Select End Sub 例: Private Sub TabStrip1_Click() Select Case TabStrip1.SelectedItem.Key Case "statubar" Frame2.Visible = False Frame1.Visible = True Case "toolbar" Frame1.Visible = False Frame2.Visible = True End Select End Sub 8.2 狀態(tài)欄(StatusBar)和工具欄(ToolBar) 1. 狀態(tài)欄的作用與組成 StatusBar 控件由 Panel(窗格) 對象組成,最多能被分成 16 個(gè) Panel 對象,每一個(gè) Panel 對象能包含文本和/或圖片??刂苽€(gè)別窗格的外觀(guān)屬性包括 Width、Alignment(文本和圖片的)和 Bevel(斜面)。此外,能使用 Style 屬性七個(gè)值中的一個(gè)自動(dòng)地顯示公共數據,諸如日期、時(shí)間和鍵盤(pán)狀態(tài)等。 2. 創(chuàng )建狀態(tài)欄 先在窗體上畫(huà)出一個(gè)StatusBar對象,再右擊該對象,從快捷菜單中選擇“屬性”,進(jìn)入屬性頁(yè)設置窗口,進(jìn)行下面的設置: (1) 選擇窗格形狀 在屬性窗口里選擇通用標簽,在樣式列表框里選擇多窗格(缺省形式)或單窗格簡(jiǎn)單文本形式。 (2) 添加或刪除狀態(tài)欄窗格 在屬性窗口里選擇窗格標簽,單擊插入窗格按鈕添加一個(gè)窗格,或單擊刪除窗格按鈕刪除一個(gè)窗格。 (3) 在單窗格里顯示文本 在屬性窗口里選擇通用標簽,在簡(jiǎn)單文本框里輸入想顯示在狀態(tài)欄窗格里的文本。用代碼顯示的方式是: StatusBar1.SimpleText = "要顯示的內容" (4) 在多窗格里顯示文本或圖形 1). 在屬性窗口里選擇窗格標簽,用索引旁的按鈕選擇窗格序號。 2). 在文本框里輸入想顯示在狀態(tài)欄窗格里的文本。用代碼顯示的方式是:StatusBar1.Panels(x).Text = "要顯示的內容" 3). 如果想加入圖形,單擊瀏覽按鈕打開(kāi)一個(gè)圖形選擇對話(huà)框,選擇想加入的圖形,然后單擊打開(kāi)按鈕。 (5) 編寫(xiě)代碼 如果是一個(gè)單窗格狀態(tài)欄,當用戶(hù)單擊狀態(tài)欄時(shí),只需用下面的事件過(guò)程來(lái)響應: Private Sub StatusBar1_Click() <要執行的代碼> End Sub 如果是一個(gè)多窗格狀態(tài)欄,就需要鑒別用戶(hù)單擊的是哪一個(gè)窗格,可用下面的事件過(guò)程來(lái)識別用戶(hù)所單擊的窗格: Private Sub StatusBar1_PanelClick(ByVal Panel As Panel) Select Case Panel.Index Case 1 <要執行的代碼> Case 2 <要執行的代碼> …… End Select End Sub 3.創(chuàng )建工具欄 (1).建立工具欄 1) 在工具箱里單擊工具欄圖標,拖到窗體的任何位置,Visual Basic自動(dòng)將ToolBar移到頂部。再右擊該對象,從快捷菜單中選擇“屬性”,進(jìn)入屬性頁(yè)設置窗口; 2) 選擇按鈕標簽,單擊插入按鈕,Visual Basic就會(huì )在工具欄上顯示一個(gè)空按鈕,重復此步插入多個(gè)按鈕; 3) 單擊確定按鈕。如果想把按鈕分組,首先插入一個(gè)分隔的按鈕,再在對話(huà)框里將這個(gè)按鈕的樣式屬性改為3-Separator。 (2) 為工具欄增加圖畫(huà) 1). 在Visual Basic工具箱里單擊ImageList圖標,并將它拖到窗體的任何位置(位置不重要,因為它總是不可見(jiàn)的),再右擊該對象,從快捷菜單中選擇“屬性”,進(jìn)入屬性頁(yè)設置窗口; 2). 選擇圖象標簽,單擊插入圖片,在選定圖形對話(huà)框里選擇想使用的位圖或圖標,然后單擊打開(kāi)按鈕。為每個(gè)想添加圖形的工具欄按鈕重復此步。 3). 單擊確定按鈕。 4). 進(jìn)入ToolBar屬性對話(huà)框,選擇通用標簽,在圖象列表框里選擇剛才添加的ImageList控件。 5). 選擇按鈕標簽,單擊緊挨Index框的向左或向右箭頭以選擇一個(gè)按鈕序號。出現在工具欄最左邊的按鈕序號為1。 6). 在Image框里輸入一個(gè)數,輸入為1,則顯示剛才ImageList控件里的第一個(gè)圖形,輸入為2,則顯示剛才ImageList控件里的第二個(gè)圖形。 7). 為每個(gè)按鈕重復第6步, 單擊確定按鈕,現在Visual Basic就會(huì )在工具欄上顯示精美的圖形了。 (3)為工具欄添加文本信息 在ToolBar屬性對話(huà)框中選擇按鈕標簽,在標題框里輸入想顯示在按鈕上的文本。 (4)添加ToolTips ToolTips是一種當點(diǎn)到工具按鈕時(shí)彈出的小標簽。ToolTips很方便,可以告訴那些新手每個(gè)按鈕是干什么用的。在ToolBar屬性對話(huà)框中選擇按鈕標簽,在工具提示文本框里輸入想作為T(mén)oolTip的文本。 (5)編寫(xiě)代碼 雙擊工具欄,以下面的格式輸入代碼就可以了: Private Sub Toolbar1_ButtonClick(ByVal Button As Button) Select Case Button.Index Case 1 <要執行的代碼> Case 2 <要執行的代碼> …… End Select End Sub 8.3 進(jìn)程條(ProgressBar)和滑塊(Slider) 1. 進(jìn)程條 作用:進(jìn)程條控件用于監視操作完成的進(jìn)度。 創(chuàng )建:在窗體上畫(huà)出進(jìn)程條控件,右擊,選擇屬性,然后進(jìn)行所需的外觀(guān)設置。 主要屬性:ProgressBar 控件有一個(gè)行程和一個(gè)當前位置。行程代表該操作的整個(gè)持續時(shí)間。當前位置則代表應用程序在完成該操作過(guò)程時(shí)的進(jìn)度。Max 和 Min 屬性設置了行程的界限。Value 屬性則指明了在行程范圍內的當前位置。 (1) Min屬性代表進(jìn)程條全空時(shí)的值,缺省時(shí)為0。 (2) Max屬性代表進(jìn)程條全空時(shí)的值,缺省時(shí)為100。 (3) Value屬性代表進(jìn)程條當前的值(但不出現在屬性窗口中),它大于Min屬性,小于Max屬性。改變Value屬性的值將改變進(jìn)程條的進(jìn)度顯示。 示例: Private Sub Command1_Click() If ProgressBar1.Value < ProgressBar1.Max Then ProgressBar1.Value = ProgressBar1.Value + 5 Else ProgressBar1.Visible = False ‘當進(jìn)程條滿(mǎn)了的時(shí)候讓進(jìn)程條消失 End If End Sub 2.滑塊 Slider 控件是包含滑塊和可選擇性刻度標記的窗口,在窗體上畫(huà)出滑塊控件,右擊,選擇屬性,然后進(jìn)行下列設置: (1)選擇滑塊的外觀(guān) 1)方向屬性決定滑塊的方位,可以是垂直的或水平的滑塊。 2)滑塊樣式屬性決定滑塊標記的樣子。 3)滑塊頻率屬性規定了沿著(zhù)滑塊的標記的間隔大小,缺省的狀態(tài)是1,表明每個(gè)可能值都出現標記,如果把值設置為3,則每三個(gè)可能值出現一個(gè)標記。 (2)滑塊的主要屬性及事件 1)Min,Max屬性 Min屬性決定滑塊最左端或最頂端所代表的值。Max屬性決定滑塊最右端或最下端所代表的值。 2)LargeChange,SmallChange屬性 SmallChange決定在滑塊兩端的箭頭鈕上單擊時(shí)改變的值。LargeChange決定在滑塊上方或下方區域單擊時(shí)改變的值。 3)Value屬性 Value屬性代表當前滑塊所處位置的值,這個(gè)值由滑塊的相對位置決定。 4)Change事件 當滑塊位置發(fā)生變化時(shí)就引發(fā)了Change事件。 8.4 排列顯示(ListView)控件和分層顯示(TreeView) 控件 1.ListView 控件 象“資源管理器”的右側一樣,可使用四種不同視圖顯示項目。通過(guò)此控件,可將項目組成帶有或不帶有列標頭的列,并顯示伴隨的圖標和文本。 可使用 ListView 控件將稱(chēng)作 ListItem 對象的列表條目組織成下列四種不同的視圖之一: 大(標準)圖標 小圖標 列表 報表 View 屬性決定在列表中控件使用何種視圖顯示項目。還可用 LabelWrap 屬性控制列表中與項目關(guān)聯(lián)的標簽是否可換行顯示。另外,還可管理列表中項目的排序方法和選定項目的外觀(guān)。 ListView 控件包括 ListItem 和 ColumnHeader 對象。ListItem 對象定義 ListView 控件中項目的各種特性,如: 項目的簡(jiǎn)要描述、由 ImageList 控件提供的與項目一起出現的圖標、附加的文本片段,稱(chēng)作子項目,它們與顯示在報表視圖中的 ListItem 對象關(guān)聯(lián)。 可以使用 HideColumnHeaders 屬性決定是否在 ListView 控件中顯示列標頭。列標頭可以在設計時(shí)添加,也可以在運行時(shí)添加。設計時(shí),使用 ListView“控件屬性”對話(huà)框的“列首”選項卡添加列標頭。運行時(shí),使用 Add 方法添加 ColumnHeader 對象到 ColumnHeaders 集合中。 2.TreeView 控件 該控件象“資源管理器”的左側一樣,用于顯示結點(diǎn)( Node) 對象的分層列表,每個(gè) Node 對象均由一個(gè)標簽和一個(gè)可選的位圖組成。TreeView 一般用于顯示文檔標題、索引入口、磁盤(pán)上的文件和目錄、或能被有效地分層顯示的其它種類(lèi)信息。 創(chuàng )建了 TreeView 控件之后,可以通過(guò)設置屬性與調用方法對各 Node 對象進(jìn)行操作,這些操作包括添加、刪除、對齊和其它操作??梢跃幊陶归_(kāi)與折回 Node 對象來(lái)顯示或隱藏所有子節點(diǎn)。 TreeView 控件使用由 ImageList 屬性指定的 ImageList 控件,來(lái)存儲顯示于 Node 對象的位圖和圖標。任何時(shí)刻,TreeView 控件只能使用一個(gè) ImageList。這意味著(zhù),當 TreeView 控件的 Style 屬性被設置成顯示圖像的樣式時(shí),TreeView 控件中每一項的旁邊都有一個(gè)同樣大小的圖像。 8.5 多媒體控件 1. 多媒體控件 Multimedia MCI 控件管理媒體控制接口 (MCI) 設備上的多媒體文件的記錄與回放。從概念上說(shuō),這種控件就是一組按鈕,它被用來(lái)向諸如聲卡、MIDI 序列發(fā)生器、CD-ROM 驅動(dòng)器、視頻 CD 播放器和視頻磁帶記錄器及播放器等設備發(fā)出 MCI 命令。MCI 控件還支持 Windows (*.avi) 視頻文件的回放。 在允許用戶(hù)從 Multimedia MCI 控件選取按鈕之前,應用程序必須先將 MCI 設備打開(kāi),并在 Multimedia MCI 控件上啟用適當的按鈕。在 Visual Basic 中,應將 MCI Open 命令放到 Form_Load 事件中。 2.媒體播放器控件 可以播放各種多媒體文件,主要屬性有: (1) filename(待播放的文件名),可以在屬性窗口中設置,也可以用代碼實(shí)現。 (2) AutoStart(是否自動(dòng)播放),默認是True。 (3) AutoRewind(是否自動(dòng)循環(huán)),默認是False。 (4) PlayCount(文件播放遍數),默認是1。 8.6 圖象列表(ImageList)和 圖象組合框(ImageCombo) 1.圖象列表 ImageList 控件是包含 ListImage 對象的集合,該集合中的每個(gè)對象都可以通過(guò)其索引或關(guān)鍵字被引用。ImageList 控件不能獨立使用,只是作為一個(gè)便于向其它控件提供圖象的資料中心。 ImageList 控件的作用象圖像的儲藏室,同時(shí),它需要第二個(gè)控件顯示所儲存的圖像。第二個(gè)控件可以是任何能顯示圖像 Picture 對象的控件,也可以是特別設計的、用于綁定 ImageList 控件的 Windows 通用控件之一。這些控件包括ListView、ToolBar、TabStrip、Header、ImageCombo、和 TreeView 控件。為了與這些控件一同使用 ImageList,必須通過(guò)一個(gè)適當的屬性將特定的 ImageList控件綁定到第二個(gè)控件。對于 ListView 控件,必須設置其 Icons 和 SmallIcons 屬性為 ImageList 控件。對于 TreeView、TabStrip、ImageCombo、和 Toolbar 控件,必須設置 ImageList 屬性為 ImageList 控件。 一旦 ImageList 與某個(gè) Windows 通用控件相關(guān)聯(lián),就可以在過(guò)程中用 Index 屬性或 Key 屬性的值來(lái)引用 ListImage 對象。 當與 Windows 通用控件一起使用 ImageList 控件時(shí),在將它綁定到第二個(gè)控件之前,按照希望的順序將全部需要的圖像插入到 ImageList。一旦 ImageList 被綁定到第二個(gè)控件 ,就不能再刪除圖像了,并且也不能將圖像插入到 ListImages 集合中間。但是可以在集合的末尾添加圖像。 2.圖象組合框 ImageCombo 控件是標準 Windows 組合框的允許繪圖版本??丶斜聿糠种械拿恳豁椂伎梢杂幸环付ǖ膱D片。它可以顯示一個(gè)包含圖片的項目列表,每一項可以有自己的圖片,也可以對多個(gè)列表項使用相同的圖片。 除了支持圖片之外, ImageCombo 還提供了一個(gè)對象和基于集合的列表控件??丶斜聿糠值拿恳豁検且粋€(gè)不同的 ComboItem 對象,而且列表中的所有項組合起來(lái)構成 ComboItems 集合。這就使它容易一項一項地指定諸如標記文本、ToolTip文本、關(guān)鍵字值以及縮進(jìn)等級等屬性。 8.7 通用對話(huà)框控件 Windows應用程序里的Open對話(huà)框,Save As對話(huà)框在各個(gè)應用程序里看起來(lái)都是一樣的,通用對話(huà)框控件就可以提供這些對話(huà)框的標準功能。 1.Open對話(huà)框及Save As對話(huà)框 打開(kāi)Open對話(huà)框使用ShowOpen方法,打開(kāi)Save As對話(huà)框使用ShowSave方法。 Private Sub mnuOpen_Click () On Error GoTo ErrorHandler CommonDialog1.CancelError = True CommonDialog1.Filter = "Text Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat|All Files (*.*)|*.*" CommonDialog1.ShowOpen ' 顯示打開(kāi)對話(huà)框 Call OpenFile(CommonDialog1.FileName) ErrorHandler: Exit Sub End Sub 其中第三行決定了在文件格式類(lèi)型欄里出現的文件類(lèi)型。第五行需要一個(gè)自己的打開(kāi)文件的過(guò)程,這個(gè)過(guò)程需要的參數就是通用對話(huà)框返回的文件名。通用對話(huà)框的 CancelError屬性設為T(mén)rue的話(huà),用戶(hù)單擊Cancel按鈕將產(chǎn)生一個(gè)錯誤信息程序,憑借這個(gè)信息程序可以檢測到用戶(hù)的放棄操作。 2.Color對話(huà)框 下面的過(guò)程可用用戶(hù)選擇的顏色作為窗體的底色。 Private Sub mnuColor_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.ShowColor Form1.BackColor = CommonDialog1.Color CancelButton: Exit Sub End Sub 3.Fonts對話(huà)框 下面的過(guò)程可用字體對話(huà)框改變文本框的字體: Private Sub mnuFonts_Click () On Error GoTo CancelButton CommonDialog1.CancelError = True CommonDialog1.Flags = cdlCFBoth ' Flags property must be set to cdlCFBoth CommonDialog1.ShowFont ' Display Font common dialog box. Text1.FontName = CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSize Text1.FontBold = CommonDialog1.FontBold Text1.FontItalic = CommonDialog1.FontItalic Text1.FontUnderline = CommonDialog1.FontUnderline Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.ForeColor = CommonDialog1.Color CancelButton: Exit Sub End Sub 代碼的第三行出現了通用對話(huà)框的Flags屬性決定了通用對話(huà)框的一些可選項,不過(guò)即使不賦值給Flags,代碼也一樣會(huì )按缺省的情況去執行的。 | | | re:[b]第九章[/b][b] VB[/b]...
第九章 VB的數據庫操作 9.1 數據庫的基礎知識 1.計算機數據管理技術(shù)的發(fā)展 第一階段:人工管理階段,特點(diǎn)是數據不長(cháng)期保存,沒(méi)有軟件系統對數據進(jìn)行管理,沒(méi)有文件的概念,一組數據對應一個(gè)程序。 第二階段:采用文件管理方式,特點(diǎn)是數據不再是程序的組成部分,而是有組織、有結構地構成文件形式,形成數據文件;文件管理系統是應用程序與數據文件的接口。 第三階段:數據庫管理方式,特點(diǎn)是對所有數據實(shí)行統一、集中、獨立的管理,數據獨立于程序存在,并可以提供給各類(lèi)不同用戶(hù)使用。 2.數據庫的基本概念 (1) 數據庫(DataBase DB) 定義:是以一定的組織形式存放在計算機存儲介質(zhì)上的相互關(guān)聯(lián)的數據的集合。 特點(diǎn): b 具有最小的冗余度 具有數據獨立性 實(shí)現數據共享 安全可靠,保密性能好 (2) 數據庫管理系統(DataBase Management System DBMS) 定義:是操縱和管理數據庫的系統軟件。 功能:維護數據庫、接收和完成用戶(hù)程序或命令提出的訪(fǎng)問(wèn)數據庫的各種請求。 數據語(yǔ)言: z v 數據定義語(yǔ)言(DDL): 用來(lái)建立所需的數據庫(即設計庫結構) 數據操作語(yǔ)言(DML): 用來(lái)對數據庫進(jìn)行查詢(xún)和維護操作。 t 數據控制語(yǔ)言(DCL): 用來(lái)控制數據的訪(fǎng)問(wèn)權限及事務(wù)管理。 關(guān)系型數據庫使用的標準語(yǔ)言是結構化查詢(xún)語(yǔ)言(Structured Query Language, SQL)。 (3) 數據庫系統(DataBase System DBS) 定義; 以數據庫應用為基礎的計算機系統。 組成:一個(gè)完整的數據庫系統由數據庫、數據庫管理系統、數據庫管理員和應用程序組成。 數據庫也可以這樣劃分其組成: 硬件:計算機硬件設備 軟件:數據庫管理系統 、操作系統、開(kāi)發(fā)工具、應用程序 用戶(hù):應用程序設計員、終端用戶(hù)、數據庫管理員 分類(lèi) 層次型數據庫 網(wǎng)狀型數據庫 網(wǎng)狀型數據庫 分代 第一代 非關(guān)系型數據庫系統,60年代末問(wèn)世,包括層次型和網(wǎng)狀型 第二代 關(guān)系型數據庫系統(RDBS),70年代中期問(wèn)世 第三代 對象-關(guān)系數據庫系統(ORDBS 、OOBDS),80年代中期至今 上述三個(gè)概念之間的聯(lián)系:在數據庫系統中通過(guò)數據庫管理系統來(lái)建立和使用數據庫。 3.數據模型 數據模型:即描述實(shí)體模型的數據。 數據模型的分類(lèi): 層次模型(采用樹(shù)型結構) 網(wǎng)絡(luò )模型(采用無(wú)向圖型結構) 關(guān)系模型(采用二維表結構) 關(guān)系模型的性質(zhì): 二維表的記錄數隨數據的增加而改變,但其字段數是相對固定的 二維表中的每一列均有唯一的字段名 二維表中不允許出現完全相同的兩行 二維表中行的順序、列的順序均可以任意交換 4. 關(guān)系型數據庫的基本結構 關(guān)系型數據庫的基本結構是一張二維表,包括以下概念: (1) 記錄(Record):數據表中的每一行數據 (2) 字段(Field):數據表中的每一列,表頭(第一行)的內容為字段名 (3) 數據表(Table):相關(guān)數據組成的二維表格 (4) 數據庫(Database):相關(guān)數據表的集合 (5) 關(guān)系(Relation):相關(guān)表之間通過(guò)相關(guān)聯(lián)的字段建立的聯(lián)系。 ?。?) 索引(Index):指按表文件中某個(gè)關(guān)鍵字段或表達式建立記錄的邏輯順序。它是由一系列記錄號組成的一個(gè)列表,目的是提供對數據的快速訪(fǎng)問(wèn)。索引不改變表中記錄的物理順序。 索引關(guān)鍵字(索引表達式):用來(lái)建立索引的一個(gè)字段或字段表達式。 ngf 數據庫和數據表可以通過(guò)數據庫管理系統軟件來(lái)建立,如:Access,Visual FoxPro,SQL Server 、Sybase、 Oracle。在VB環(huán)境下可以直接建立Access數據庫。 關(guān)系型數據表的特點(diǎn) :(1)每一個(gè)字段不可再分解,也不能有名字相同的字段 ; hgfhgfyh (2)每一列中的數據都有相同的數據類(lèi)型; hfyftytfyyy (3)表中沒(méi)有內容完全相同的行(記錄)。 5.查詢(xún)的概念 查詢(xún)(query):從相關(guān)數據表中選取符合特定要求的數據。 創(chuàng )建方法:可以通過(guò)查詢(xún)生成器創(chuàng )建一個(gè)查詢(xún),也可以在SQL窗口直接用SELECT—SQL命令寫(xiě)出查詢(xún)。 9.2 數據庫管理器 1. 數據庫管理器介紹 在VB中可以通過(guò)“外接程序”菜單中的“可視化數據管理器”調出“VisData”數據庫管理器窗口。 菜單選項 功能描述 文件 打開(kāi)數據庫 打開(kāi)指定的數據庫 新建 根據所選類(lèi)型建立新數據庫 導入/導出 從其他數據庫導入數據表,或導出數據表及SQL查詢(xún)結果 工作空間 顯示注冊對話(huà)框注冊新工作空間,用新輸入的用戶(hù)名和密碼從新的工作空間重新打開(kāi)當前數據庫。 壓縮MDB 壓縮指定的Access數據庫,創(chuàng )建一個(gè)加密或解密文件。 修復MDB 修復指定的Access數據庫 實(shí)用程序 查詢(xún)生成器 建立、查看、執行和存儲SQL查詢(xún) 數據窗口設計器 創(chuàng )建數據窗體并將其添加到VB工程中 全局替換 創(chuàng )建SQL表達式并更新所選數據表中滿(mǎn)足條件的記錄 附加 顯示當前Access數據庫中所有附加數據表及連接條件 用戶(hù)組/用戶(hù) 查看和修改用戶(hù)組、用戶(hù)、權限等設置 System.mda 創(chuàng )建System.mda文件,以便為每個(gè)文件設置安全機制 性能選項 設置超時(shí)值 2. 建立數據庫 數據庫的基本操作: 創(chuàng )建數據表: 設計表名和表結構 輸入記錄 建立索引 數據維護: 增加記錄 修改記錄 刪除記錄 創(chuàng )建數據表的主要步驟: 設計表結構 → 輸入記錄 → 建立索引 → 數據維護 ?。?)設計表結構 啟動(dòng)可視化數據管理器 → 在database窗口中右擊,從菜單中選擇“新表” → 在表結構窗口中輸入表名→ 添加字段 → 確定字段名稱(chēng)和屬性、有效性規則 → 建立索引 →生成表結構。 “添加字段”對話(huà)框各選項說(shuō)明 選項名 描述 名稱(chēng) 即每個(gè)字段的名字(對所用字符沒(méi)有什么限制) 類(lèi)型 指該字段的數據特征,包括:Boolean、Byte、Integer、Long、Currency、Single、Double、Date/Time、Text、Binary(二進(jìn)制型,存放圖片)、Memo(備注型,存放長(cháng)文本) 大小 字段寬度,指該字段所能容納數據的的最大字節數 固定字段 字段寬度固定不變 可變字段 字段寬度可變 允許零長(cháng)度 表示空字符串可作為有效的字段值 必要的 表示該字段值不可缺少 順序位置 字段在表中的順序位置 驗證文本 當向表中輸入無(wú)效值時(shí)系統顯示的提示信息 驗證規則 驗證輸入字段值的簡(jiǎn)單規則,目的是使所輸數據符合設定的條件 默認值 在輸入時(shí)設置的字段初始值,以減少輸入重復性數據時(shí)的工作量 ?。?)輸入記錄 在database窗口中選中表名并右擊,從菜單中選擇“打開(kāi)” →在數據表窗口輸入記錄(注意窗口樣式)→ 單擊“新增”→ 在窗口中輸入記錄并“更新” →重復…… ?。?) 維護記錄 在database窗口中選中表名并右擊,從菜單中選擇“打開(kāi)” →單擊“編輯”/“刪除”/“新增”,即可完成對記錄的修改、刪除、添加操作。 3. 建立查詢(xún) 建立查詢(xún)就是在數據表中找到符合特定條件的記錄并組成一張新表。 在database窗口中選中表名并右擊,從菜單中選擇“新查詢(xún)” →在查詢(xún)生成器中構造查詢(xún)條件→單擊“運行” →單擊“保存”,給出查詢(xún)結果文件名→“關(guān)閉”。 查詢(xún)生成器說(shuō)明 各選項 描述 查詢(xún)表達式 設置查詢(xún)應該滿(mǎn)足的基本條件,可以用and /or來(lái)設置應滿(mǎn)足的多個(gè)條件 表/字段名 設置查詢(xún)結果中將顯示的字段名,單擊一個(gè)加亮便選中了 前百分之幾條 只顯示查詢(xún)結果中的前若干條記錄 前N條記錄 只顯示查詢(xún)結果中的前N條記錄 “運行”按鈕 執行查詢(xún)命令,并顯示出查詢(xún)結果 “顯示”按鈕 用消息框顯示SQL命令 “復制”按鈕 將SQL命令復制到SQL窗口 “保存”按鈕 將查詢(xún)結果取個(gè)名并保存到數據庫中 “清除”按鈕 清除條件列表框中的查詢(xún)條件 分組條件 將查詢(xún)結果分組,一般每組只有一個(gè)記錄 排序條件 將查詢(xún)結果按順序顯示出來(lái),ASC(升序)、DESC(降序) 連接條件 設置相關(guān)表之間的連接字段 9.3 數據控件 1. 數據控件的建立 從VB工具箱中單擊Data控件,在窗體上畫(huà)出數據控件即可。 2. 數據控件的屬性 屬性名稱(chēng) 作用 Connect 指定數據控件所要連接的數據庫類(lèi)型,VB默認的是Access的MDB數據庫,也可以連接DBF、XLS、ODBC等數據庫 DatabaseName 指定具體使用的數據庫文件名,包括路徑名 RecordSource 指定具體可訪(fǎng)問(wèn)的數據,這些數據構成記錄集對象Recordset對象,可以是數據庫中的單個(gè)表名、一個(gè)存儲查詢(xún),也可以是SQL查詢(xún)命令 RecordsetType 確定記錄集類(lèi)型,有三種: 0——Table(表); 1——Dynaset(動(dòng)態(tài),默認的) ;2——Snapshot(快照) BofAction 當記錄指針指向記錄集的開(kāi)始時(shí),確定數據控件該采取的操作: 0——控件重定位到第一個(gè)記錄 1——移過(guò)記錄集開(kāi)始位,定位到一個(gè)無(wú)效記錄,觸發(fā)數據控件對第一個(gè)記錄的無(wú)效事件Validate EofAction 當記錄指針指向記錄集的結束時(shí),確定數據控件該采取的操作: 0——控件重定位到最后一個(gè)記錄 1——移過(guò)記錄集結束位,定位到一個(gè)無(wú)效記錄,觸發(fā)數據控件對最后一個(gè)記錄的無(wú)效事件Validate 2——向記錄集加入新的空記錄,可以對新記錄進(jìn)行編輯,移動(dòng)記錄指針新記錄寫(xiě)入數據庫 綁定控件、數據控件、數據庫之間的關(guān)系: 綁定控件的屬性: DataSource——通過(guò)一個(gè)有效的數據控件連接到一個(gè)數據庫上。 DataField——將數據庫中的有效字段連接到綁定控件上。 除了常規控件外,可以與Data數據控件綁定的控件有: 控件名稱(chēng) 部件名稱(chēng) 常用屬性 MSFlexGrid Microsoft FlexGrid Control 6.0(OLE DB) DataSourse DBCombo Microsoft Data Bound List Controls 6.0 DataField、DataSource、ListField、RowSource、BoundColumn DBList DBGrid Microsoft Data Bound Grid Control 5.0(SP3) DataSourse | | | re:[b]3. [/b][b]數據控件的...
3. 數據控件的事件 事件名稱(chēng) 觸發(fā)時(shí)間 Reposition 發(fā)生在一條記錄成為當前記錄后。只要將記錄指針從一條記錄移動(dòng)到另一條記錄就會(huì )觸發(fā)。 Validate 在一條不同的記錄成為當前記錄之前,Update 方法之前(用 UpdateRecord 方法保存數據時(shí)除外);以及 Delete、Unload 或 Close 操作之前會(huì )發(fā)生該事件。它檢查被數據控件綁定的控件內的數據是否發(fā)生變化。 語(yǔ)法:Private Sub Data_Validate(Action As Integer, Save As Integer) …… End Sub Validate事跡的 Action參數 Action值 描述 Action值 描述 0 取消對數據控件的操作 6 Update 操作 1 MoveFirst 方法 7 Delete 方法 2 MovePrevious 方法 8 Find 方法 3 MoveNext 方法 9 設置Bookmark 屬性 4 MoveLast 方法。 10 Close 的方法 5 AddNew 方法 11 卸載窗體 4. 數據控件的常用方法 方法名稱(chēng) 作用 示例 Refresh 激活數據控件,使各用戶(hù)對數據庫的操作有效。 Data1.Refresh UpdateControls 將數據從數據庫中重新讀到數據控件綁定的控件內,通過(guò)它可以終止用戶(hù)對綁定控件內數據的修改。 放棄修改按鈕代碼: Data1. UpdateControls UpdateRecord 強制數據控件將綁定控件內的數據寫(xiě)入到數據庫中,不再觸發(fā)Validate事件 確認修改按鈕代碼: Data1. UpdateRecord 5. 記錄集的屬性與方法 名稱(chēng) 作用 屬性 AbsolutePostion 返回當前指針值,如果是第一條記錄,其值為0;是只讀屬性 Bof / Eof Bof判斷記錄指針是否在首記錄之前,若是則為T(mén)rue;Eof判斷記錄指針是否在末記錄之后,若是則為T(mén)rue Bookmark 用于設置或返回當前指針的標簽,可以用在在程序中重定位記錄集的指針,其值采用字符串類(lèi)型。 NoMatch 在記錄集中進(jìn)行查找時(shí),如果找到相匹配的記錄,則為Falue,找不到則為T(mén)rue。 RecordCount 對Recordset對象中的記錄記數,為了準確起見(jiàn),在記數前用MoveLast方法將記錄指針移到最后一條記錄上;是只讀屬性。 方法 Move 用于移動(dòng)記錄指針,共有5種方法: MoveFirst——將指針移到第1條記錄 MoveLast——將指針移到最后一條記錄 MoveNext——將指針移到下一條記錄 MovePrevious——將指針移到上一條記錄 Move n——將指針向前或向后移動(dòng)n條記錄 Find 在指定的Dynaset或 Snapshop類(lèi)型的Recordset對象中查找與指定條件相符的一條記錄,并使之成為當前記錄,共有4種方法: FindFirst——從記錄集的開(kāi)始查找滿(mǎn)足條件的第1條記錄 FindLast——從記錄集的尾部向前查找滿(mǎn)足條件的第1條記錄 FindNext——從當前記錄開(kāi)始查找滿(mǎn)足條件的下一條記錄 FindPrevious——從當前記錄開(kāi)始查找滿(mǎn)足條件的上一條記錄 語(yǔ)法格式舉例: Data1.Recordset.FindFirst "課程名='計算機基礎' " Find方法支持通配符,默認情況下忽略大小寫(xiě),可以添加說(shuō)明改變默認設置: Option Compare Text (與大小寫(xiě)無(wú)關(guān)) Option Compare Binary (與大小寫(xiě)有關(guān)) 如果找不到相匹配的記錄,當前記錄保持在查找的始發(fā)處;如果找到了,則指針定位到該記錄。 Seek 使用該方法必需打開(kāi)表的索引,它在Table表中查找與指定索引規則相符的第一條記錄,并使其成為當前記錄。 語(yǔ)法格式舉例: Data1.Recordset.Index= "課程名" Data1.Recordset.Seek "=", "計算機基礎" 6. 利用數據控件對數據庫進(jìn)行增、刪、改操作 操作項目 操作方法 注意事項 增加記錄 1) 調用AddNew方法:Data1.Recordset. AddNew 2) 給各字段賦值:Recordset.Fields("字段名")=值或在綁定控件中直接輸入內容 3) 調用Update方法,將緩沖區內的數據寫(xiě)入數據庫: Data1.Recordset. Update 4) 調用MoveLast方法顯示新記錄: Data1.Recordset. MoveLast 如果缺少第3)步而將指針移動(dòng)到其他記錄或關(guān)閉了記錄,則所做的輸入全部丟失;若沒(méi)有第4)步。雖然加入了新記錄,但記錄指針自動(dòng)返回到添加新記錄前的位置上,并不顯示新記錄。 刪除記錄 1) 定位被刪除記錄使之成為當前記錄(用Move或Find方法) 2) 調用Delete方法:Data1.Recordset. Delete 3) 調用MoveNext方法移動(dòng)記錄指針 使用Delete方法時(shí),當前記錄立即刪除,但被數據庫約束的綁定控件仍舊顯示該記錄的內容,故必須用第3)步刷新綁定控件。 修改記錄 1) 調用Edit方法:Data1.Recordset. Edit 2) 給各字段賦值:在綁定控件中直接修改 3) 調用Update方法,確定所做的修改: Data1.Recordset. Update 如果要放棄對數據的所有修改,可在第3)步之前用Refresh方法,重讀數據庫,刷新記錄。 9.4 ADO數據控件 1. 什么是ADO? ADO(ActiveX Data Object)數據訪(fǎng)問(wèn)接口是微軟處理數據庫信息的最新技術(shù),它是一種ActiveX對象,采用了OLE DB(動(dòng)態(tài)連接與嵌入數據庫)的數據訪(fǎng)問(wèn)模式,是數據訪(fǎng)問(wèn)對象DAO、遠程數據對象RDO和開(kāi)放式數據庫互連ODBC三種方式的擴展。 要使用ADO對象必需先為當前工程引用ADO對象庫,方法是: 執行“工程”菜單中的“引用”命令,在對話(huà)框中選中“Microsoft ActiveX Data Object 2.0 Library”。 ADO對象描述 對象名 描述 Connection 連接數據來(lái)源 Command 從數據源獲取所需數據的命令信息 Recordset 所獲取的一組記錄組成的記錄集 Error 在訪(fǎng)問(wèn)數據庫時(shí),由數據源所返回的錯誤信息 Parameter 與命令對象相關(guān)的參數 Field 包含了記錄集中某個(gè)字段的信息 2.使用ADO數據控件 ?。?) 添加ADO數據控件 從“工程”菜單中選擇“部件”命令,在對話(huà)框中選中“Microsoft ADO Data ControlS 6.0(OLE DB)”,將其添加到工具箱,并在窗體上拖劃出ADO數據控件。 ?。?) ADO數據控件的基本屬性 屬性名 作用 ConnectionString 用來(lái)與數據庫建立連接,它包括4個(gè)參數: Provide——指定數據源的名稱(chēng) FileName——指定數據源所對應的文件名 RemoteProvide——在遠程數據服務(wù)器打開(kāi)一個(gè)客戶(hù)端時(shí)所用的數據源名稱(chēng) RemoteServer——在遠程數據服務(wù)器打開(kāi)一個(gè)主機端時(shí)所用的數據源名稱(chēng) RecordSource 確定具體可訪(fǎng)問(wèn)的數據,可以是數據庫中的單個(gè)表名、一個(gè)存儲查詢(xún)或一個(gè)SQL查詢(xún)字符串 ConnectionTimeout 設置數據連接的超時(shí)時(shí)間,若在指定時(shí)間內連接不成功則顯示超時(shí)信息 MaxRecords 確定從一個(gè)查詢(xún)中最多能返回的記錄數 ?。?) ADO數據控件的屬性設置 1)先在窗體上放置一個(gè)ADO數據控件 2)在A(yíng)DO屬性窗口中單擊ConnectionString屬性右邊的…按鈕,從對話(huà)框中選擇連接數據源的方式: 使用連接字符串——單擊“生成”按鈕,通過(guò)選項設置系統自動(dòng)產(chǎn)生連接字符串 使用Data Link文件——通過(guò)一個(gè)連接文件來(lái)完成 使用ODBC數據資源名稱(chēng)——在下拉列表中選擇某個(gè)創(chuàng )建好的數據源名稱(chēng)作為數據來(lái)源對遠程數據庫進(jìn)行控制。 3)在A(yíng)DO屬性窗口中單擊RecordSource屬性右邊的…按鈕,在“命令類(lèi)型”中選擇2——adCmdTable,在“表或存儲過(guò)程名稱(chēng)”中選擇所需要的表。 以上2)、3)可以合并成一步:在A(yíng)DO控件上單擊右鍵,從快捷菜單中選擇ADODC屬性,直接在屬性頁(yè)對話(huà)框中進(jìn)行所有設置。 ?。?) ADO數據控件的方法和事件 與Data數據控件完全相同。 ?。?) 在A(yíng)DO上新增綁定控件 可以從“工程”的“部件”中添加如下綁定控件: 控件名稱(chēng) 部件名稱(chēng) 常用屬性 DataGrid Microsoft DataGrid Control 6.0(OLE DB) DataSource DataCombo Microsoft DataList Controls 6.0(OLE DB) DataField、DataSource、ListField、RowSource、BoundColumn DataList MSChart Microsoft Chart Control 6.0(OLE DB) DataSource 3. 使用數據窗體向導 從“外接程序”菜單中選擇“外接程序管理器”,在對話(huà)框中選中VB6數據窗體向導,“加載”并“確定”,再從“外接程序”菜單中選擇“數據窗體向導”,然后根據系統提示逐步操作即可創(chuàng )建所需要的數據窗體,系統自動(dòng)把所創(chuàng )建的窗體加到工程中。 9.5 結構化查詢(xún)語(yǔ)言 1.SQL的基本組成 SQL語(yǔ)言由命令、子句、運算、函數等組成: ?。?) SQL命令 命令 功能 CREATE 用于建立新的數據表結構 DROP 用于刪除數據庫中的數據表及其索引 ALTER 用于修改數據表結構 SELECT 用于查找符合特定條件的某些記錄 INSERT 用于向數據表中加入數據 UPDATE 用于更新特定記錄或字段的數據 DELETE 用于刪除記錄 ?。?) SQL子句 子句 功能 FROM 用于指定數據所在的數據表 WHERE 用于指定數據需要滿(mǎn)足的條件 GROUP BY 將選定的記錄分組 HAVING 用于說(shuō)明每個(gè)群組需要滿(mǎn)足的條件 ORDER BY 用于確定排序依據 INTO 查詢(xún)結果去向 ?。?) SQL運算符 邏輯運算符 And (與)、 Or(或)、 Not(非) 比較運算符 >= = ?。?) SQL函數 AVG COUNT SUM MAX MIN 求平均值 計數 求和 求最大值 求最小值 2. SQL語(yǔ)句的應用 語(yǔ)句功能 語(yǔ)法格式 建立數據表 CREATE TABLE 數據表名 (字段名1 數據類(lèi)型(長(cháng)度), 字段名2 數據類(lèi)型(長(cháng)度),……) 舉例:create table student(xh text(9), xm text(8) , cj single(4), nl integer(2)) 建立含有xh、xm、cj、nl 4個(gè)字段的student表 添加字段 ALTER TABLE 數據表名 ADD COLUMN 字段名 數據類(lèi)型(長(cháng)度) 舉例:alter table student add column xb text(2) '在學(xué)生表中添加性別字段 刪除字段 ALTER TABLE 數據表名 DROP COLUMN 字段名 舉例: alter table student drop column nl '將學(xué)生表中的年齡字段刪除 數據查詢(xún) SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句 舉例:select xh, xm from student where xb="男" order by xh 從學(xué)生表中查詢(xún)性別為男的學(xué)生,顯示其學(xué)號和姓名并使結果按學(xué)號升序排列。 添加記錄 INSERT INTO 數據表名(字段名1,字段名2……) VALUES(數據1,數據2……) 舉例:insert into student (xh, xm, xb) values("015200101", "王小二", "男") 刪除記錄 DELETE FROM 數據表名 WHERE 條件表達式 舉例:delete from student where xb="男" 更新記錄 UPDATE 數據表名 SET 新數據值 WHERE 條件表達式 舉例:update student set cj=cj+5 where xb="女" 9.6 報表制作 1. 報表的概念 利用報表可以把數據表中的數據按一定的格式輸出到屏幕上或打印到紙上。 2. 制作報表的方法 在VB6.0中可以利用報表設計器來(lái)制作報表,從“工程”中選擇“添加data report”,將報表設計器加入到當前工程中,報表由5部分組成: 報表標頭——每份報表只有一個(gè),可以用標簽建立報表名。 頁(yè)標頭——每頁(yè)有一個(gè),即每頁(yè)的表頭,如字段名。 細節——需要輸出的具體數據,一行一條記錄。 頁(yè)腳注——每頁(yè)有一個(gè),如頁(yè)碼。 報表腳注——每份報表只有一個(gè),可以用標簽建立對本報表的注釋、說(shuō)明。 使用報表設計器處理的數據需要利用數據環(huán)境設計器創(chuàng )建與數據庫的連接, 從“工程”菜單中選擇 “添加Data Enviroment”,在連接中選擇指定的數據庫文件,完成與數據庫的連接,然后產(chǎn)生Command對象連接數據庫內的表。 制作報表的步驟: (1) 新建工程,在窗體上放置兩個(gè)命令按鈕; (2) 從“工程”菜單中“添加Data Enviroment”,右擊Connection1,在屬性中選擇“Microsoft Jet 4 OLE DB Provider”,在“連接”中指定數據庫; (3) 再次右擊Connection1,選則“添加命令”,創(chuàng )建Command1對象,右擊Command1,在屬性中設置該對象連接的數據源為需要打印的數據表; (4) 在從“工程”菜單中“添加Data Report”,在屬性窗口中設置DataSource為數據環(huán)境DataEnviroment1對象,DataMember為Command1對象,即指定數據報表設計器DataReport1的數據來(lái)源; (5) 將數據環(huán)境設計器中Command1對象內的字段拖到數據報表設計器的細節區; (6) 利用標簽控件在報表標頭區插入報表名,在頁(yè)標頭區設置報表每一頁(yè)頂部的標題; (7) 利用線(xiàn)條控件在報表內加入直線(xiàn),利用圖形控件和形狀控件加入圖案或圖形; (8) 利用DataReport1對象的Show方法顯示報表,在窗體Click事件加代碼:DataReport1.Show; (9) 利用預覽窗口按打印按鈕可以打印報表; (10) 利用預覽窗口工具欄上的導出按鈕可以將報表內容輸出成文本文件或Html文件;也可以利用DataReport1對象的ExportReport方法將報表內容輸出成文本文件或Html文件。 制作報表的簡(jiǎn)單方法是從“外接程序”中選擇報表向導來(lái)設計報表。 9.7 MIS系統設計示例 學(xué)生成績(jì)管理系統的設計 1. 建立工程文件 2. 設計系統主界面,驗證用戶(hù)身份 3. 建立Access數據庫,輸入若干記錄 4. 設計帶菜單的主窗體,把其他窗體組織起來(lái) 5. 根據需要完成系統功能,設計帶數據控件的各種窗體 6. 調試、修改 7. 生成EXE文件 | | | re:[b]常見(jiàn)錯誤和難點(diǎn)分析[/b][b...
常見(jiàn)錯誤和難點(diǎn)分析 1.在選擇結構中缺少配對的結束語(yǔ)句 對多行式的If塊語(yǔ)句中,應有配對的End If語(yǔ)句結束。否則,在運行時(shí)系統會(huì )顯示"塊 If沒(méi)有End If"的編譯錯誤。同樣對Select Case語(yǔ)句也應有與其相對應的End Select語(yǔ)句。 2.多邊選擇ElseIf關(guān)鍵字的書(shū)寫(xiě)和條件表達式的表示 多邊選擇ElseIf子句的關(guān)鍵字ElseIf之間不能寫(xiě)有空格,即不能寫(xiě)成Else If。 在多個(gè)條件表達式的表示時(shí),應從最小或最大的條件依次表示,以避免條件的過(guò)濾。例如,已知輸入某課程的百分制成績(jì)mark,要求顯示對應五級制的訐定,評定條件如下: 有以下幾種表示方式,語(yǔ)法上都沒(méi)有錯,但執行后結果有所不同,請分析哪些正確? 哪些錯誤? 下面給出的答案中,方法一、二、五正確,其余錯誤,請分析各自的原因。 方法一: 方法二: 方法三: 方法四: 方法五: If mark>=90Then Print"優(yōu)" ElseIf mark>=80Then Print"良" ElseIf mark>=70Then Print"中" ElseIfmark>-60Then Print"及格" Else Print"及格" End If If mark Print"不及格" ElseIf mark Print"及格" ElseIf mark Print"中" ElseIf mark Print"良" Else Print"優(yōu)" End If If mark>=60Then Print"及格" ElseIf mark>=70Then Print"中" Elselfmark>=80Then Print"良" Elselfmark>=90Then Print"優(yōu)" Else Print"不及格" End If If mark>=90Then Print"優(yōu)" ElseIf 80 Print"良" ElseIf 70 Print"中" ElseIf 60 Print"及格" Else Print"不及格" End If If mark>=90Then Print"優(yōu)" ElseIf 80 Print"良" ElseIf 70 Print"中" ElseIf 60 Print"及格" Else Print"不及格" End If 3.Select Case語(yǔ)句的使用 (1) "表達式列表i" 中不能使用"變量或表達式"中出現的變量。 例如,上述多邊選擇的例子改為Select Case語(yǔ)句實(shí)現,方法一Case子句中出現變量mark,運行時(shí)不管mark的值多少,始終執行Case Else子句,運行結果不正確;方法二、方法三正確。 方法一: 方法二: 方法三: Select Case mark Case mark>=90 Print"優(yōu)" Case mark>=80 Print"良" Casemark>=70 Print"中" Case mark>=60 Print"及格" Case Else Print"不及格" End Select Select Case mark Case Is>=90 Print"優(yōu)" Casels>=80 Print"良" Case Is>=70 Print"中" Case Is>=60 Prim"及格" Case Else Print"不及格" End Select Select Case mark Case Is>=90 Print"優(yōu)" Case 80 To 89 Print"良" Case 70 To 79 Print"中" Case 60 TO 69 Print"及格" Case Else Print"不及格" End Select (2) 在"變量或表達式"中不能出現多個(gè)變量。 實(shí)驗三第5題對三門(mén)課程獎學(xué)金的判斷,只能用If語(yǔ)句的多邊選擇,而不能用SelectCase語(yǔ)句實(shí)現。例如,有人用如下語(yǔ)句表示: Select Case markl,mark2,mark3 Case (markl+mark2+mark3)/3>=95 Print"一等獎" End Select 這樣就會(huì )在 "Select Case markl,mark2,mark3" 語(yǔ)句行出現編輯錯誤, 同時(shí) Case (markl+mark2 +mark3)/3>=95書(shū)寫(xiě)也錯誤。 第四章 常見(jiàn)錯誤和難點(diǎn)分析 1. 不循環(huán)或死循環(huán)的問(wèn)題主要是循環(huán)條件、循環(huán)初值、循環(huán)終值、循環(huán)步長(cháng)的設置有問(wèn)題。 例如,以下循環(huán)語(yǔ)句不執行循環(huán)體: For i=10 To 20 Step-1 ' 步長(cháng)為負,初值必須大于等于終值,才能循環(huán) For i=20 To10 ' 步長(cháng)為正,初值必須小于等于終值,才能循環(huán) Do While False ' 循環(huán)條件永遠不滿(mǎn)足,不循環(huán) 例如,以下循環(huán)語(yǔ)句死循環(huán): For i=10 To 20 Step 0 ' 步長(cháng)為零,死循環(huán) Do While 1 ' 循環(huán)條件永遠滿(mǎn)足,死循環(huán) 2.循環(huán)結構中缺少配對的結束語(yǔ)句 For…Next語(yǔ)句沒(méi)有配對的Next語(yǔ)句;Do語(yǔ)句沒(méi)有一個(gè)終結的Loop語(yǔ)句等。 | | | re:[b]3[/b][b].循環(huán)嵌套時(shí),內外...
3.循環(huán)嵌套時(shí),內外循環(huán)交叉 For I=1 to 4 For j=1 to 5 … Next i Next j 上述循環(huán)的交叉運行時(shí)顯示"無(wú)效的Next控制變量引用"。 4.累加、連乘時(shí),存放累加、連乘結果的變量賦初值問(wèn)題 (1) 一重循環(huán) 在一重循環(huán)中,存放累加、連乘結果的變量初值設置應在循環(huán)語(yǔ)句前。 例如,求1~100的3的倍數和,結果放入Sum變量中,如下程序段,輸出結果如何?應作如何改進(jìn)? Private SubForm_Click() For i=3 To 100 Step 3 Sum=0 Sum=Sum+i Next i Print Sum End Sub (2) 多重循環(huán) 在多重循環(huán)中,存放累加、連乘結果的變量初值設置放在外循環(huán)語(yǔ)句前,還是內循環(huán)語(yǔ)句前,這要視具體問(wèn)題分別對待。 例如,期末30位學(xué)生參加三門(mén)課程的考試,求每個(gè)學(xué)生的三門(mén)課程的平均成績(jì)如下程序能否實(shí)現? aver=0 For i=1 To 30 For j=1 To 3 m=InputBox("輸入第"&j&"門(mén)課的成績(jì)") aver=aver+m Next j aver=aver/3 Print aver Next I 第五章 常見(jiàn)錯誤和難點(diǎn)分析 1.Dim數組聲明 有時(shí)用戶(hù)為了程序的通用性,聲明數組的上界用變量來(lái)表示,如下程序段: n=InputBox("輸入數組的上界") Dim a(1 To n) As Integer 程序運行時(shí)將在Dim語(yǔ)句處顯示"要求常數表達式"的出錯信息。即Dim語(yǔ)句中聲明的數組上,下界必須是常數,不能是變量。 解決程序通用的問(wèn)題,一是將數組聲明的很大,這樣浪費一些存儲空間;二是利用動(dòng)態(tài)數組,將上例改變如下: Dim a() As Integer n=InputBox ("輸入數組的上界") ReDim a(1 To n)As Integer 2.數組下標越界 引用了不存在的數組元素,即下標比數組聲明時(shí)的下標范圍大或小即為越界。例如,要形成有如下30項的斐波那契數列: 1,1,2,3,5,8,13,21,34,…,317811,514229,832040 正確的程序段如下: Dim a(1 To 30) As Long, i% 若將For i=3 To 30改為For i=1 To 30,程序運行時(shí)會(huì )顯示"下標越界"的出錯信息,因為開(kāi)始循環(huán)時(shí)i=l,執行到循環(huán)體語(yǔ)句a(i)=a(i-2)+a(i-1),數組下標i-2、i-1均小于下界1。 同樣若將上例:a(i)+a(i-2)+a(i-1) 語(yǔ)句改為:a(i+2)=a(i)+a(i+1) 程序運行時(shí)也會(huì )顯示"下標越界"的出錯信息,這時(shí)是數組下標大于上界30。 3.數組維數錯 數組聲明時(shí)的維數與引用數組元素時(shí)的維數不一致。例如,下程序段為形成和顯示3×5的矩陣: Dim a(3,5) As Long For i=1 To 3 For j=1 To 5 a(i)=i*j Print a(i);""; Next j Print Next i 程序運行到a(i)=i*j語(yǔ)句時(shí)出現"維數錯誤"的信息,因為在Dim聲明時(shí)是二維數組,引用時(shí)的一個(gè)下標。 4.Aarry函數使用問(wèn)題 Aarry函數可方便地對數組整體賦值,但此時(shí)只能聲明Variant的變量或僅由括號括起的動(dòng)態(tài)數組。賦值后的數組大小由賦值的個(gè)數決定。 例如,要將1,2,3,4,5,6,7這些值賦值給數組a,下表列出了三種錯誤及相應正確的賦值方法。 Aarry函數表示方法 錯誤的Aarry函數賦值, 改正的Aarry函數賦值 Dim a(1 To 8) a=Array(1,2,3,4,5,6,7,8) Dim a( ) a=Array(1,2,3,4,5,6,7) Dim a As Integer a=Array(1,2,3,4,5,6,7) Dim aa=Array(1,2,3,4,5,6,7) Dim aa()=Array(1,2,3,4,5,6,7) Dim aa=Array(1,2,3,4,5,6,7) 5.如何獲得數組的上界、下界 Aarry函數可方便地對數組整體賦值,但在程序中如何獲得數組的-上界、下界,以保證訪(fǎng)問(wèn)的數組元素在合法的范圍內,可使用UBound和LBound函數來(lái)決定數組訪(fǎng)問(wèn)。 在上例中,若要打印a數組的各個(gè)值,可通過(guò)下面程序段實(shí)現: For i=Lbound(A) To Ubound(A) Print a(i) Next l 6.給數組賦值 VB6.0提供了可對數組整體賦值的新功能,方便了數組對數組的賦值操作。但真正使用不那么方便,有不少限制。數組賦值形式如下:數組名2=數組名1 這里的數組名2,實(shí)際上在前面的數組聲明時(shí),只能聲明為Varian的變量,賦值后的數組2的大小、維數、類(lèi)型同數組名1;否則,若聲明成動(dòng)態(tài)或靜態(tài)的數組,例如: Dim數組名2() 或Dim數組名2 (下標) 程序在運行到上述賦值語(yǔ)句時(shí)顯示"不能給數組賦值"的出錯信息。 第五章 數 組 5.1 知識要點(diǎn) 1.數組的概念 數組:存放具有相同性質(zhì)的一組數據,也就是數組中的數據必須是同一個(gè)類(lèi)型和性質(zhì)。 數組元素:數組中的某一個(gè)數據項。數組元素的使用同簡(jiǎn)單變量的使用。 2.靜態(tài)數組的聲明 靜態(tài)數組:在聲明時(shí)已確定了數組元素個(gè)數。 聲明形式:Dim數組名([下界To]上界[,[下界To]上界[,…]])As 類(lèi)型 此語(yǔ)句聲明了數組名、數組維數、數組大小、數組類(lèi)型。 [注意] 下界、上界必須為常數,不能為表達式或變量:省略下界,默認為0,也可用Option Base語(yǔ)句重新設置下界的值。 3.動(dòng)態(tài)數組的聲明 聲明形式: Dim數組名 () ReDim [Preserve]數組名([下界To]上界[,[下界To]上界[,…]]) [注意] 此時(shí)的上界、下界可以是賦了值的變量或表達式。若有Preserve關(guān)鍵字,表示當改變原有數組最末尾的大小時(shí),使用此關(guān)鍵字可以保持數組中原來(lái)的數據。 4.控件數組 即相同類(lèi)型的控件組成的數組。 控件數組的建立:在設計時(shí)的窗體上,通過(guò)對某控件的復制和粘貼操作:在程序運行時(shí)通過(guò)Load方法實(shí)現。 控件數組元素:由控件的Index屬性值表示數組的F標。 5.數組的操作 應掌握的基本操作有:數組初始化、數組輸入、數組輸出、求數組中的最大(最小)元素及下標、求和、平均值、排序和查找等。 5.2 常見(jiàn)錯誤和難點(diǎn)分析 1.Dim數組聲明 有時(shí)用戶(hù)為了程序的通用性,聲明數組的上界用變量來(lái)表示,如下程序段: n=InputBox("輸入數組的上界") Dim a(1 To n) As Integer 程序運行時(shí)將在Dim語(yǔ)句處顯示"要求常數表達式"的出錯信息。即Dim語(yǔ)句中聲明的數組上,下界必須是常數,不能是變量。 解決程序通用的問(wèn)題,一是將數組聲明的很大,這樣浪費一些存儲空間;二是利用動(dòng)態(tài)數組,將上例改變如下: Dim a() As Integer n=InputBox ("輸入數組的上界") ReDim a(1 To n)As Integer 2.數組下標越界 引用了不存在的數組元素,即下標比數組聲明時(shí)的下標范圍大或小即為越界。例如,要形成有如下30項的斐波那契數列: 1,1,2,3,5,8,13,21,34,…,317811,514229,832040 正確的程序段如下: Dim a(1 To 30) As Long, i% 若將For i=3 To 30改為For i=1 To 30,程序運行時(shí)會(huì )顯示"下標越界"的出錯信息,因為開(kāi)始循環(huán)時(shí)i=l,執行到循環(huán)體語(yǔ)句a(i)=a(i-2)+a(i-1),數組下標i-2、i-1均小于下界1。 同樣若將上例:a(i)+a(i-2)+a(i-1) 語(yǔ)句改為:a(i+2)=a(i)+a(i+1) 程序運行時(shí)也會(huì )顯示"下標越界"的出錯信息,這時(shí)是數組下標大于上界30。 3.數組維數錯 數組聲明時(shí)的維數與引用數組元素時(shí)的維數不一致。例如,下程序段為形成和顯示3×5的矩陣: Dim a(3,5) As Long For i=1 To 3 For j=1 To 5 a(i)=i*j Print a(i);""; Next j Print Next i 程序運行到a(i)=i*j語(yǔ)句時(shí)出現"維數錯誤"的信息,因為在Dim聲明時(shí)是二維數組,引用時(shí)的一個(gè)下標。 4.Aarry函數使用問(wèn)題 Aarry函數可方便地對數組整體賦值,但此時(shí)只能聲明Variant的變量或僅由括號括起的動(dòng)態(tài)數組。賦值后的數組大小由賦值的個(gè)數決定。 例如,要將1,2,3,4,5,6,7這些值賦值給數組a,下表列出了三種錯誤及相應正確的賦值方法。 Aarry函數表示方法 錯誤的Aarry函數賦值, 改正的Aarry函數賦值 Dim a(1 To 8) a=Array(1,2,3,4,5,6,7,8) Dim a( ) a=Array(1,2,3,4,5,6,7) Dim a As Integer a=Array(1,2,3,4,5,6,7) Dim aa=Array(1,2,3,4,5,6,7) Dim aa()=Array(1,2,3,4,5,6,7) Dim aa=Array(1,2,3,4,5,6,7) 5.如何獲得數組的上界、下界 Aarry函數可方便地對數組整體賦值,但在程序中如何獲得數組的-上界、下界,以保證訪(fǎng)問(wèn)的數組元素在合法的范圍內,可使用UBound和LBound函數來(lái)決定數組訪(fǎng)問(wèn)。 在上例中,若要打印a數組的各個(gè)值,可通過(guò)下面程序段實(shí)現: For i=Lbound(A) To Ubound(A) Print a(i) Next l 6.給數組賦值 VB6.0提供了可對數組整體賦值的新功能,方便了數組對數組的賦值操作。但真正使用不那么方便,有不少限制。數組賦值形式如下:數組名2=數組名1 這里的數組名2,實(shí)際上在前面的數組聲明時(shí),只能聲明為Varian的變量,賦值后的數組2的大小、維數、類(lèi)型同數組名1;否則,若聲明成動(dòng)態(tài)或靜態(tài)的數組,例如: Dim數組名2() 或Dim數組名2 (下標) 程序在運行到上述賦值語(yǔ)句時(shí)顯示"不能給數組賦值"的出錯信息。 | Powered by 夢(mèng)清雲淡社區 © 2005-2008 http://sxhouse.org/
|