Коллекция полей
Коллекция 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".