top
Loading...
在記憶體中的ADO資料錄集與DataBindin
∥揖醯謎饈且桓鍪趾玫墓δ埽贒AO/RDO 的物件下,Database/Table必真的存在,如果我們想用一個暫存的Table做事情,那真的要在Disk中做I/O;然而在ADO中,恰好反相反,它可以在記憶體中建立一個Resultset,而後可以在其上做資料庫的動作;但是用ADO卻不像DAO可以真的CreateTable或CreateDatabase(那種真的存在Disk者)。
我們Data Process的程式不常會有Table Sorting的動作嗎?以前是一件痛苦的事,我們也可以用憶體的RecordSet來做,這是一個不錯的選擇。

以本例來說,它也開啟了另一個DataBinding的情況,在VB5.0時,DataBinding一定得配合Data控制項來做,而到了VB6.0呢,它的范圍可多了不少,首先DataSource可以設定的物件主要有

1. ADODC,這和傳統的Data控制項是同等的位置,但現在DataSource不但可以設定給DATA控制項(於Design Time),現在也可以設定給ADODC控制項(Design/Run Time皆可)
2. ADO Resultset,這就是本例的做法,而且不僅在這種記憶體Resultset可用,就算真的Binding的Resultset是指向Remote端的實№資料也可以Work,而且,我們在Control項(如TextBox)上面的資料變更,也會反映給Remote端,當然了,要有權限Update才不會有錯。這個功能實在很帥!如此一來就不用ADODC也可做到DataBinding
3.Data Environment:這個工具實在很強,它是圖形化的一個介面,設定好之後,在程式中便可以把DataSource指定成Data Environment物件,而一個Data Environment可以有多個Command物件於其上(我想Data Environment物件本身有ado Connection物件的包裝),所以設定DataMember 將指定使用哪一個Command 物件。而DataFiled就很明顯了,詳細的做法我不在這里說明,這Data Environment很棒。
4.自訂的Data Aware的物件類別,這又是另一個主題,查一下VB6的help吧。

以下程式 Textbox * 2 , CommandBox * 2

Private rs As New ADODB.Recordset 資料錄集的變數

Private Sub Command1_Click()
rs.MoveNext
End Sub


Private Sub CreateRecordset()
With rs
建立rs的Table結構
.Fields.Append "ID", adInteger
.Fields.Append "Item", adVarChar, 255
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open 不要連接物件。
End With
Dim i As Integer
新增資料到Resultset中 rs.AddNew
rs!id = i
rs!Item = "thing " & i
rs.Update
Next i
rs.MoveFirst
rs.Sort = "Item" 如果想要對Recordset做Sorting還可以用Sort來做
End Sub

Private Sub Command2_Click()
rs.MovePrevious
End Sub

Private Sub Form_Load()
Command1.Caption = "MoveNext"
Command2.Caption = "MovePrevious"
Call CreateRecordset
定義Text1 為DataBinding,資料來源是rs, 顯示欄位是id
Set Text1.DataSource = rs
Text1.DataField = "id"
定義Text1 為DataBinding,資料來源是rs, 顯示欄位是Item
Set Text2.DataSource = rs
Text2.DataField = "Item"
End Sub

Private Sub Form_Unload(Cancel As Integer)
rs.Close
End Sub

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗