Field 物件
每個 Field 物件通常會對應至資料庫資料表中的一個資料行。 不過,Field 也可以代表另一個資料錄集的指標,稱為章節。 本指南稍後將說明章節資料行等例外狀況。
使用 Field 物件的 Value 屬性來設定或傳回目前記錄的資料。 根據提供者公開的功能,Field 物件的某些集合、方法或屬性可能無法使用。
使用 Field 物件的集合、方法和屬性,您可以執行下列動作:
使用 Name 屬性傳回欄位的名稱。
使用 Value 屬性來檢視或變更欄位中的資料。 Value 是 Field 物件的預設屬性。
使用 Type、Precision 和 NumericScale 屬性傳回欄位的基本特性。
使用 DefinedSize 屬性傳回欄位的宣告大小。
使用 ActualSize 屬性傳回指定欄位中資料的實際大小。
使用 Attributes 屬性和 Properties 集合,確認指定欄位支援哪些功能類型。
使用 AppendChunk 和 GetChunk 方法操作包含長二進位或長字元資料的欄位值。
如果提供者支援批次更新,請使用 OriginalValue 和 UnderlyingValue 屬性,在批次更新期間解決欄位值中的差異。
說明欄位
後續主題將討論 Field 物件的屬性,這些屬性代表說明 Field 物件本身的資訊,也就是欄位的中繼資料。 這項資訊可用來確認資料錄集的結構描述。 這些屬性包括 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 屬性有不同的用途。 例如,請考慮宣告類型為 adVarChar 且 DefinedSize 屬性值為 50 的 Field 物件,其中包含單一字元。 其傳回的 ActualSize 屬性值為單一字元的長度,以位元組為單位。
確認欄位內容
資料來源中資料行的識別碼以 Field 的 Name 屬性表示。 Field 物件的 Value 屬性會傳回或設定欄位的實際資料內容。 這是預設屬性。
若要變更欄位中的資料,請將 Value 屬性設定為等於正確類型的新值。 您的資料指標類型必須支援更新,才能變更欄位的內容。 此處的資料庫驗證不會以批次模式完成,因此在這種情況下,您在呼叫 UpdateBatch 時必須檢查是否有錯誤。 有些提供者也支援 ADO Field 物件的 UnderlyingValue 和 OriginalValue 屬性,以協助您解決在嘗試執行批次更新時發生的衝突。 如需如何解決這類衝突的詳細資訊,請參閱編輯資料。
注意
將新的欄位附加至資料錄集時,無法設定資料錄集欄位值。 實際上,新的欄位可附加至已關閉的資料錄集。 然後,必須開啟資料錄集,如此才能將值指派給這些欄位。
取得更多欄位資訊
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 集合包含關於欄位的其他中繼資料。 此集合的內容會根據提供者而有所不同。 下列程式碼範例會檢查本節開頭介紹的範例資料錄集的 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 方法。
Field 物件上的第一個 AppendChunk 呼叫會將資料寫入至欄位,覆寫任何現有的資料。 後續 AppendChunk 呼叫會新增至現有的資料。 如果您要將資料附加至某個欄位,然後設定或讀取目前記錄中另一個欄位的值,ADO 會假設您已完成將資料附加至第一個欄位。 如果您重新在第一個欄位上呼叫 AppendChunk 方法,ADO 會將呼叫解譯為新的 AppendChunk 作業,並覆寫現有的資料。 存取其他 Recordset 物件中不是第一個 Recordset 物件複製的欄位,將不會中斷 AppendChunk 作業。
在 Field 物件上使用 GetChunk 方法來擷取部分或全部的長二進位或字元資料。 在系統記憶體有限的情況下,您可以使用 GetChunk 方法來操作部分的長值,而不是整個長值。
GetChunk 呼叫傳回的資料會指派給 variable。 如果 Size 大於剩餘的資料,GetChunk 方法只會傳回剩餘的資料,而不使用空格填補 variable。 如果欄位是空的,GetChunk 方法就會傳回 Null 值。
每個後續的 GetChunk 呼叫都會從先前 GetChunk 呼叫離開的位置開始擷取資料。 不過,如果您要從某個欄位擷取資料,然後設定或讀取目前記錄中另一個欄位的值,則 ADO 會假設您已完成從第一個欄位擷取資料。 如果您再次在第一個欄位上呼叫 GetChunk 方法,ADO 會將呼叫解譯為新的 GetChunk 作業,並從資料開頭開始讀取。 存取其他 Recordset 物件中不是第一個 Recordset 物件複製的欄位,將不會中斷 GetChunk 作業。
如果 Field 物件 Attributes 屬性中的 adFldLong 位元設定為 True,您就可以針對該欄位使用 GetChunk 方法。
如果您在 Field 物件上使用 GetChunk 或 AppendChunk 方法時沒有目前的記錄,則會發生錯誤 3021 (沒有目前的記錄)。
如需使用這些方法來操作二進位資料的範例,請參閱 ADO 程式設計人員參考中的 AppendChunk 方法和 GetChunk 方法範例。