Поделиться через


Коллекция 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. Записи и потоки.