Fields 集合
Fields 集合是其中一個 ADO 的內部集合。 集合是已排序的項目集合,可作為單元來參考。 如需 ADO 集合的詳細資訊,請參閱 ADO 物件模型。
Fields 集合包含 Recordset 中每個欄位 (資料行) 的 Field 物件。 如同所有 ADO 集合,其中具有 Count 和 Item 屬性,以及 Append 和 Refresh 方法。 同時也有 CancelUpdate、Delete、Resync 和 Update 方法,其他 ADO 集合無法使用這些方法。
檢查 Fields 集合
請考慮本節所介紹範例 Recordset 的 Fields 集合。 範例 Recordset 衍生自 SQL 陳述式
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7
因此,您應發現 Recordset Fields 集合包含三個欄位。
'BeginWalkFields
Dim objFields As ADODB.Fields
Dim intLoop As Integer
objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText
Set objFields = objRs.Fields
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
Next
'EndWalkFields
此程式碼僅會使用 Count 屬性判斷 Fields 集合中的 Field 物件數目,並在集合中執行迴圈以傳回每個 Field 物件的 Name 屬性值。 您可使用更多 Field 屬性以取得欄位的相關資訊。 如需查詢 Field 的詳細資訊,請參閱 Field 物件。
計算資料行
如您所預期,Count 屬性會傳回 Fields 集合中 Field 物件的實際數目。 集合的成員編號是從零開始,因此撰寫迴圈程式碼時,您應該一律以編號為零的成員開始,並以 Count 屬性的值減 1 結束。 如果您使用 Microsoft Visual Basic,而且想在不檢查 Count 屬性的情況下在集合成員中執行迴圈,請使用 For Each...Next 命令。
如果 Count 屬性為零,代表集合中沒有物件。
取得欄位
如同任何 ADO 集合,Item 屬性為集合的預設屬性。 其屬性會傳回傳遞其中名稱或索引所指定的個別 Field 物件。 因此,下列陳述式相等於範例 Recordset:
objField = objRecordset.Fields.Item("ProductID")
objField = objRecordset.Fields("ProductID")
objField = objRecordset.Fields.Item(0)
objField = objRecordset.Fields(0)
如果這些方法相等,哪一個是最佳方法? 要看情況而定。 使用索引從集合擷取 Field 會比較快,因為索引可直接存取 Field 而無須執行字串查詢。 另一方面,集合中的 Fields 順序必須為已知,且如果順序變更, Field 索引參考必須隨時變更。 即使如此操作速度會稍慢,但使用 Field 的名稱更具彈性,因為其不相依於集合中的 Fields 順序。
使用 Refresh 方法
不同於某些 ADO 集合,在 Fields 集合上使用 Refresh 方法無明顯效果。 若要從基礎資料庫結構擷取變更,您必須使用 Requery 方法,或者如果 Recordset 不支援書籤 (MoveFirst 方法),這會導致再次針對提供者執行命令。
將欄位新增至 Recordset
Append 方法會用於將欄位新增至 Recordset。
您可使用 Append 方法以程式設計方式產生 Recordset,而無須開啟與資料來源的連線。 如果在已開啟 Recordset 的 Fields 集合或已設定 ActiveConnection 屬性的 Recordset 上呼叫 Append 方法,便會產生執行階段錯誤。 您僅可將欄位附加至未開啟且尚未與資料來源連線的 Recordset。 不過,若要指定新附加 Fields 的值,必須先開啟 Recordset。
開發人員通常需要暫時儲存某寫資料的位置或想要將某些資料作為來自伺服器的資料使用,以便可在使用者介面中參與資料繫結。 ADO (搭配使用 Microsoft Cursor Service for OLE DB) 可讓開發人員透過指定資料行資訊和呼叫 Open 來建置空白 Recordset 物件。 在下列範例中,三個新欄位會附加至新的 Recordset 物件。 接著會開啟 Recordset,並新增兩筆記錄,然後 Recordset 會保存至檔案。 (如需 Recordset 保存的詳細資訊,請參閱 更新和保存資料。)
'BeginFabricate
Dim objRs As ADODB.Recordset
Set objRs = New ADODB.Recordset
With objRs.Fields
.Append "StudentID", adChar, 11, adFldUpdatable
.Append "FullName", adVarChar, 50, adFldUpdatable
.Append "PhoneNmbr", adVarChar, 20, adFldUpdatable
End With
With objRs
.Open
.AddNew
.Fields(0) = "123-45-6789"
.Fields(1) = "John Doe"
.Fields(2) = "(425) 555-5555"
.Update
.AddNew
.Fields(0) = "123-45-6780"
.Fields(1) = "Jane Doe"
.Fields(2) = "(615) 555-1212"
.Update
End With
objRs.Save App.Path & "FabriTest.adtg", adPersistADTG
objRs.Close
'EndFabricate
Recordset 物件和 Record 物件之間的使用 Fields Append 方法會有所不同。 如需 Record 物件的詳細資訊,請參閱記錄和資料流。