Коллекция Fields
Область применения: Access 2013, Office 2013
Коллекция Fields является одной из встроенных коллекций ADO. Коллекция — это упорядоченный набор элементов, который можно назвать единицей.
Коллекция Fields содержит объект Field для каждого поля (столбца) в наборе записей. Как и все коллекции ADO, он имеет свойства Count и Item , а также методы Append и Refresh . Он также содержит методы CancelUpdate, Delete, Resync и Update , которые недоступны для других коллекций ADO.
Изучение коллекции Fields
Рассмотрим коллекцию Fields примера Набора записей, представленного в этой главе. Пример набора записей был создан на основе инструкции SQL.
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7
Таким образом, вы должны обнаружить, что коллекция RecordsetFields содержит три поля.
'BeginWalkFields
Dim objFields As ADODB.Fields
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
Этот код просто определяет количество объектов Field в коллекции Fields с помощью свойства Count и циклически проходит по коллекции, возвращая значение свойства Name для каждого объекта Field . Для получения сведений о поле можно использовать множество других свойств Поля . Дополнительные сведения о запросе поля см. в разделе Объект Field.
Подсчет столбцов
Как и следовало ожидать, свойство Count возвращает фактическое количество объектов Field в коллекции Fields . Так как нумерацию элементов коллекции начинается с нуля, всегда следует выполнять циклы кода, начиная с нулевого элемента и заканчивая значением свойства Count минус 1. Если вы используете Microsoft Visual Basic и хотите циклически просматривать члены коллекции без проверки свойства Count , используйте параметр ForEach... Следующая команда.
Если свойство Count равно нулю, объекты в коллекции отсутствуют.
Получение поля
Как и в любой коллекции ADO, свойство Item является свойством по умолчанию коллекции. Он возвращает отдельный объект Field , указанный переданным ему именем или индексом. Таким образом, следующие инструкции эквивалентны для примера Recordset:
objField = objRecordset.Fields.Item("ProductID")
objField = objRecordset.Fields("ProductID")
objField = objRecordset.Fields.Item(0)
objField = objRecordset.Fields(0)
Что лучше, если эти методы эквивалентны? У всех по-разному. Использование индекса для получения поля из коллекции выполняется быстрее, так как он обращается к Полю напрямую без необходимости подстановки строки. С другой стороны, порядок полей в коллекции должен быть известен, и если порядок изменится, ссылка на индекс Field должна быть изменена , где бы он ни был. Хотя это немного медленнее, использование имени Поля является более гибким, так как оно не зависит от порядка полей в коллекции.
Использование метода Refresh
В отличие от некоторых других коллекций ADO, использование метода Refresh в коллекции Fields не оказывает видимого эффекта. Чтобы получить изменения из базовой структуры базы данных, необходимо использовать метод Requery или, если объект Recordset не поддерживает закладки, метод MoveFirst , что приведет к повторному выполнению команды с поставщиком.
Добавление полей в набор записей
Метод Append используется для добавления полей в набор записей.
Метод Append можно использовать для создания набора записей программными средствами без открытия подключения к источнику данных. Ошибка во время выполнения возникнет, если метод Append вызывается в коллекции Fields открытого набора записей или в наборе записей, где задано свойство ActiveConnection . Поля можно добавлять только в набор записей , который не открыт и еще не подключен к источнику данных. Тем не менее, чтобы указать значения для добавленных полей, сначала необходимо открыть набор записей .
Разработчики часто нуждаются в месте для временного хранения некоторых данных или хотят, чтобы некоторые данные действовали так, как если бы они поступили с сервера, чтобы он мог участвовать в привязке данных в пользовательском интерфейсе. ADO (в сочетании со службой Microsoft Cursor Service для OLE DB) позволяет разработчику создать пустой объект Recordset , указав сведения о столбце и вызвав Open. В следующем примере к новому объекту Recordset добавляются три новых поля. Затем открывается набор записей , добавляются две новые записи, а набор записей сохраняется в файле. (Дополнительные сведения о сохраняемости набора записей см. в разделе Глава 5. Обновление и сохранение данных.)
'BeginFabricate
Dim objRs As 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
Использование метода FieldsAppend отличается между объектами Recordset и Record . Дополнительные сведения об объекте Record см. в разделе Глава 10. Записи и потоки.