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


Коллекция полей

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

Коллекция полей полей содержит объект поля для каждого поля (столбца) в Набор записей. Как и во всех коллекциях ADO, он имеет свойства Счетчик и Элемент, а также методы Добавить и Обновить. Он также имеет методы CancelUpdate, Delete, Resyncи Update, которые недоступны другим коллекциям ADO.

Изучение коллекции полей

Рассмотрим коллекцию полей Fields из примера набора записей , представленного в этом разделе. Пример Набор записей был получен из инструкции SQL

SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7  

Таким образом, вы должны убедиться, что коллекция полей набора записей содержит три поля.

'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...Next.

Если свойство Count равно нулю, в коллекции нет объектов.

Добираемся до поля

Как и в любой коллекции ADO, свойство элемента является свойством коллекции по умолчанию. Он возвращает отдельный объект Field, указанный именем или индексом, переданным ему. Таким образом, для примера Recordsetследующие утверждения эквивалентны:

objField = objRecordset.Fields.Item("ProductID")  
objField = objRecordset.Fields("ProductID")  
objField = objRecordset.Fields.Item(0)  
objField = objRecordset.Fields(0)  

Если эти методы эквивалентны, что лучше всего? Смотря как. Использование индекса для получения поля из коллекции происходит быстрее, так как он обращается к полю напрямую без необходимости выполнять поиск строк. С другой стороны, порядок полей в коллекции должен быть известен, и если порядок изменяется, ссылка на индекс поля должна быть изменена везде, где она встречается. Использование имени поля , хотя и немного медленнее, более гибко, так как оно не зависит от порядка полей в коллекции.

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

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

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

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

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

Разработчики часто нуждаются в месте для временного хранения некоторых данных или хотят, чтобы некоторые данные действовали так, как если бы он поступил с сервера, чтобы он смог участвовать в привязке данных в пользовательском интерфейсе. ADO (в сочетании со службой Microsoft Cursor Service для 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. Дополнительные сведения об объекте записи см. в документе "Records and Streams".

См. также

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