Коллекция Fields

Коллекция Fields является одной из встроенных коллекций ADO. Коллекция — это упорядоченный набор элементов, который можно называть единицей. Дополнительные сведения о коллекциях ADO см. в разделе Объектная модель ADO.

Коллекция Fields содержит объект Field для каждого поля (столбца) в наборе записей. Как и все коллекции ADO, он имеет свойства Count и Item , а также методы Append и Refresh . Он также имеет методы CancelUpdate, Delete, Resync и Update , которые недоступны для других коллекций ADO.

Изучение коллекции fields

Рассмотрим коллекцию 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  

Этот код просто определяет количество объектов Field в коллекции Fields с помощью свойства Count и выполняет цикл по коллекции, возвращая значение свойства Name для каждого объекта Field . Для получения сведений о поле можно использовать множество других свойств Поля . Дополнительные сведения о запросе поля см. в разделе Объект Field.

Подсчет столбцов

Как и следовало ожидать, свойство Count возвращает фактическое количество объектов Field в коллекции Fields . Так как нумерацию элементов коллекции начинается с нуля, всегда следует выполнять циклы кода, начиная с нулевого элемента и заканчивая значением свойства Count минус 1. Если вы используете Microsoft Visual Basic и хотите выполнить циклическое перебор элементов коллекции без проверки свойства Count , используйте параметр For Each... Следующая команда.

Если свойство 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 должна быть изменена в любом месте. Хотя это немного медленнее, использование имени Field является более гибким, так как оно не зависит от порядка полей в коллекции.

Использование метода Refresh

В отличие от некоторых других коллекций ADO, использование метода Refresh в коллекции Fields не оказывает видимого эффекта. Чтобы получить изменения из базовой структуры базы данных, необходимо использовать метод Requery или, если объект Recordset не поддерживает закладки, метод MoveFirst , что приведет к повторному выполнению команды к поставщику.

Добавление полей в набор записей

Метод Append используется для добавления полей в набор записей.

Метод Append можно использовать для создания набора записей программным способом без открытия подключения к источнику данных. Ошибка во время выполнения возникнет, если метод Append вызывается в коллекции Fields открытого набора записей или набора Записей , где задано свойство ActiveConnection . Вы можете добавлять поля только в набор записей , который не открыт и еще не подключен к источнику данных. Однако, чтобы указать значения для добавленных полей, необходимо сначала открыть набор записей .

Разработчикам часто требуется место для временного хранения некоторых данных или требуется, чтобы некоторые данные действовали так, как если бы они поступили с сервера, чтобы они могли участвовать в привязке данных в пользовательском интерфейсе. ADO (в сочетании со службой microsoft cursor для OLE DB) позволяет разработчику создать пустой объект Recordset , указав сведения о столбце и вызвав Open. В следующем примере три новых поля добавляются к новому объекту 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  

Использование метода Fields Append отличается в объектах Recordset и Record . Дополнительные сведения об объекте Record см. в разделе Записи и потоки.

См. также:

Составление иерархических наборов записей