[an error occurred while processing this directive] | |||||||||||||||||||||||||||||||||||
1-й час. Знакомство с Visual Basic for Applications 3-й час. Работа с элементами управления 4-й час. Переменные и константы 6-й час. Логика условных операторов 7-й час. Циклические вычисления 9-й час. Основные объекты Excel 11-й час. Редактор Visual Basic 15-й час. Автоматизация экранных форм 20-й час. Получение внешних данных |
22-й час. Еще об ADOВ этом часе мы углубим свои знания о технологии ADO. Основное внимание будет уделено объекту Recordset (Набор записей), его свойствам и методам. Используя эти свойства и методы, мы создадим экранную форму, отображающую данные из внешнего источника данных. В этом часе будут рассмотрены следующие вопросы.
Вставка полей в экранную формуВместо непосредственной вставки импортируемых данных в рабочий лист их можно просмотреть с помощью экранной формы. Это предоставляет пользователю простой дружественный интерфейс для работы с данными. Для создания экранной формы выполните следующие действия.
Рис. 22.1. Экранная форма, которая будет отображать данные из базы данных Access Борей Далее необходимо установить ссылку на библиотеку Microsoft ActiveX Data Objects 2.0. выполнив команду Tools > References (Сервис > Ссылки). Теперь пришло время создать первую процедуру. Эта процедура, UserForm_Activate, будет выполняться при открытии формы. Код процедуры приведен в листинге 22.1. Листинг 22.1. Процедура UserForm_Activate
Процедура начинается с установления соединения с базой данных Борей. Далее применяется оператор Select (Выбор) для создания объекта Recordset, т.е. набора извлекаемых данных. Значения полей затем используются для задания значения свойству Text (Текст) полей ввода экранной формы. Отметим, что поля индексируются целыми числами, начиная с нуля. В окне кода в область общих объявлений надо также поместить следующие две строки:
Двойным щелчком на командной кнопке OK откройте процедуру cmdOK_click и введите в нее код:
Выполните экранную форму. Вы должны увидеть в полях экранной формы значения первой записи из набора записей, извлекаемых из базы данных. Щелкните на кнопке ОК для закрытия формы. Теперь надо научиться переходить от одной записи к другой в наборе извлекаемых записей. Перемещение по записямОбъект Recordset имеет пять методов, позволяющих перемещаться по набору записей: Move (Перейти), MoveFirst (Перейти к первой), MoveNext (Перейти к следующей), MovePrevious (Перейти к предыдущей) и MoveLast (Перейти к последней). Метод Move перемещает к записи с указанным номером, назначение остальных методов видно из их названий.
Рис. 22.2. В форму добавлены кнопки для перемещения по записям Вставьте четыре командных кнопки в нижнюю часть экранной формы, как показано на рис. 22.2. Задайте этим кнопкам следующие свойства.
Теперь этим кнопкам надо назначить соответствующие методы Move. Но прежде чем создавать процедуры для этих кнопок, надо написать процедуру, которая присваивала бы свойству Text полей ввода формы значения свойства Value полей записей данных. Эта процедура будет использоваться в процедурах кнопок перемещения. Код такой процедуры показан в листинге 22.2. Листинг 22.2. Процедура Заполнение_полей
Теперь введите код (листинг 22.3) для процедур перемещения по записям, которые будут вызываться после щелчка на соответствующих кнопках перемещения. Листинг 22.3. Процедуры перемещения
Испытайте новые кнопки для перемещения по набору записей. Вы увидите, что можно переходить от первой записи к последней и обратно, от текущей записи к предыдущей или следующей. Если вы еще раз посмотрите на процедуры перехода по записям, то заметите, что процедуры перехода к следующей и предыдущей записям имеют условные операторы, осуществляющие проверку значений свойств BOF (Начало файла) и EOF (Конец файла). Если эти свойства имеют значение True (Истина), т.е. достигнут коней набора записей или его начало, то во избежание ошибок выполнения применяются методы MoveLast и MoveFirst соответственно. Редактирование данныхПосредством экранной формы можно не только просматривать данные и записывать их в рабочий лист, но и редактировать данные, а затем возвращать их обратно в базу данных. Для этого используется метод Update (Обновить). Вставьте в экранную форму еще одну командную кнопку, как показано на рис. 22.3. Задайте название этой кнопки как Правка, а имя - cmdUpdate. Введите код процедуры cmdUpdate_Click (листинг 22.4).
Рис. 22.3. Усовершенствование в форме, позволяющее редактировать данные Листинг 22.4. Процедура cmdUpdate_Click
Отмстим, что эта процедура не позволяет изменять поле КодТовара. Дело в том, что это поле является первичным ключом в исходной таблице товары и его нельзя изменить. Протестируем эту процедуру. Выполните экранную форму и в произвольной записи в поле Цена введите число, отличное оттого, которое там находится. Щелкните на кнопке Правка, затем на кнопках Следующая и Предыдущая. Вы должны снова увидеть запись с измененным значением в поле Цена. Добавление средства поискаПоследнее средство, которое мы добавим в экранную форму, - средство поиска записей по значениям поля КодТовара. Для организации такого средства используется метод Find (Найти) объекта Recordset. Этот метод всегда начинается от текущей записи. Поэтому сначала с помощью свойства Bookmark (Закладка) объекта Recordset сохраним местоположение текущей записи, а затем выполним метод MoveFirst для перехода к первой записи, откуда начнется поиск. Местоположение текущей записи необходимо на случай неудачного окончания поиска, тогда в форме восстанавливается эта запись. Вставьте в экранную форму под кнопкой Правка еще одну командную кнопку. Назовите ее Поиск, а имя задайте cmdFind. Введите следующий код для этой кнопки. Листинг 22.5. Процедура cmdFind_Click
Выполните экранную форму. Щелкните на кнопке Поиск и в окне Поиск записи по коду товара введите число 17. Щелкните на кнопке ОК, и вы увидите запись, которую искали. РезюмеВ этом часе мы рассмотрели несколько методов, принадлежащих объекту Recordset. Информация, приведенная в этом часе, необходима всем, кто импортирует данные из внешних источников данных в рабочие книги Excel. Вы узнали, как осуществить перемещение, редактирование и поиск в наборе извлекаемых данных, как отобразить эти данные в экранной форме. Это необходимо любому разработчику для поддержки интеграции создаваемого приложения с внешними базами данных. Вопросы и ответыВопрос. Можно ли использовать объекты Database (База данных) и Table (Таблица) вместо объекта Recordset? Ответ. Если в окне просмотра объектов Object Browser вы просмотрите библиотеку ADODB, то не найдете в ней объектов Database и Table. В рамках технологии ADO все манипуляции с данными осуществляются посредством объекта Recordset. Вопрос. Является ли технологии ADO наилучшим выбором для организации работы с внешними тайными? Ответ. Это зависит от того, чего вы добиваетесь. Если вы хотите с минимальными затратами времени и программного кода создать процедуру, которая только импортирует данные из внешнего источника, то в этой ситуации предпочтительнее использовать MS Query или сводные таблицы. Если в ваши планы входит не просто импортирование данных, а работа с данными в самом источнике данных (поиск и редактирование данных с последующим сохранением в исходном наборе данных), то вам необходимо использовать ODBC и ADO. Выбор остается за вами, и помните, что из любой ситуации есть по крайней мере два выхода. ПрактикумС помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении. Тесты
УпражнениеДобавьте новый рабочий лист в книгу и назовите его Запрос Товары. В ячейки A1, B1, С1 и D1 введите заголовки будущей таблицы: Код товара, Марка, Цена, Есть на складе соответственно. Измените процедуру cmdOK_click так, чтобы при щелчке на кнопке ОК она переписывала информацию из экранной формы в рабочий лист Запрос Товары. |
||||||||||||||||||||||||||||||||||
[an error occurred while processing this directive] |