要存取資料表中的記錄內容必須透過 Recordset 物件。 Recordset 物件是 DAO 物件的一個成員,代表的可以是一個資料表中所有的記錄,而 Recordset 物件是由直欄和橫列所組成。
所謂直欄就是 Field 物件,而橫列則為 Recordset 物件,透過 OpenRecordset 方法,就可以開啟一個 Recordset 物件,這個物件自動會屬於 Recordsets 集合物件的一個成員,在 Recordsets 物件中只有 Refresh 和 Count 方法。
☛ Recordset 物件的記錄型態
Recordset 物件具有存取的型態,當利用 OpenRecordset 方法,來建立 Recordset 物件時,就可以指定記錄的型態,其型態說明如下所示:
✦ Table-type:設定資料來源為單一的資料表;此類型的 Recordset 物件可以新增、刪除或更新資料表中的記錄。
✦ Snapshot-type:一組快照的記錄可用來找尋資料或讓報表來使用;此類型的 Recordset 物件之欄位可以來自多個資料表,但記錄是無法更新的。
✦ Dynaset-type:此類型的 Recordset 物件是儲存在記憶體中的暫存記錄;可以是查詢的結果,而使用者也可透過此類型的物件來新增、刪除或修改一個或多個資料表。
✦ Forward-Only-type:此類型的 Recordset 物件和 Snapshot-type 類似,但多一樣限制就是記錄只能向前查看。
✦ Dynamic-type:此類型的 Recordset 物件只可以用在 ODBCDirect 工作空間,用來處理遠端的 ODBC 資料庫中的資料。 Recordset 物件可以是查詢的結果,也可以是一個或多個資料表,而資料表也可以進行刪除、新增或修改的作業。
不同的 Recordset 物件可以引用的屬性也會有些許的不同,關於 Recordset 物件重要的屬性列示如下所示:
屬性 | 說明 |
AbsolutePosition | 傳回目前記錄筆數的編號,第一筆記錄編號以0為開始。 |
BatchCollisionCount | 傳回最近批次更新還沒有完成的記錄筆數。 |
BatchCollisions | 傳回一個陣列用來指出上次批次更新中,在哪些列發生衝突。 |
BatchSize | 設定或傳回每次批次作業要傳回多少陳述式給資料庫伺服器。 |
BOF | 檢查目前的記錄是否為第一筆。 |
EOF | 檢查目前的記錄是否為最後一筆。 |
Bookmark | 在目前的記錄建立書籤,以便尋找。 |
Bookmarkable | 決定 Recordset 物件是否具有書籤的功能。 |
CacheStart | 設定緩衝區起始的位置。 |
EditMode | 傳回目前記錄是否為編輯狀態。 |
Filter | 可以經由此屬性設定篩選條件過濾出 Recordset 符合的記錄。 |
Index | 傳回 Table-type Recordset 物件中 Index 物件的名稱。 |
LastModefied | 將最近一次更新或新增的記錄設成書籤。 |
LockEdit | 設定某頁資料在編輯時,是否允許其他的人同時修改。 |
NoMatch | 透過 Seek 或 Find 方法時,當找不到記錄時會傳回 true。 |
PercentPosition | 傳回目前記錄在整個 Recordset 物件中的百分比,傳回的值介於 0 到 100 之間。 |
Sort | 設定排序的欄位及排序的順序。 |
UpdateOptions | 設定或傳回一個值,代表批次更新時,where 子句是由哪一種結構中所構成。 |
☛ Recordset 物件的方法
關於 Recordset 物件的方法,可以有許多的方法來讓 Recordset 物件使用,以便對各種記錄的型態來操作,關於這些方法說明如下所示:
屬性 | 說明 |
AddNew | 新增一筆記錄,此記錄通常是放置在實體記錄的最後一筆; 在記憶體中建立一個 Recordset 物件的複本。 |
Clone | 在記憶體中建立一個 Recordset 物件的複本。 |
Close | 關閉 Recordset 物件。 |
CopyQueryDef | 取得 QueryDef 物件的複本。 |
Delete | 拿掉目前的記錄。 |
Edit | 將目前的記錄複製到暫存器以便進行編輯。 |
FillCache | 將 ODBC 指定的記錄筆數放入緩衝區,以加快記錄處理的速度。 |
FindFirst | 尋找第一筆記錄。 |
FindLast | 尋找最後一筆記錄。 |
FindNext | 尋找下一筆記錄。 |
FindPrevious | 尋找上一筆記錄。 |
GetRows | 從記錄集中取得數列的資料。 |
Move | 移動目前記錄的位置。 |
MoveFirst | 將目前記錄切換到第一筆記錄。 |
MoveLast | 將目前記錄切換到最後一筆記錄。 |
MoveNext | 將目前記錄切換到下一筆記錄。 |
MovePrevious | 將目前記錄切換到上一筆記錄。 |
NextRecordset | 若為 true 則代表下一個 Recordset 物件可以被使用。 |
OpenRecordset | 建立或開啟 Recordset 物件。 |
Requey | 重新再執行一次查詢,以便更新 Recordset 中的記錄。 |
Seek | 於 Table-type 型態的 Recordset,將索引欄位中符合條件的記錄找到,並設定為目前的記錄。 |
Update | 對 Recordset 所作的處理暫時先存在暫存器中,處理完畢後再作更新動作,以便將暫存器的內容存回 Recordset 的物件。 |
在 Recordset 物件中,若利用了 AddNew 或 Edit 方法來新增或編輯記錄,可以透過 CancelUpdate 方法來取消動作。 如果 Recordset 物件中沒有包含任何記錄,則 RecordCount 的屬性為 0,而 BOF 和 EOF 的屬性都為 true,在 Recordset 物件中所提到的資料頁是資料儲存的單位,一頁的大小大約是 2K 位元組,可以儲存一筆或多筆記錄。
☛ Field 物件
Field 物件是用來表示一個欄位的資料,此物件不止包含於 Recordset 物件中,而且可以包含於 TableDef、Relation、QueryDef、Index 物件中。 Fields 代表的是所有 Field 的集合,其成員具有 3 個方法列示如下所示:
屬性 | 說明 |
CreateProperty | 建立自訂的屬性。 |
AppendChunk | 將更改的資料放入到備忘或是 OLE 物件的欄位。 |
GetChunk | 取得備忘或 OLE 物件欄位的資料。 |
Field 物件的屬性如下所示:
属性 | 说明 |
AllowZeroLength | 決定欄位是否允許空字串。 |
CollatingOrder | 設定欄位資料的排序方式。 |
DefaultValue | 設定欄位的預設值。 |
OrdinalPosition | 設定 Field 物件,在 Fields 集合物件中的位置,可透過此屬性來更改欄位物件的順序,必須透過 Refresh 方法來讓順序的變更生效。 |
Required | 決定欄位是否可以是 Null 值。 |
Size | 設定欄位最大的儲存空間,單位為位元組。 |
SourceField | 取得來源資料的欄位名稱。 |
SourceTable | 取得來源資料的資料表名稱。 |