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