Методические указания к лабораторной работе
«Доступ к БД из VB»
Цель работы: изучить способы получения доступа к базе данных из среды программирования VB.
Руководство к выполнению
Элемент управления данными ADO
Для доступа к базе данных из программы на Visual Basic в VB 6.0 включены объекты управления данными Active X (Active X Data Objects - ADO).
ADO data control (ADO – элемент управления данными) – это компонент, который можно использовать в VB-программах для подключения к базе данных. Он помещается в форму и соединяется с базой. Затем вы отображаете данные в форме, применяя другие элементы управления, которые связываете с элементом управления данными.
Когда элемент управления данными уже подключен к базе данных, можно воспользоваться любым из информационно-ориентированных элементов управления (связанные элементы управления) для отображения записей. Анализируя посланный запрос, ядро базы данных строит набор записей (recordset). Набор записей – это рабочая копия сведений, хранящихся в таблицах.
Информационно-ориентированный элемент управления предоставляет доступ к одному или нескольким полям записи базы с помощью ADO-элемента управления данными. С помощью кнопок навигации ( ◄,◄, ►,► ) можно перейти к другой записи. При этом во всех связанных элементах управления отображаются данные из полей новой записи. Если пользователь изменяет данные в связанном элементе управления и потом переходит к новой записи, изменения сохраняются в базе автоматически ( см. рисунок 1).
VB-форма

Связанные элементы управления
соотнесены
с элементом управления данными
Набор записей ( в памяти )
БД
Рисунок 1
Среди стандартных элементов управления в VB есть такие, которые могут быть связаны с данными. Среди них поле ввода ( TextBox ), флажок ( CheckBox ), комбинированный список ( ComboBox ), изображение ( Image ), метка ( Label ), список ( ListBox ) и графический список ( PictureBox ). Кроме того, VB имеет несколько дополнительных элементов управления Active X, которые также могут быть связаны с данными. Следующие элементы управления Active X поставляются с VB 6.0 ( они хранятся в OCX-файлах):
- Data-bound Listbox (связанный список);
- Data-bound combobox ( связанный комбинированный список);
- DBGrid ( таблица данных );
- MS HFlexGrid ( табличное поле);
- Hierarchical FlexGrid control – может отображать иерархические данные;
- DataGrid control – новый табличный элемент управления, который может работать совместно с ADO-элементом управления и набором записей;
- DataList control – элемент управления, аналогичный DBList, но оптимизированный для работы с источником данных ADO;
- DataCombo control – работает так же, как связанный комбинированный список, но оптимизирован для работы с источниками данных ADO.
Чтобы поместить любой из этих элементов на панель инструментов, надо щелкнуть правой кнопкой мыши по панели. Выбрать из выпадающего меню пункт Components… - появится диалоговое окно Components, содержащее, в частности, перечень элементов управления.
Отметьте с помощью флажков те из них, которые надо добавить в проект, и щелкните по кнопке ОК.
Если некоторый элемент управления выделен, в нижней части диалогового окна отображается полное имя соответствующего ОСХ-файла.
Регистрация ADO в VB
Начните новый проект в VB. Перейдите в диалоговое окно Project → References и добавьте в проект ссылки на Microsoft ActiveX Data Objects 2.0 Library. Теперь VB «знает» о компонентах ADO, которые вы будете использовать.
Порядок работы с ADO-элементом (Adodc)
Прежде всего надо добавить ADO-элемент управления данными, а также другие необходимые элементы на панель инструментов.
Щелкните правой кнопкой мыши на панели инструментов и раскройте список Components. Выберите, например, следующие два элемента управления:
- Microsoft ADO Data Control 6.0 (OLEDB);
- Microsoft DataList Controls 6.0 (OLEDB).
Совместно с ADO-элементом управления данными могут использоваться только те элементы управления, в названии которых встречается аббревиатура OLEDB.
Щелкните ОК. Теперь на панели инструментов появились три новых пиктограммы:
Adodc - ADO-элемент управления данными;
DataList – список данных;
DataCombo – комбинированный список данных.
При выборе из списка Microsoft DataList Controls 6.0 (OLEDB) на панель помещаются сразу два элемента: DataList и DataCombo. Они оба находятся в одном ОСХ-файле. ОСХ-файлы – это DLL.
Каждый из элементов DataList, DataCombo, DataGrid и MS HFlexGrid позволяет отображать сразу несколько записей, используя один ADO-элемент управления. Другие внутренние элементы управления (метка, поле ввода, список, комбинированный список и т. д.) могут быть связаны только с одним полем из набора записей.
Практикум – использование элемента DataCombo с ADO-элементом управления данными
1. Создайте новый проект в VB 6.0. Поместите в форму элемент DataCombo и ADO-элемент управления данными (Adodc). Элемент управления данными выполняет все операции над текущей записью. Информационно-ориентированные элементы, связанные с элементом управления данными, отображают одно или несколько полей из текущей записи.
2. Задайте свойства ADO-элемента управления данными, чтобы он знал, какой набор записей создавать. Щелкните по ADO-элементу и откройте окно Properties. Так как ADO может подключаться к любому источнику информации, нужно задать строку соединения; она описывает источник и сообщает ADO, как до него добраться.
3. Щелкните по свойству ConnectionString, и в правой половине таблицы появится кнопка с многоточием. Щелкните по ней, чтобы VB создал строку соединения. В качестве источника информации возьмем учебную базу данных Biblio.mdb.
4. Щелкните по кнопке Build – появится окно «Свойства связи с данными». Чтобы подключиться к БД Access, выберите Microsoft Jet 3.51 OLE DB Provider. Щелкните Далее>.
5. Далее вы сообщаете, какую БД открывать. Щелкните по кнопке с многоточием и выберите Biblio.mdb. Так как база не защищена паролем, оставьте в поле User Name значение по умолчанию и поднимите флажок «Пустой пароль».
Имя пользователя Admin разрешает полный доступ к БД. Но если бы база данных была защищена паролем, в диалоговом окне надо было бы ввести как имя пользователя, так и пароль. Эти сведения были бы включены в строку соединения.
6. Теперь проверьте возможность соединения с указанной БД. Щелкните по кнопке «Проверить подключение». Если все нормально, на экране появится окно с сообщением об успешном соединении.
7. Щелкните вкладку «Все» на странице Свойств. В окне отображается вся информация, необходимая ADO-элементу управления данными. Большая часть свойств имеет значения по умолчанию. Пользователи могут изменить любое значение.
8. Закройте диалоговое окно и страницу свойств, щелкнув по кнопке ОК. Если теперь посмотрите на свойство ConnectionString, то увидите, что ему присвоено значение, которое вы определили. В свойстве ConnectionString задан провайдер данных (переменная Provider), информация, относящаяся к защите, и источник данных (переменная DataSource), в качестве которого выступает БД Biblio.mdb.
9. Щелкните по свойству RecordSource ADO-элемента управления данными. Щелкните по кнопке с многоточием, чтобы открыть страницу свойств RecordSource. Поскольку мы будем извлекать данные из таблицы, выберите из списка CommandType пункт 2 – adCmdTable.
10. Позже для формирования запросов будет использоваться SQL и тогда надо будет выбирать пункт 1 – adCmdText. В результате вы сможете поместить в поле CommandText(SQL) текст любого SQL-запроса. А пока вы просто выбираете все записи из таблицы, поэтому укажите ее в выпадающем списке, который содержит имена всех таблиц, имеющихся в БД Biblio.mdb.
Выберите таблицу Titles (Названия книг) и щелкните ОК.
11. Итак, вы задали параметры соединения между БД и ADO-элементом управления данными, благодаря чему сможете построить набор записей. Теперь обратимся к элементу, который будет отображать данные - DataCombo.
Вернитесь к форме и откройте окно Properties для добавленного ранее элемента DataCombo. Щелкните по вкладке Categorized, в которой представлены различные категории свойств, относящихся к отображению данных. Щелкните свойство DataSource и выберите из выпадающего списка Adodc1 – имя только что созданного ADO - элемента управления. Этим вы сообщаете элементу DataCombo, с каким элементом управления данными он связан.
12. Установите свойство RowSource равным Adodc1( единственно возможный выбор). Затем щелкните по свойству ListField и выберите из выпадающего списка Title. Когда из списка ListField выбирается новое значение, VB обновляет свойство BoundColumn. Это свойство позволяет связать две таблицы. С помощью этого свойства можно одновременно обновлять две таблицы. Установите свойство Text равным пустой строке, чтобы не показывать название элемента управления на экране.
13. Теперь посмотрите результат. Нажмите F5 для запуска программы. Затем откройте выпадающий список, в котором присутствует более 8000 строк, помещенных туда элементом управления данными.
Введите какую-нибудь букву в поле над списком. Если вы набрали «С», список прокрутится и покажет первую строку, начинающуюся на «С». Таким образом, элемент управления ищет нужную информацию автоматически. А если вы хотите расположить строки в списке по алфавиту, нужно задать SQL-запрос, осуществляющий сортировку. Вот как это делается.
Откройте диалоговое окно Properties для ADO-элемента управления данными и выберите свойство RecordSource. Щелкните кнопку с многоточием.
14. Выберите из списка CommandType значение 1 - adCmdText. Это позволит задать в качестве команды SQL-запрос. Введите в поле CommandText команду:
SELECT * FROM Titles ORDER BY Title
Щелкните ОК.
Сохраните проект и нажмите F5 для повторного запуска программы. Все названия должны выстроиться в алфавитном порядке.
Свойство Bound Column
Пусть необходимо добавить новую книгу в таблицу Titles. Поле PubID (идентификатор издательства) в записи о книге ссылается на запись с соответствующим первичным ключом в таблице Publishers (Издательства). Пользователь знает название издательства, но не обязан знать код PubID. Этот код надо взять из связанной таблицы Publishers. Задача состоит в следующем: нужно обеспечить пользователю возможность при вводе информации о новой книге в таблицу Titles задавать название издательства, но при этом в таблицу должен заноситься код издательства PubID, взятый из связанной таблицы Publishers.
Названия издательств покажем в выпадающем списке с помощью элемента DataCombo. Эти названия берутся из связанной таблицы Publishers.
Нам понадобятся два элемента управления данными ADO. Первый открывает таблицу Titles, а второй – таблицу Publishers. Свойству DataSource элемента DataCombo присвоим значение Titles, а свойству RowSource – значение Publishers (см. рисунок 2).
Рисунок 2.
Свойство ListField определяет, какое поле будет показано пользователю в элементе управления DataCombo. Мы установим его так, чтобы отображались названия издательств. Свойство BoundColumn определяет, какое поле в таблице Publishers копируется в поле, имя которого задано свойством DataField, являющимся внешним ключом таблицы Titles, т. е. в поле PubID. Таким образом, свойство BoundColumn определяет имя поля, с помощью которого задается связь между двумя таблицами.
Создадим форму, позволяющую обновлять таблицу Titles при поступлении в библиотеку новых книг.
Начните новый проект в VB. Поместите в форму следующие компоненты: DataCombo, два ADO-элемента управления данными, семь полей ввода и семь меток. Расположите все это, как показано на рисунке и установите значения свойства Text полей ввода равными именам полей, которые будут с ними связаны.
Воспользуйтесь справочной таблицей 1 для того, чтобы задать значения всех необходимых свойств.
Постройте строки соединения для обоих элементов управления данными, как в предыдущем примере, затем свяжите элементы управления, сверяясь с приведенной ниже таблицей.
Таблица 1.
Элемент управления | Свойство | Значение | Комментарий |
ADODC1 | ConnectionString | Biblio. mdb | |
CommandType | adCmdTable | ||
RecordSource | Titles | ||
Caption | Titles Table | ||
EOFAction | adDoAddNew | При таком значении данного свойства устанавливается возможность добавления в таблицу новой записи, если текущей является последняя запись и пользователь нажимает кнопку перехода к следующей записи. По умолчанию значением свойства EOFAction ADO-элемента управления является adDoMoveLast – при этом пользователю не разрешается перемещаться за последнюю запись. | |
ADODC2 | ConnectionString | Biblio. mdb | |
CommandType | adCmdTable | ||
RecordSource | Publishers | ||
Caption | Publishers Table | ||
Visible | False | Благодаря такому значению данного свойства элемент Adodc2 не будет виден на экране во время работы программы | |
Text1 | DataSource | ADODC1 | |
DataField | Title | ||
Text | Title | ||
Text2 | DataSource | ADODC1 | |
DataField | Year Published | ||
Text | Year Published | ||
Text3 | DataSource | ADODC1 | |
DataField | ISBN | ||
Text | ISBN | ||
Text4 | DataSource | ADODC1 | |
DataField | Description | ||
Text | Description | ||
Text5 | DataSource | ADODC1 | |
DataField | Notes | ||
Text | Notes | ||
Text6 | DataSource | ADODC1 | |
DataField | Subject | ||
Text | Subject | ||
Text7 | DataSource | ADODC1 | |
DataField | Comments | ||
Text | Comments | ||
DataCombo1 | DataSource | ADODC1 | |
DataField | PubID | ||
RowSource | ADODC2 | ||
BoundColumn | PubID | ||
ListField | Name | ||
Label1 | Caption | Book Title | |
Label2 | Caption | Year Published | |
Label3 | Caption | ISBN | |
Label4 | Caption | Description | |
Label5 | Caption | Notes | |
Label6 | Caption | Subject | |
Label7 | Caption | Comments |
Сохраните проект и нажмите F5 для запуска программы.
«Погуляйте» по набору записей с помощью элемента Adodc1, который управляет набором записей из таблицы Titles. Посмотрите, как изменяется название издательства при перемещении, и не забудьте, что название издательства берется из таблицы Publishers, а не Titles. Вы получили наглядную демонстрацию того, как элемент управления данными связывает две таблицы.
Добавьте теперь новую книгу в таблицу Titles, чтобы убедиться в работоспособности программы. Для перехода к новой записи щелкните по кнопке ► на элементе управления данными. Затем щелкните по кнопке ►, после чего откроется форма с незаполненными полями, готовая для ввода данных о новой книге.
Введите в пустые поля какой-нибудь текст, но не щелкайте по элементу DataCombo. Заполнив поля, щелкните по кнопке ◄. Изменения должны записаться в базу данных. Но VB выдает сообщение об ошибке: поскольку не было выбрано издательство из выпадающего списка, программа не знает, какое значение записать в поле PubID – внешний ключ таблицы Titles. А поскольку пустым это поле не может быть, запись и не добавилась.
Выберите название издательства из списка, который является частью элемента DataCombo. Щелкните по кнопке ◄ и увидите, что на этот раз в таблицу Titles добавлена новая запись.
![]()
Щелкните по кнопке ◄ для перехода к первой записи в наборе. Затем щелкните по кнопке ► для возврата на последнюю запись. Вы видите, что новая запись оказалась в конце набора. Добавленные записи всегда помещаются в конец.
Контрольные вопросы
1. Какой компонент можно использовать в VB-программах для подключения к базе данных?
2. Как зарегистрировать ADO в VB?
3. Опишите порядок работы с ADO-компонентом.


