欄位物件
每個 Field 物件通常會對應至資料庫數據表中的數據行。 不過,Field 也可以代表另一個 Recordset的指標,稱為章節。 本指南稍後將討論例外,例如章節欄。
使用 Field 物件的 Value 屬性來設定或傳回目前記錄的數據。 根據提供者所公開的功能,某些集合、方法或 Field 對象的屬性可能無法使用。
使用 field 物件的集合、方法和屬性,您可以執行下列動作:
使用 Name 屬性返回欄位名稱。
使用 Value 屬性來檢視或變更欄位中的數據。 Value 是 Field 物件的預設屬性。
使用 Type、Precision和 NumericScale 屬性,傳回欄位的基本特性。
使用 DefinedSize 屬性,傳回字段的宣告大小。
使用 actualSize 屬性,傳回指定欄位中數據的實際大小。
使用 屬性 屬性和 Properties 集合,判斷指定字段支援的功能類型。
使用 AppendChunk和 getChunk 方法,操作包含長二進位或長字元數據的欄位值。
如果提供者支援批次更新,請使用 OriginalValue 和 UnderlyingValue 屬性來解決批次更新期間域值的差異。
描述欄位
下列主題將討論 Field 物件的屬性,這些物件代表描述欄位本身 Field 物件本身的資訊,也就是欄位的相關元數據。 這項資訊可用來判斷 Recordset架構的相關信息。 這些屬性包括 Type、DefinedSize 和 ActualSize、Name和 NumericScale 和 Precision。
探索數據類型
Type 屬性表示欄位的數據類型。 ADO 支援的數據類型列舉常數描述於 ADO 程式設計人員參考中的 DataTypeEnum。
對於浮點數值類型,例如 adNumeric ,您可以取得詳細資訊。 NumericScale 屬性會指出小數點右邊的位數將用來表示 Field的值。 Precision 屬性會指定用來表示 Field的值的最大位數。
判斷欄位大小
使用 DefinedSize 屬性來判斷 Field 對象的數據容量。
使用 ActualSize 屬性可傳回 Field 物件值的實際長度。 對於所有欄位,ActualSize 屬性是唯讀的。 如果 ADO 無法判斷 Field 物件的值長度,則 ActualSize 屬性會傳回 adUnknown。
DefinedSize 和 ActualSize 屬性有不同的用途。 例如,考慮一個 Field 物件,其宣告類型為 adVarChar,且其 DefinedSize 屬性值為 50,包含單一字元。 所傳回 ActualSize 屬性值是單一字元的位元組長度。
判斷欄位內容
數據源中數據行的標識碼是由 Field的 Name 屬性表示。 Field 物件的 Value 屬性會傳回或設定欄位的實際數據內容。 這是預設屬性。
若要變更欄位中的數據,請將 Value 屬性設定為正確型別的新值。 您的游標類型必須支援更新,才能變更欄位的內容。 資料庫驗證在這裡不會以批次模式進行,因此您在呼叫 UpdateBatch 時,需要檢查錯誤。 某些提供者也支援 ADO Field 物件的 UnderlyingValue,並 OriginalValue 屬性,協助您在嘗試執行批次更新時解決衝突。 如需如何解決這類衝突的詳細資訊,請參閱 編輯資料。
注意
當將新的 Fields 附加至 Recordset時,Recordset Field 的值無法被設定。 相反地,新的 字段 可以附加至已關閉 Recordset。 必須先開啟 Recordset,之後才能將值指派給這些 Fields。
取得更多欄位資訊
ADO 物件有兩種類型的屬性:內建和動態。 此時,只會討論 Field 物件的內建屬性。
內建屬性是在 ADO 中實作的屬性,而且可使用 MyObject.Property
語法立即提供給任何新物件使用。 它們不會作為物件 Properties 集合中的 Property 顯示出來。
動態屬性是由基礎數據提供者所定義,並出現在適當 ADO 物件的 Properties 集合中。 例如,提供者特定的屬性可能表示 Recordset 物件是否支援交易或更新。 這些額外的屬性會顯示為該 Recordset 物件的 Properties 集合中的 Property 物件。 動態屬性只能透過集合參考,使用語法 MyObject.Properties(0)
或 MyObject.Properties("Name")
。
您無法刪除任一類型的屬性。
動態 Property 物件有自己的四個內建屬性:
Name 屬性是識別屬性的字串。
Type 屬性是指定屬性資料類型的整數。
Value 屬性是包含屬性設定的變體。 Value 是 Property 對象的預設屬性。
Attributes 屬性是 Long 值,用來指明特定提供者的屬性特徵。
Field 物件的 Properties 集合包含欄位的相關其他元數據。 此集合的內容會根據提供者而有所不同。 下列程式代碼範例會檢查本節開頭所介紹 Recordset 範例的 Properties 集合。 它會先查看集合的內容。 此程式代碼會使用 OLE DB Provider for SQL Server,因此 Properties 集合包含與該提供者相關的資訊。
'BeginFieldProps
Dim objProp As ADODB.Property
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
For Each objProp In objFields(intLoop).Properties
Debug.Print vbTab & objProp.Name & " = " & objProp.Value
Next objProp
Next intLoop
'EndFieldProps
處理二進位數據
在 Field 物件上使用 AppendChunk 方法,以長二進位或字元數據填滿它。 在系統記憶體有限的情況下,您可以使用 AppendChunk 方法來處理部分區段的長數據值,而不是處理整個值。
如果 Field 物件的 Attributes 屬性中的 adFldLong 位設定為 True,您可以使用該欄位的 AppendChunk 方法。
第一個 AppendChunk 呼叫 Field 物件會將數據寫入欄位,並覆蓋現有資料。 後續的 AppendChunk 呼叫將新增至現有的數據。 如果您要將數據附加至某個字段,然後設定或讀取目前記錄中另一個字段的值,ADO 會假設您已完成將數據附加至第一個字段。 如果您在第一個字段上再次呼叫 AppendChunk 方法,ADO 會將呼叫解譯為新的 AppendChunk 作業,並覆寫現有的數據。 存取其他 Recordset 物件中那些不是第一個 Recordset 物件複本的字段,將不會中斷 AppendChunk 作業。
在 Field 物件上使用 GetChunk 方法來取出部分或全部的長二進位或字元資料。 在系統記憶體有限的情況下,您可以使用 GetChunk 方法分段操作長整數值,而不是一次性處理整個值。
GetChunk 呼叫傳回的數據會指派給 變數。 如果 Size 大於剩餘的數據,則 GetChunk 方法只會返回剩下的數據,而不會用空格填充 變數。 如果欄位是空的,GetChunk 方法會傳回 Null 值。
每個後續 GetChunk 呼叫都會從先前的 GetChunk 呼叫中斷的位置擷取數據。 不過,如果您要從某個字段擷取數據,然後設定或讀取目前記錄中另一個字段的值,ADO 會假設您已完成從第一個字段擷取數據。 如果您在第一個字段上再次呼叫 GetChunk 方法,ADO 會將呼叫解譯為新的 GetChunk 作業,並開始從數據開頭讀取。 存取非第一個 Recordset 物件複本的其他 Recordset 物件中的欄位,不會中斷 GetChunk 作業。
如果 Field 物件的 Attributes 屬性中的 adFldLong 位設定為 True,然後您可以對該欄位使用 GetChunk 方法。
如果您在 Field 物件上使用 GetChunk 或 AppendChunk 方法時,沒有當前記錄,則會發生錯誤 3021 (沒有當前記錄)。
如需使用這些方法來操作二進位數據的範例,請參閱 ADO 程式設計人員參考中的 AppendChunk 方法 和 GetChunk 方法 範例。