物件類別化Ado資料來源控制處理
前言:
資料處理大概是我們寫程式的工程師必經的路線,不管喜不喜歡都必須有跳進去的決心,我們可以這樣形容吧!在我們所遇到的研發環境下,當我們在設計錯誤訊息檢查或者是製程資料儲存,最初我們使用的都是單一的文字檔案,好處是簡單易處理,壞處就是當檔案有人為破壞時,在系統程式的處理上比較容易出問題。為了方便與專業的方式,使用Ado當成資料庫抓取的引擎。
DAO->RDO->ADO :
有時候也相當佩服微軟的產品之推出多樣化,各產品功能之改變也是常常不可預期的,雖然所使用的三種元件都有在持續更新,為了這一二年工作上方便,還是使用Ado 當成參考範本,現在 的參考版本資料使用ado 2.5 版,可自專案下之References下載入Microsoft ActiveX Data Objects 2.5 library使用。當然資料庫如果相當簡單,也可以只使用Dao元件之方式處理,或是採用目前取得參考資料較方便之Rdo也是沒有問題,本份文件是以處理Ado元件為主。
於VB中產生一資料類別預設檔案,或者是手動自空白類別產生也可以。我會採用後者的方式:
在物件類別之屬 性視窗中,將DataSourceBehavior之值更改為1 - vbDataSource,原空白類別預設值為 0 - vbNone。回到程式碼編輯 視窗中Class 的成員中會多了一個項目GetDataMember ,這是啟動資料庫中回傳適當的 資料錄RecordSet之事件處理。中間包含兩個參數,一為DataMember資料成員名稱,Data回傳之資料成員物件。
Private Sub Class_GetDataMember(DataMember As String, Data As Object)
End Sub ' Class_GetDataMember(DataMember As String, Data As Object)
我們可能定義了數個不同回傳資料錄,而每個資料錄是對應到一個資料成員,所以可以這麼寫入程式碼 當成標準處理方式
Private Sub Class_GetDataMember(DataMember As String, Data As Object)
Select Case DataMember
Case "Custom"
Set Data = rsAdo
Case Else
Set Data = rsAdoDefault
End Select ' DataMember
End Sub ' Class_GetDataMember(DataMember As String, Data As Object)
為了增加資料錄 資料之事件處理,我們可以把資料錄之事件處理延伸入物件中,而使用關鍵字 WithEvents 在宣告區可以這麼設定: 0001 Private WithEvents rsAdo As ADODB.Recordset
這實作程式碼中除了Class與 (General)外會自動增加rsAdo 之處理項目,而本身的事件也會一起出現。 其中就包含了rsAdo 之事件引發反應處理,這可以包裝自己的物件成為功能更強大之物件類別。
因為個人宣告的習慣,或者是在物件初始化 時不能處理到的部分,我會將物件採取這種方法定義。
於一般使用模組中使用 0001 Public ccDatOp As New ClsDatAdoOp
以VB之使用方式,這樣子之宣告,物件並 未開始初始化,必須等到第一次被使用時,才會進行初始化處理。
於Sub Main()中進行第一次之物件初始化處理,也就是統一在程式執行前都會進行這樣的處理,以確定 物件的設計過程沒有錯誤發生。
0001 Public Sub Main()
0002 With ccDatOp
0003 .enrdbName = "aseuse97.mdb" ->載入所用的資料庫檔案名稱
0004 .enrdbRecord = "query_packpitch" ->載入預設建好的資料錄名稱
0005 .enrIniCompanyCode = enrCompanyFlag.c_Byt0Asek ->設定公司別
0006 Call .s_Start ->啟動物件類別系統
0007 End With ' ccDatOp
0008 Call FrmMainStart.Show ->載入系統初始化標單
0009 End Sub ' Main()
物件消滅之處 理:為了安全,我會在物件類別消滅時進行處理資料錄關閉處理,或是資料庫連線關閉處理,以免造成不可預計之錯誤。 0001 Private Sub Class_Terminate()
0002 rsAdo.Close
0003 End Sub ' Class_Terminate()
接下來就是定義Ado 之操作指令之方法了,以Ado的使用方式是先建立到資料庫之連線處理,然後自這條連線上產生不同的資料錄成員:
我們先看如何定義 ADODB.Connection之處理:
0001 Dim cnAdo As New ADODB.Connection ->宣告一個新的連線
0002 Dim strConnect As String ->宣告連線字串
0003 strConnect = "Provider = MSDASQL.1;" & _ ->定義連線字串,這裡可以由資料環境設計
0004 "Persist Security Info=False;" & _ 中取得,不用去強記
0005 "Data Source=MS Access Database;" & _
0006 "Mode=ReadWrite;" & _
0007 "Initial Catalog=aseuse97.mdb"
0008 Call cnAdo.Open(strConnect) ->啟動連線處理
接下來就是去產生一個資料錄成員:
0001 Call DataMembers.Add("Names") ->定義此資料錄對應之資料成員名稱,以方便程式處 理
0002 Set rsAD = New ADODB.Recordset ->原先物件類別中只有宣告,現在加入初始化
0003 Call rsAD.Open("Query_PackPitch", cnAdo, adOpenKeyset, adLockOptimistic, adCmdTable)
● ● ● ● ●
│ │ │ │ └來源類型
│ │ │ └資料更新模式
│ │ └資料庫開啟模式
│ └已開啟之資料庫連線
└資料錄名稱,或是使用連線字串
如果沒有意外,以這種方式抓取最正常。
使用複雜控制項:我們以使用 Microsoft DataGrid Control 6.0當成範例處理,這是一個類似瀏覽視窗的資
料庫容器,我們要如此使用便可以動態改變其資料內容而不使用Ado資料控制項,可以增加程式使用上之彈性。
0001 DataGrid1.DataMember = "Names" ->定義資料成員名稱
0002 Set DataGrid1.DataSource = ccDatOp ->指定資料來源為我們所設計之物件
資料會秀在控制項上,產生我們需要之結 果。
後記:
我在學VB程式的感覺時,光是一些模版或是精靈的處理,都會讓人有摸不清楚要如何操作或是如何應用在程式設計上的處理,因為需要很多時間 去學習,或是需要自己去蒐集很多相關資料,一般的書籍,能夠介紹的部分實在非常有限,只能儘量學習了。