53
主主主主主主主主 - CH8 1 第 8 第 DAO 第第第第第第第第第

主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

  • View
    376

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 1

第 8 章 DAO 物件應用和程式設計

Page 2: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 2

本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令 介紹資料表自動連入與移除之處理方式 介紹 VBA 資料庫操作指令與程序檔建檔範例 介紹事件導向之程式設計風格 介紹多功能整合式表單之設計方式 簡介 DAO 物件設計 API 之進階應用- SQL 指令集管

Page 3: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 3

大 綱8-1 前置處理 8-2 DAO 指令簡介 8-3 進階應用

Page 4: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 4

8-1 前置處理 DAO 為 Data Access Object 之縮血寫 DAO 物件大都以 VBA 語言來設計程序或函數,

再以這些程序和函數來處理資料。完成程序設計後,還需要將 DAO 物件引入,程序檔方能正常執行

Page 5: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 5

8-1 前置處理 ( 續 )

引用過程 開啟任一表單在設計模式 點選主功能表【檢視】、【程式碼】 點選程式碼視窗【工具】、【設定引用項目 (R) 】 出現設定引用項目視窗後,捲動可引用項目,請勾

選【 Microsoft DAO 3.6 Object Library 】 按下優先權方向鍵,將前述選項往上移至頂端 按【確定】鈕,結束引用過程

Page 6: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 6

8-1 前置處理 ( 續 )

引用結果

Page 7: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 7

8-2 DAO 指令簡介8-2-1 資料庫連結 8-2-2 紀錄集開啟指令語法 8-2-3 查詢介面建立與執行 8-2-4 資料處理程序 8-2-5 紀錄及欄位操作指令說明

Page 8: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 8

8-2-1 資料庫連結 DAO 與其他資料庫連結方式

直接以連線物件連結,資料在伺服端處理 直接以連線物件連結,資料在主控端處理 透過資料庫引擎,搭配 ODBC 將資料表連入 A

ccess

Page 9: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 9

資料庫連結比較

連線方式 連線方法 資料處理區

紀錄搜尋方法 查詢介面

連線物件 OpenConnection dbUseODBC

使用 SQL 之 Where 子句

可建立暫時性查詢但不能指名

連線物件 OpenDatabase dbUseJet/dbUseOD

BC

使用 Find 可建立暫時性查詢但不能指名

資料庫引擎 TransferDatabase dbUseJet 使用 Find 可建立暫時性查詢且能指名

Page 10: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 10

1. 以 TransferDatabase 指令連結資料表

1.1 TransferDatabase 指令• 語法: Docmd.TransferDatabase 參數一,參數二,

參數三,參數四,參數五,參數六,參數七• 參數一:連結型態,分別是 acLink, acImport, acExp

ort ,請選用【 acLink 】• 參數二:資料庫類型,請選用【 ODBC 資料庫】• 參數三:資料庫名稱,須包含路徑或連結字串

Page 11: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 11

1. 以 TransferDatabase 指令連結資料表 ( 續 )

• 參數四:資料類型,請選用【 acTable 】• 參數五:來源資料名稱,請輸入【資料表名

稱】• 參數六:目的資料名稱,請輸入【資料表名

稱】• 參數七:只含資料結構,請輸入【 False 】

Page 12: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 12

1. 以 TransferDatabase 指令連結資料表 ( 續 )

應用範例 DoCmd.TransferDatabase acLink, "ODBC 資料庫 ", "O

DBC; Driver={MySQL ODBC 3.51 Driver}; Server=Localhost; Database=mysal; UID= 帳號 ; PWD= 密碼 ; Option=3 ", acTable, “cuinfo”, “cuinfo”, False

或改用 DoCmd.TransferDatabase acLink, "ODBC 資料庫 ", "O

DBC; DSN= 資料來源名稱 ; Database=mysal; UID= 帳號 ; PWD= 密碼 ; Option=3 ", acTable, “cuinfo”, “cuinfo”, False

Page 13: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 13

1. 以 TransferDatabase 指令連結資料表 ( 續 )

範例說明 帳號和密碼,輸入要登錄 MySQL 之對應帳號

和密碼 資料來源名稱則為 ODBC 資料管理員之設定名

稱 設定 DSN 時,可以單獨指定 Name 和 Host 參

數,帳號、密碼和資料庫名稱三項參述則在前述指令內加入亦可,如此可提高系統安全性

上述指令可加入在表單介面內,然後搭配 On Open 事件程序使用

Page 14: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 14

1.1 以公用程序連結資料表 首先點取【模組物件】、【新增】,新增一個名稱叫 c

onModule 之模組。 在模組內新增一個名稱叫【 LinkTable 】之公用程序,

完整指令如下: Public Sub LinkTable(wdb as string, tbn as string)

DoCmd.TransferDatabase acLink, "ODBC 資料庫 ", "ODBC; Driver= “ & _ “{MySQL ODBC 3.51 Driver}; Server=Localhost; Database=” & wdb & “;” & _ “UID= 帳號 ; PWD= 密碼 ; Option=3 ", tbn, tbn, False

End Sub

Page 15: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 15

1.1 以公用程序連結資料表 ( 續 )

在處理資料之表單介面適當位置 ( 例如 On Open 事件 ) 加入下列指令,即可連結資料表:Call LinkTable(“ 資料庫名稱” ,” 資料表名稱” )

例如: Call LinkTable(“mysal”,”cuinfo”)

Page 16: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 16

1.2 移除連結資料表 可直接在資料表物件容器點取對應資料表,然

後按刪除鍵,或是 以程序檔在應用程式介面內將連結資料表移除 應用範例:在 conModule 模組內新增一個名稱

叫 dlTmptbl 之公用程序

Page 17: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 17

dlTmptbl 程式內容1. Public Sub dlTmptbl(tbn As String)2. Dim tbl As TableDef3. Dim db As Database4. Set db = CurrentDb5. With db6. For Each tbl In db.TableDefs7. If tbl.Name = tbn Then8. db.TableDefs.Delete tbl.Name9. Exit For10. End If11. Next tbl12. End With13. End Sub

Page 18: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 18

dlTmptbl 程式應用 在主功能表之 On Close 事件程序加入下列

指令,就可以自動移除連結資料表 1. Dim db as database

2. Dim rs as recordset

3. Set db = currentdb

4. Set rs=db.OpenRecordset(“Select * From sysTable Where database= ’mysal’”)

Page 19: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 19

dlTmptbl 程式應用 ( 續 )

5. With rs

6. Do while not .EOF

7. Call dlTmptbl(rs!Table)

8. .movenext

9. Loop

10. End With

11. rs.close

Page 20: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 20

1.3 開啟資料表 指令

方法一:Set rs = db.OpenRecordset("cuinfo")

方法二:Set rs = db.OpenRecordset("Select * From cuinfo")

方法三:Set qry = db.CreateQueryDef(" 查詢名稱 ", "SQL 指

令 ")

Set rs = qry.OpenRecordset()

Page 21: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 21

1.3 開啟資料表 ( 續 )

應用說明 此方式開啟之紀錄集,不能直接連結至 Access

之其他介面,只能以 DAO 物件提供之方法操作紀錄

指定名稱建立查詢時,該查詢介面可儲存在 Access 查詢物件內,且該查詢介面可以直接連結至表單介面

Page 22: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 22

1.4 操作資料庫及處理資料 使用 SQL 指令操作資料庫及處理資料

Dim qry As QueryDef

Set qry = db.CreateQueryDef("", "SQL 指令 ")

qry.Execute

Page 23: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 23

2. 使用 OpenDatabase 方法 此方法須建立一個工作區,作為主從端對話空

間 連結指令:

語法: Set workspace = CreateWorkspace(name, us

er, password, type)

Set database = workspace.OpenDatabase (dbname, options, read-only, connect)

Page 24: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 24

2. 使用 OpenDatabase 方法( 續 ) 其中各項變數之意義 :

Workspace :工作區物件變數 name :工作區名稱,只建立一個工作區時,可不指名 user :工作區帳號,通常使用預設值” Admin” ,非 My

SQL 之登入帳號。 password :密碼,可缺設 type :使用 dbUseJet( 主控端 )| 或是 dbUseODBC( 伺

服端 ) dbname :資料庫名稱 (Jet) 或是資料來源名稱 (ODBC) Options :選項常數

Page 25: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 25

2. 使用 OpenDatabase 方法( 續 )

Options :可使用下列常數值 dbDriverNoPrompt :預設以 dbname 和 connection str

ing 與伺服器連線,若連線資訊不足時將提示錯誤 dbDriverPrompt :連線時將提示 DSN 對話框,若處理人員未選取 DSN ,則以預設之 DSN 資訊來連結

dbDriverComplete :此為預設值,假設連線字串已包含足夠的連線資訊

dbDriverCompleteRequired :與 dbDriverComplete 類似,除了 ODBC驅動程式無法提示足夠的連線資訊時

read-only :唯讀屬性 connect :連線字串

Page 26: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 26

2.1 應用範例 在模組內新增一公用程序 - openDB ,指令如下:

1. Public ws As Workspace2. Public db As Database3. Public As Recordset4. Public Sub openDB()5. Dim str As String6. Set ws = DBEngine.CreateWorkspace("", “Admin", "", dbUseJ

et)7. str = "ODBC; DRIVER={MySQL ODBC 3.51 Driver}; SERVER

= localhost; DATABASE=mysal; UID= 帳號 ; PWD= 密碼 ; OPTION=3“

8. Set db = ws.OpenDataBase(" 資料來源 ", dbDriverNoPrompt, False, str)

9.End Sub

Page 27: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 27

2.1 應用範例 ( 續 )

在主功能表之 On Open 事件程序加入下列指令,就可以自動建立連線物件

Call openDB 資料表開啟與處理方法與第一種連結方式相同,

但是建立查詢介面時,不能指定介面名稱

Page 28: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 28

8-2-2 紀錄集開啟指令 1. 語法

搭配連線物件或資料庫物件 語法:

Set recordset = object.OpenRecordset ( 資料源 , 型態 , 選項 , 讀寫模式 )

範例:Set rs = con.OpenRecordset( 引數串列 )

Set rs = db.OpenRecordset( 引數串列 )

Page 29: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 29

1. 語法 ( 續 )

搭配查詢、紀錄集或資料表 語法:

Set recordset = object.OpenRecordset ( 型態 , 選項 , 讀寫模式 )

範例:Set rs = qry.OpenRecordset( 引數串列 )

Page 30: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 30

2. 各項參數之用法 資料源:可以是資料表或是 SQL 指令 型態:可選用下列常數

dbOpenTable :開啟資料表型式之紀錄集 ( 適用於 dbUseJet)

dbOpenDynamic :開啟動態型之紀錄集 ( 適用於 dbUseODBC)

dbOpenDynaset :開啟動態集之紀錄集,類似 ODBC keyset 紀錄指標

dbOpenSnapshot :開啟快照型之紀錄集 , 類似 ODBC static 紀錄指標

dbOpenForwardOnly :開啟前導型之紀錄集

Page 31: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 31

2. 各項參數之用法 ( 續 )

註: 若未指定型態, dbUseJet 預設為資料表型 若搭配物件為資料表或查詢,則預設為動態集 dbUseODBC 預設為前導型。

Page 32: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 32

2. 各項參數之用法 ( 續 )

可選用下列常數選項 dbAppendOnly :新增紀錄,但不能編輯和刪

除 ( 適用於 dbUseJet 之 dynaset 紀錄集 ) dbSQLPassThrough :傳送一道 SQL 指令至

伺服端 ( 適用於 dbUseJet 之 snapshot- 紀錄集 )

dbSeeChanges :在多人使用環境下,有人試圖變更他人正在編輯的資料,立即產生錯誤信息 ( 適用於 dbUseJet 之 dynaset 紀錄集 )

Page 33: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 33

2. 各項參數之用法 - 選項

dbDenyWrite :預防他人修改或新增紀錄 ( 適用於dbUseJet 紀錄集物件 )

dbDenyRead :預防他人讀取紀錄 ( 適用於 dbUseJet 之 table 紀錄集 )

dbRunAsync :非同步查詢 ( 適用於 ODBCDirect工作區 )

Page 34: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 34

2. 各項參數之用法 - 選項

dbExecDirect :執行查詢時,跳過 SQLPrepare直接叫用 SQLExecDirect ( 適用於 ODBCDirect 工作區 ) ,當紀錄未以參數式查詢開啟時,需搭配此項參數

dbInconsistent :允許不一致更新資料 ( 適用於 dbUseJet 之 dynaset 與 snapshot 紀錄集 )

dbConsistent :允許一致更新資料 ( 適用於 dbUseJet 之 dynaset 與 snapshot 紀錄集 )

Page 35: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 35

2. 各項參數之用法 - 讀寫模式 dbReadOnly :唯讀模式 (ODBCDirect 工作區預設模

式 ) ,此模式不能同時出現在選項和讀寫參數設定 dbPessimistic :當下達 Edit 指令後,立即將包含該紀

錄之資料頁鎖定 (Jet 工作區預設模式 ) dbOptimistic :當下達 Update 指令後,才將包含該紀錄

之資料頁鎖定 (Jet 工作區預設模式 ) dbOptimisticValue :以記錄為單位樂觀型更新資料 ( 適

用於 ODBCDirect 工作區 ) dbOptimisticBatch :允許以批次方式樂觀型更新資料

( 適用於 ODBCDirect 工作區 )

Page 36: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 36

8-2-3 查詢介面建立與執行 1. 查詢介面建立語法

語法: Set qry = object.CreateQueryDef (name, sqltext)

qry :查詢物件變數 object :資料來源物件,可以是連線物件或是資料

庫物件

Page 37: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 37

1. 查詢介面建立語法 ( 續 )

name :查詢介面名稱 若 object 為連線物件或是資料庫物件時(只適用於 dbUseJet),不得指定名稱

若為連結型資料表(以 TransferDatabase 連線者),可以指定名稱,也可以缺設

指定名稱時,不可以和查詢物件內的其他介面同名sqltext : SQL 指令敘述,建立 qry 物件時可缺設,

然後在他處設定 qry.SQL 之屬性值即可

Page 38: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 38

2. 查詢介面執行語法 若屬選取型 (Select) 之查詢介面,可直接連結

至表單來查看資料 或是以下列指令來開啟一個紀錄集 Set rs = qry.OpenRecordset() 若屬動作型 ( 如 Insert, Update, Delete等 ) 之

查詢介面,可以使用下列指令來處理資料 qry.Execute options

Page 39: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 39

2. 查詢介面執行語法 ( 續 )

其中 options有下列常數選項: dbDenyWrite :預防他人寫入資料 ( 只適用於 Jet

工作區 ) dbInconsistent :預設值,不一致的更新資料 ( 只

適用於 Jet 工作區 ) dbConsistent :一致型更新資料 ( 只適用於 Jet 工

作區 ) dbSQLPassThrough :將 SQL傳送給伺服端去處

理資料 ( 只適用於 Jet 工作區 )

Page 40: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 40

2. 查詢介面執行語法 ( 續 )

dbFailOnError :處理資料發生錯誤時,倒捲回原始狀態 ( 只適用於 Jet 工作區 )

dbSeeChanges :在多人使用環境下,有人試圖變更他人正在編輯的資料,立即產生錯誤信息 ( 只適用於 Jet 工作區 )

dbRunAsync :非同步處理資料 ( 適用於 ODBCDirect 工作區 )

dbExecDirect :使用於未以 SQLPrepare 方式呼叫 ODBC 介面方法 ( 適用於 ODBCDirect 連線物件之查詢介面 )

Page 41: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 41

8-2-4 資料處理程序 新增紀錄 指令 :

rs.AddNew :新增一筆空白紀錄 ( 在記憶體 ) rs.Update :將記憶體資料寫回磁碟 rs!CU_Tel = Me!CU_Tel :將表單控制項資料

置入紀錄集之對應欄位 Me!CU_Tel = rs!CU_Tel :將紀錄集之欄位資

料置入表單控制項

Page 42: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 42

8-2-4 資料處理程序 ( 續 )

查詢紀錄 搜尋紀錄指令: rs.FindFirst 範例: rs.FindFirst "CU_No ='" & Me!CU_No & "'“找次筆指令: rs.FindNext 判斷未找到: rs.Nomatch

Page 43: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 43

8-2-4 資料處理程序 ( 續 )

刪除記錄 指令: rs.Delete 刪除資料時,最好能提示處理人員

Style = vbYesNo + vbCritical + vbDefaultButton2

rps = MsgBox(" 刪除紀錄嗎 ?", Style, " 刪除紀錄 ")

If rps = vbYes Then

rs.Delete

End If

Page 44: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 44

8-2-4 資料處理程序 ( 續 )

儲存 /編輯紀錄 指令:

rs.Edit :執行編輯資料 (記憶體 )

rs.Update :將記憶體資料寫回磁碟

Page 45: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 45

8-2-4 資料處理程序 ( 續 )

更新資料、轉檔或批次刪除資料 使用動作查詢方法 範例:

Str2=” Update rcpay, 銷貨金額計算 Set rcpay.CR_Spamt = rcpay!CR_Spamt “ & _ “+ 銷貨金額計算 !Amount, rcpay.CR_Upamt = rcpay!CR_Upamt + “ & _“銷貨金額計算 !Amount, 銷貨金額計算 .TR_Note = ‘T’ “ & _“WHERE ((([銷貨金額計算 ].[TR_Note]) Is Null));”

Set qry2 = db.CreateQueryDef("", str2)qry2.Execute

Page 46: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 46

更新資料、轉檔或批次刪除資料 使用紀錄集操作方法, 範例:

str1=” Select spbill.SP_Blno, spbill.CU_No, splist.PD_No, splist.SP_Qty,” & _ “cuquoat.UN_Price, splist!SP_Qty*cuquoat!UN_Price AS Amount, “ & _ “splist.TR_Note FROM cuquoat Inner Join (spbill Inner Join splist ON “ & _ “spbill.SP_Blno = splist.SP_Blno) ON (cuquoat.CU_No = spbill.CU_No) “ & _ “And (cuquoat.PD_No = splist.PD_No) Where (((splist.TR_Note) Is Null)) ” & _ “ Order By spbill.CU_No;”

Set qry1 = db.CreateQueryDef("", str1)

Set rs1 = qry1.OpenRecordset()

str2 = “Select * From rcpay Order By CU_No;”

Set rs2 = db.OpenRecordset(str2)

With rs1

Page 47: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 47

使用紀錄集操作方法 ( 續 )

Do While Not .EOF

cu=!CU_No

With rs2

.MoveFirst

.FindFirst “CU_No = ‘” & cu & “’”

If Not .NoMatch Then

.Edit

!CR_Spamt = !CR_Spamt + rs1!Amount

!CR_Upamt =!CR_Upamt + rs1!Amount

.Update

rs1.Edit rs1!TR_Note = ‘T’ rs1.Update End If End With .MoveNext LoopEnd Withrs1.Closers2.Close

Page 48: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 48

8-2-5 紀錄及欄位操作指令說明 1. 搜尋紀錄指令: FindFirst

• 語法: FindFirst 參數一 參數二 參數三• 說明:參數一為欄名,參數二為關係運算子,參數三為欄位

值• 範例: rs.FindFirst “CU_No = ‘” & cu & “’” ,因為 cu 為字串

變數,所以前後需加上單引號,若為日期變數則前後要加上# ,若為數值則直接代入變數

• 搜尋次筆,語法: FindNext• 搜尋末筆,語法: FindLast

Page 49: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 49

8-2-5 紀錄及欄位操作指令說明 ( 續 )

2. 移動紀錄指令 移次筆,語法: MoveNext 移上筆,語法: MovePrevious 第一筆,語法: MoveFirst• 最末筆,語法: MoveLast

3. 計算紀錄筆數語法: rs. RecordCount ,回傳結果為長整數

4. 計算欄位數語法: rs. Fields. Count ,回傳結果為整數

5. 取得欄名語法: rs(i).Name

Page 50: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 50

8-2-5 紀錄及欄位操作指令說明 ( 續 )

6. 欄位資料處理可選用下列任意型式:• 指定欄名: rs(“ 欄名” ) , rs.Fields(“ 欄名” ) , rs.Fields.It

em(“ 欄名” ) 皆可• 指定欄序: rs(i) , rs.Fields (i) , rs.Fields.Item(i) , i 從 0起算

• 取出欄值 範例: 變數= rs(i) ,或 rs! 欄名

• 存回欄值 範例: rs(i)=變數,或 rs! 欄名 = 變數

• 搭配 For 迴圈處理每個欄位For i = 0 To rs.Fields.Count – 1 變數= rs(i) ……..Next i

Page 51: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 51

8-3 進階應用 使用一個表單作為資料查詢介面,資料來源將

伺服端資料表直接連入 Access 查詢介面將使用下列元件:

組合方塊一:命名為【 tblDa 】,標籤抬頭提示為【資料表】

組合方塊二:命名為【 qryDa 】 ,標籤抬頭提示為【查詢表】

指令按鈕一:命名為【 tblCmd 】,標籤抬頭提示為【查看資料表】

Page 52: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 52

8-3 進階應用 ( 續 )

文字方塊:命名為【 sqlDa 】,標籤抬頭提示為【 SQL 指令】

子表單:命名為【 dtlData 】,標籤抬頭提示為【資料明細】

指令按鈕二:命名為【 qryCmd 】,標籤抬頭提示為【查看查詢表】

各控制項指令明細請看書本範例

Page 53: 主從式資料庫系統 - CH8 1 第 8 章 DAO 物件應用和程式設計. 主從式資料庫系統 - CH8 2 本章宗旨 簡介 DAO 物件之引用方式 簡介 DAO 物件之各項資料操作指令

- CH8主從式資料庫系統 53

測試成果