450 likes | 688 Views
進階資料處理 第十六章 淺談 Access 程式設計. 鄧姚文 joseph@im.knu.edu.tw http://w3.im.knu.edu.tw/~joseph. 大綱. 程式設計概念 認識 Access 的 VBA 程式設計 SQL 語言. 程式設計概念. 事件驅動 當系統發生某件事情時(滑鼠、鍵盤被按下某個按鍵),才能夠驅動某一個程式模組執行動作 依照使用者不同的動作做出相對的回應 物件導向 把所有的東西都當作物件(表單、報表、控制項) 物件將他自己的屬性與動作封裝在物件內部,依照外在環境的變化做出適當的回應
E N D
進階資料處理第十六章 淺談Access程式設計 鄧姚文 joseph@im.knu.edu.tw http://w3.im.knu.edu.tw/~joseph
大綱 • 程式設計概念 • 認識 Access 的 VBA 程式設計 • SQL 語言
程式設計概念 • 事件驅動 • 當系統發生某件事情時(滑鼠、鍵盤被按下某個按鍵),才能夠驅動某一個程式模組執行動作 • 依照使用者不同的動作做出相對的回應 • 物件導向 • 把所有的東西都當作物件(表單、報表、控制項) • 物件將他自己的屬性與動作封裝在物件內部,依照外在環境的變化做出適當的回應 • DAO: Data Access Object • 將資料包裝成物件
認識 Access 的 VBA 程式設計 • VBA • Visual Basic for Application • Microsoft 自 Office97 開始推出 VBA • 以 VBA 控制 Office 套件中所有的元件,整合各種應用程式(Word、Excel、Access、PowerPoint) • VBE • Visual Basic Editor • 內建於 Office 套件中的 VBA 編輯器
基本的程式設計觀念 • 程式執行的方式是由上而下,一行一行執行的 • 每一行程式執行時,是由左到右執行的,執行完後就跳到下一行的開頭,再由左到右執行 • 程式是一種電腦的語言,跟人的語言一樣有一定的文法和用字,而這些都是人創造出來與電腦溝通用的。 • 程式裡面的特殊用字稱為『關鍵字』Keyword • 程式的文法稱為『語法』
VBA 變數宣告與資料型別 • 變數 • 類似數學裡面的『代數』 • F(x)=3x2+4x+7 • 為了敘述計算流程所使用的符號 • 實際的計算結果端視程式執行時變數的『值』而定 • 變數宣告的語法Dim 變數名稱 As 資料型別 • 變數名稱不能夠與 VBA 的關鍵字相同 • 不可以使用標點符號或空白,第一個字元不可以是數字,可以使用中文 • 變數名稱的長度限制為 255 個字元
算數運算運算子 • 加:+ • 減:- • 乘:* • 除:/ • 整數除法:\ • 7 \ 2 = 3 • 指數:^ • 7 ^ 2 = 49 • 取餘數:MOD • 7 MOD 2 = 1
連接運算子 • 將兩個字串連接在一起 • name & “您好!” • 也可以用 name + “您好!”
比較運算子 • 等於: = • 大於: > • 小於: < • 大於等於: >= • 小於等於: <= • 不等於: <> • 比較兩物件是否相同: Is • A Is B • 比較兩物件是否相似: Like • “Jo*” Like “John”
常用符號 • 指定 • A = 2^10 • A = A + 1 • 註解 • A = A + 1 ‘ 將變數 A 的值加 1 • 字串符號 • name = “Joseph” • 日期符號 • today = #2003/5/23# • 接續下一行(使用底線符號) • x = (y^4 + 4*y^3 – 3*y^2 + 2*y) / _ (2*z^3 + 3*z^2)
型別轉換 • 在一個運算式之中混和不同型別的變數 • 自動型別轉換 • 原則:將精準度低的轉換成精準度高的 • Dim x As Integer, y As Double, z As Doublex = 2y = 3.5z = x + y ‘ 將x轉成Double後與y相加 • 浮點數轉成整數會四捨五入 • Dim x As Integer, y As Doubley = 2.5x = y ‘ x 的值為 3
型別轉換 • 強制型別轉換 • 轉成布林: CBool(運算式) • 轉成 Byte: CByte(運算式) • 轉成金錢: CCur(運算式) • 轉成日期: CDate(運算式) • 轉成十進位: CDec(運算式) • 轉成整數: CInt(運算式) • 轉成長整數: CLng(運算式) • 轉成單精度: CSng(運算式) • 轉成倍精度: CDbl(運算式) • 轉成字串: CStr(運算式)
流程控制判斷結構 • If 條件式 Then程式區段一End If • If 條件式 Then程式區段一Else程式區段二End If
流程控制判斷結構 • Select Case 運算式或變數Case 條件式一 程式區段一Case 條件式二 程式區段二…End Select
流程控制迴圈 • 在條件的控制下重複執行某件工作
Access 事件 • 事件的發生觸發程式的執行 • 事件的種類 • 資料事件 • 鍵盤事件 • 錯誤與時間事件 • 滑鼠事件 • 篩選事件 • 列印事件 • 焦點事件 • 視窗事件
類別模組使用範例由事件觸發程序 • 在表單 OnClose 事件加掛一個類別模組,於表單關閉時蹦出對話方塊,確認表單關閉。 • vbOK, vbCancel, vbOKCancel 常數 • 以 DoCmd 物件方法執行巨集指令 • 範例:ex3-2.mdb
自訂事件 • 自訂一個 MyTimer 物件類別模組 • 每一秒鐘發出一次 Second 事件 • 倒數完成發出 TimeIsUp 訊息 • 範例 ex3-4.mdb • Private Sub Class_Initialize() 物件被建立時發生 • Private Sub Class_Terminate() 物件被毀滅時發生
類別模組使用範例存取表單屬性與控制項 • Me 指表單自己 • Me![控制項] • Me.屬性名稱 • Me![控制項].屬性名稱 • Me![Text1].Name • 範例:ex3-2-5.mdb
類別模組自訂屬性 • 用 Dim、Public、Private 定義屬性 • 用 Property Get 撰寫取得屬性值的方法 • Property Get 屬性名稱() As 屬性資料型態…屬性名稱 = 屬性值[Exit Property] …End Property • 用 Property Let 或 Property Set 設定屬性值 • Property Let 只能設定資料型態的屬性,不能設定物件型態的屬性
類別模組自訂屬性 • Property Let 屬性名稱(傳入參數 As 資料型態) … [Exit Property] …End Property • Property Set 屬性名稱(傳入參數 As 資料型態) … [Exit Property] …End Property
標準模組 • 標準模組 • 物件\模組 之中的模組 • 建立自訂函數 • 範例:在報表之中使用自訂函數,顯示國字的數字
Public Function CnConvert1(number As Integer) As String If (IsNull(number)) Then MsgBox "錯誤:傳入值為負值或傳入Null值" Else Select Case number Case 0 CnConvert1 = "零" Case 1 CnConvert1 = "壹" Case 2 CnConvert1 = "貳" Case 3 CnConvert1 = "參" Case 4 CnConvert1 = "肆" Case 5 CnConvert1 = "伍" Case 6 CnConvert1 = "陸" Case 7 CnConvert1 = "柒" Case 8 CnConvert1 = "捌" Case 9 CnConvert1 = "玖" End Select End If End Function Ex3-3.mdb
Public Function CnConvert(number As Long) As String Dim number_string As String Dim number_len As Integer Dim result As String Dim i As Integer result = "" number_string = CStr(number) number_len = Len(number_string) If (number_len > 7) Then MsgBox "數字過大無法轉換" GoTo line End If For i = 1 To number_len Select Case i Case 1 result = CnConvert1(number Mod 10) + " 元整" + result Case 2 result = CnConvert1((number Mod 100) \ 10) + " 拾 " + result Case 3 result = CnConvert1((number Mod 1000) \ 100) + " 佰 " + result Case 4 result = CnConvert1((number Mod 10000) \ 1000) + " 仟 " + result Case 5 result = CnConvert1((number Mod 100000) \ 10000) + " 萬 " + result Case 6 result = CnConvert1((number Mod 1000000) \ 100000) + " 拾 " + result Case 7 result = CnConvert1((number Mod 10000000) \ 1000000) + " 佰 " + result End Select Next CnConvert = result line: End Function Ex3-3.mdb
SQL 語言 • Structural Query Language • 結構化查詢語言 • 以統一的語法存取資料庫