Методические указания к лабораторной работе «Доступ к БД из VB» Цель работы: изучить способы получения доступа к базе данных из среды программирования VB. Руководство к выполнению Элемент управления данными ADO Для доступа к базе данных из программы на Visual Basic в VB 6.0 включены объекты управления данными Active X (Active X Data Objects ADO). ADO data control (ADO – элемент управления данными) – это компонент, который можно использовать в VB-программах для подключения к базе данных. Он помещается в форму и соединяется с базой. Затем вы отображаете данные в форме, применяя другие элементы управления, которые связываете с элементом управления данными. Когда элемент управления данными уже подключен к базе данных, можно воспользоваться любым из информационно-ориентированных элементов управления (связанные элементы управления) для отображения записей. Анализируя посланный запрос, ядро базы данных строит набор записей (recordset). Набор записей – это рабочая копия сведений, хранящихся в таблицах. Информационно-ориентированный элемент управления предоставляет доступ к одному или нескольким полям записи базы с помощью ADOэлемента управления данными. С помощью кнопок навигации ( ◄,◄, ►,► ) можно перейти к другой записи. При этом во всех связанных элементах управления отображаются данные из полей новой записи. Если пользователь изменяет данные в связанном элементе управления и потом переходит к новой записи, изменения сохраняются в базе автоматически ( см. рисунок 1). VB-форма Связанные элементы управления соотнесены ◄◄ Adodc1 Adodc1 с элементом управления данными ►► Набор записей ( в памяти ) БД Рисунок 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). Adodc1 Adodc2 PubID Элемент управления DataCombo DataSource: Adodc1 Title DataField: PubID Year Published RowSource: Adodc2 Таблица Titles Таблица Bound Column: PubID PubID ListField: Name Рисунок 2. Name Publishers Свойство ListField определяет, какое поле будет показано пользователю в элементе управления DataCombo. Мы установим его так, чтобы отображались названия издательств. Свойство BoundColumn определяет, какое поле в таблице Publishers копируется в поле, имя которого задано свойством DataField, являющимся внешним ключом таблицы Titles, т.е. в поле PubID. Таким образом, свойство BoundColumn определяет имя поля, с помощью которого задается связь между двумя таблицами. Создадим форму, позволяющую обновлять таблицу Titles при поступлении в библиотеку новых книг. Начните новый проект в VB. Поместите в форму следующие компоненты: DataCombo, два ADO-элемента управления данными, семь полей ввода и семь меток. Расположите все это, как показано на рисунке и установите значения свойства Text полей ввода равными именам полей, которые будут с ними связаны. Воспользуйтесь справочной таблицей 1 для того, чтобы задать значения всех необходимых свойств. Постройте строки соединения для обоих элементов управления данными, как в предыдущем примере, затем свяжите элементы управления, сверяясь с приведенной ниже таблицей. Таблица 1. Элемент управления ADODC1 ADODC2 Свойство Значение ConnectionString CommandType RecordSource Caption EOFAction Biblio.mdb adCmdTable Titles Titles Table adDoAddNew ConnectionString CommandType RecordSource Caption Biblio.mdb adCmdTable Publishers Publishers Table Комментарий При таком значении данного свойства устанавливается возможность добавления в таблицу новой записи, если текущей является последняя запись и пользователь нажимает кнопку перехода к следующей записи. По умолчанию значением свойства EOFAction ADO-элемента управления является adDoMoveLast – при этом пользователю не разрешается перемещаться за последнюю запись. Visible Text1 DataSource DataField Text Text2 DataSource DataField Text Text3 DataSource DataField Text Text4 DataSource DataField Text Text5 DataSource DataField Text Text6 DataSource DataField Text Text7 DataSource DataField Text DataCombo1 DataSource DataField RowSource BoundColumn ListField Label1 Caption Label2 Caption Label3 Caption Label4 Caption Label5 Caption Label6 Caption Label7 Caption False Благодаря такому значению данного свойства элемент Adodc2 не будет виден на экране во время работы программы ADODC1 Title Title ADODC1 Year Published Year Published ADODC1 ISBN ISBN ADODC1 Description Description ADODC1 Notes Notes ADODC1 Subject Subject ADODC1 Comments Comments ADODC1 PubID ADODC2 PubID Name Book Title Year Published ISBN Description Notes Subject Comments Сохраните проект и нажмите F5 для запуска программы. «Погуляйте» по набору записей с помощью элемента Adodc1, который управляет набором записей из таблицы Titles. Посмотрите, как изменяется название издательства при перемещении, и не забудьте, что название издательства берется из таблицы Publishers, а не Titles. Вы получили наглядную демонстрацию того, как элемент управления данными связывает две таблицы. Добавьте теперь новую книгу в таблицу Titles, чтобы убедиться в работоспособности программы. Для перехода к новой записи щелкните по кнопке ► на элементе управления данными. Затем щелкните по кнопке ►, после чего откроется форма с незаполненными полями, готовая для ввода данных о новой книге. Введите в пустые поля какой-нибудь текст, но не щелкайте по элементу DataCombo. Заполнив поля, щелкните по кнопке ◄. Изменения должны записаться в базу данных. Но VB выдает сообщение об ошибке: поскольку не было выбрано издательство из выпадающего списка, программа не знает, какое значение записать в поле PubID – внешний ключ таблицы Titles. А поскольку пустым это поле не может быть, запись и не добавилась. Выберите название издательства из списка, который является частью элемента DataCombo. Щелкните по кнопке ◄ и увидите, что на этот раз в таблицу Titles добавлена новая запись. Щелкните по кнопке ◄ для перехода к первой записи в наборе. Затем щелкните по кнопке ► для возврата на последнюю запись. Вы видите, что новая запись оказалась в конце набора. Добавленные записи всегда помещаются в конец. Контрольные вопросы 1. Какой компонент можно использовать в VB-программах для подключения к базе данных? 2. Как зарегистрировать ADO в VB? 3. Опишите порядок работы с ADO-компонентом.