Открытие Recordset, метод Open(), передача запроса при открытии Recordset
Обычно следующий этап после установки соединения — создание объекта Recordset и работа с ним.
Что такое объект Recodrset? Само слово Recodrset расшифровывается как Set of Records, то есть набор записей. Проще всего представить его как табличку (аналогичную таблицам в Excel), которая находится в оперативной памяти компьютера. Однако у Recordset есть принципиальные отличия от таблиц Excel:
Recordset обычно создается на основе данных, полученных с источника (но может быть создан и заполнен вручную), в которых предусмотрены столбцы (Fields) и строки (Row). Создание объекта Recordset и заполнение его данными с источника в самом простом варианте выглядит так (подразумевается, что мы открыли при помощи объекта cn соединение с учебной базой данных Northwind на SQL Server):
Dim rs As New ADODB.Recordset
rs.Open "customers", cn
Убедиться, что Recordset действительно создан и существует, можно, например, при помощи строки
MsgBox rs.GetString
При открытии Recordset вполне могут возникнуть ошибки, поэтому рекомендуется, как обычно, использовать обработчик ошибок. Специальной коллекции Errors в Recordset не предусмотрено, поэтому придется обойтись стандартным объектом Err.
В нашем примере мы открыли таблицу Customers целиком. Однако это — не единственный (и не лучший) способ извлечения данных с источника. Для метода Open() рекомендуется использовать запрос на языке SQL. Например, в нашем случае можно было бы использовать такой код:
rs.Open "select * from dbo.customers", cn
Почему запрос использовать лучше:
Очень часто в реальных приложениях текст запроса "склеивается" из кусочков, которые поступают из разных мест. Например, пользователь выбрал в ниспадающем списке имя заказчика — и для события Change для ниспадающего списка тут же сработала процедура, которая выполнила запрос на SQL Server, получив данные для этого заказчика, и присвоила полученные значения другим элементам управления. В нашем случае соответствующая строка кода может выглядеть так:
rs.Open " select * from dbo.customers Where CompanyName = " & "'" & ComboBox1.Value _ & "'" , cn
Набор символов "'" — это одинарная кавычка внутри двух двойных. Такая конструкция нужна, чтобы текст запроса мог выглядеть, например, так:
select * from dbo.customers Where CompanyName = 'Alfreds Futterkiste'
Причина проста — в языке SQL строковые значения нужно заключать в одинарные кавычки.
Если вы ответственны не только за создание клиентского приложения, но и за проектирование базы данных, бывает очень удобно предусмотреть запрос данных только через представления. Это позволит более гибко управлять системой безопасности и в случае необходимости перекройки базы данных (например, разбиения главной таблицы на текущую и архивную) сэкономить множество времени.
И еще один практический момент. Конечно, для работы с базами данных знать язык запросов SQL очень полезно. Литературы по нему очень много, и его вполне реально освоить за несколько дней. Однако, если вы — обычный пользователь и не имеете об языке SQL никакого представления, ничего страшного. Просто открывайте таблицы целиком без всяких запросов — все остальное можно будет сделать средствами VBA.