Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual Basic в примерах.docx
Скачиваний:
12
Добавлен:
18.08.2019
Размер:
1.1 Mб
Скачать

Элемент управления данными ado

Запрограммируем этот элемент самостоятельно. Доба­вим ADO-элемепт управления данными, а также элемент DаtaList на панель инструментов.

Откройте диалоговое окно Components и выберите два элемента управления:

Microsoft ADO Data Control 6.0 (OLEDB);

Microsoft DataList Controls 6.0 (OLEDB).

Обратите внимание: совместно с ADO-элементом управления данными могут использоваться только те элементы управления, в названии которых встречается аббревиатура OLEDB. Открыв окно Components, вы увидите в списке строку Microsoft Data Bound List Controls 6.0. Однако этот элемент работает только с DAO-элементом управления данными - не перепутайте! Списковые элементы управления Microsoft DataList Controls (DataList и DataCombo) представлены пиктограммой, изображающей желтый цилиндр на фоне синей сетки.

Теперь на панели инструментов появились три новых пиктограммы:

Adodc - ADO-элемент управления данными;

DataList - список данных;

DataCombo - комбинированный список данных.

При выборе из списка Microsoft DataList Controls 6.0 (OLEDB) на панель помещаются сразу два элемента: DataList и DataCombo. Причина в том, что оба находятся в одном и том же осх-файле. Даже если вы хотите использовать один из названных элементов, в проект включаются оба. Конечно, это не проблема, не­окончательный размер дистрибутива немного увеличивается. Интересно отме­тить, что осх-файлы - не что иное, как DLL, только файлы имеют другое расши­рение. Поэтому, имея одну копию осх-файла, можно многократно использовать в проекте ADO-элемент управления данными.

Каждый из элементов DataList, DataCombo, DataGrid и MS HFlexGrid позво­ляет отображать сразу несколько записей, используя один ADO-элемент управ­ления. Другие внутренние элементы управления (графический список, метка, поле ввода, растровое изображение, OLE, список и комбинированной список) могут быть связаны только с одним полем из набора записей, который подчиня­ется DAO-элементу управления данными.

Отметьте для себя еще раз: любой элемент управления, работающий с ADO-элементом управления данными, имеет в своем названии аббревиатуру OLE DB

Посмотрим, как можно показать одновременно несколько записей, используя новые элементы управления ADO.

Элемент управления данными ADO и связанный элемент DataList

В Visual Basic 6.0 включено несколько очень полезных связанных элементов управления. Как уже говорилось, они предназначены для работы только с ADO-, но не с DAO-элементом управления данными. Но поскольку ADO-элемепт (Adodc) выглядит точно так же, как внутренний DAO-элемепт, переход с одного на другой не потребует много усилий.

ADO-элемент управления имеет широкие возможности. Например, позволя­ет запрограммировать комбинированный список так, чтобы в нем автоматически показывались значения полей из некоторого набора данных. Обычно, когда про­граммисту необходимо обновить комбинированный список, он создает набор за­писей и вручную пишет код для циклической обработки всех записей и добавле­ния значения нужного поля из каждой записи в список. А вот с ADO-элементом управления все это можно сделать автоматически. Поэтому следующий пример демонстрирует новый элемент - bound list box (связанный список) - в сочетании с ADO-элементом управления данными.

Практикум - использование элемента DataCombo с ADO-элементом управления данными

  1. Создайте новый проект. Поместите в форму элемент DataCombo и ADO-элемент управления данными. Пиктограмма ADO-элемента управления данными на панели инструментов выглядит как уменьшенная копия пиктограммы стандартного элемента управления данными, только на ней еще изображен желтый цилиндр. Это визуально указывает пользователю, что он имеет дело с информационно-ориентированным элементом. Информационно-ориентированные элементы, связанные с элементом управления данными, автоматически отображают одно или несколько полей из те­кущей записи. Элемент управления данными выполняет все операции над текущей записью. Если вы немного задержите курсор над пиктограммой, появится всплыва­ющая подсказка, сообщающая о том, что это Adodc (Элемент управления данными ActiveX Data Obiect).

  1. Первое, что нужно сделать, - задать свойства ADO-элемен­та управления данными, чтобы он знал, какой набор запи­сей создавать. В ADO применяется другой подход к откры­тию источника информации. Чтобы познакомиться с ним, щелкните по ADO-элементу управления данными и от­кройте окно Properties. Поскольку ADO может подключаться к любому источнику информации, необходимо задать строку соединения; она описывает источник и сообщает ADO, как до него добраться.

  2. Щелкните по свойству ConnectionString, и в правой половине таблицы появится кнопка с многоточием. Щелкните по ней - пусть Visual Basic создаст строку соеди­нения с источником данных:

4. Щелкните по кнопке Build - появится первая из форм, которые предстоит заполнить. Поскольку вы собирае­тесь подключиться к базе данных Access, выберите Microsoft Jet 3.51 OLE DB Provider (это словосочетание описывает родовой тип базы данных, о чем будет рассказано позже). Щелкните по Next >.

  1. Далее вы сообщаете, какую базу данных от­крывать. Щелкните по кнопке с многоточи­ем и выберите Biblio.mdb. Поскольку база не защищена паролем, оставьте в поле User Name (Имя пользователя) значение по умол­чанию и поднимите флажок Blank Password (Пустой пароль). Так как пароль не требуется, этого достаточ­но. Имя пользователя Admin разрешает пол­ный доступ к базе данных. Но если бы база данных была защищена паролем, в диало­говом окне надо было бы ввести как имя пользователя, так и пароль. Эти сведения были бы включены в строку соединения.

Многие программисты не знают, что в Jet система защиты за­действована всегда. Всякий раз, когда программа пытается что-то сделать с базой данных, Jet проверяет, есть ли у пользователя полномочия, необходимые для совершения операции. Поскольку никакого окна или сообщения, относящегося к вопросам безопас­ности, не появляется, пользователи даже не осознают, что их действия все время контролируются. Принимаемый по умолча­нию учетный регистр пользователя Admin обеспечивает пол­ный доступ ко всем объектам базы данных. Следовательно, по умолчанию вы можете делать все, что захотите, поэтому Jet ничего и не запрещает. Тотальный контроль безопасности всегда имеет смысл. Ведь это означает, что нельзя открыть базу дан­ных в обход механизма защиты - нет никакого «черного хода». Если вы не активировали пароли для своей базы данных, механизм защиты работает, визуально никак не проявляя себя.

  1. Теперь проверим возможность соединения с указанной базой данных. Щелкните по кнопке Test Connection. Если все нормально, на экране должно появиться окно с сообщением об успешном соединении:

  1. Щелкните по вкладке All на странице свойств. В окне отображается вся информа­ция, необходимая ADO-элементу управления данными. Большая часть свойств имеет значения по умолчанию. Опытные пользователи могут изме­нить любое значение.

  2. Закройте диалоговое окно и вместе с ним страницу свойств, щелкнув по кнопке ОК. Если теперь посмотрите на свойство Connection String (Строка соедине­ния), то увидите, что ему присвоено значение, которое вы определили в предыдущем шаге.

  3. Теперь щелкните по свойству RecordSource ADO-элемента управления данными. Щелкните по кнопке с многоточием, чтобы открыть страницу свойств RecordSource. Поскольку вы собираетесь извлекать данные из таблицы, надо выбрать из списка Command Туре (Тип команды) пункт 2 – adCmdTable.

  4. Позже для формирования запросов будет использоваться SQL, и тогда надо будет вы­бирать пункт 1 - adCmdText. В результате вы сможете поместить в поле Command Text (SQL) текст любого SQL-запроса. А пока вы просто выбираете все записи из таб­лицы, поэтому укажите ее в выпадающем списке, который содержит имена всех таб­лиц, имеющихся в базе Biblio.mdb. Выберите таблицу Titles и щелкните по кнопке ОК.

  5. Итак, вы задали параметры соединения между базой данных и ADO-элементом уп­равления данными, благодаря чему сможете построить набор записей. Теперь со­средоточимся на элементе, который будет отображать данные - DataCombo. Вернитесь к форме и откройте окно Properties для добавленного ранее элемента DataCombo. ADO-элемент управления данными выполнит всю работу по заполне­нию DataCombo сведениями, вы должны лишь предоставить достаточно информа­ции для его действий. Щелкните по вкладке Categorized, в которой представлены различные категории свойств, относящихся к отображению данных. Щелкните по свойству DataSource и выберите из выпадающего списка Adodcl - имя только что созданного ADO-элемента управления. Тем самым вы сообщаете элементу DataCombo, с каким элементом управления данными он связан (не забывайте, что в форме может быть несколько таких элементов).

  6. Теперь все готово, чтобы связать элемент DataCombo с ADO-элементом управления данными. Установите свойство RowSource равным Adodcl (единственно возможный выбор). Затем щелкните по свойству ListField и выберите из выпадающего спис­ка Title. Когда из списка ListField выбирается новое значение, Visual Basic автоматически обновляет свойство BoundColumn. Свойство BoundColumn позволяет связать две таблицы для отображе­ния в одном элементе DataCombo. Пока не заду­мывайтесь о том, как все происходит. Отметьте для себя главное - с помощью указанного свой­ства можно одновременно обновлять две таблицы. Скоро об этом будет рассказано подробнее. Установите свойство Text равным пустой строке, чтобы не показывать название элемента управления на экране.

  7. Уже можно полюбоваться на плоды своих трудов. Запустите програм­му. Затем откройте выпадающий список, в котором присутствует более 8000 строк, помещенных туда элементом управления данными

Введите какую-нибудь букву в поле над списком. Если, напри­мер, вы набрали «С», список прокрутится и покажет первую строку, начинающуюся на «С». Таким образом, элемент управления ищет нужную информацию автомати­чески, а когда в списке больше 8000 элементов, это очень полезно! А если бы вы за­хотели расположить строки в списке по алфавиту, пришлось бы задать SQL-запрос, осуществляющий сортировку.

Ниже рассказано, как это делается. Сейчас очень подходящий момент продемонстрировать богатые возможности эле­мента управления. Откройте диалоговое окно Properties для ADO-элемента управле­ния данными и выберите свойство RecordSource. Щелкните по кнопке с многоточием:

  1. Выберите из списка Command Type значение 1 - adCmdText. Это позволит задать в -качестве команды SQL-запрос. Заметьте, что запись в поле Table or Store Procedure Name (Название таблицы или хранимой процедуры) теперь нельзя изме­нить, а поле Command Text стало доступным. Введите в него следующую команду

SELECT * FROM Titles ORDER BY Title

15. Щелкните по кнопке ОК. Все названия выстроились в алфавитном порядке. Но обратите внимание: названия, начинающиеся с 1-2-3, оказались раньше тех, что начинаются с буквы А. Цифра 1 имеет ASCII-код 49, а буква А - код 65. Так что 1 идет раньше А и, кстати, прописные буквы - раньше строчных. Как вы теперь понимаете, знание принципов сортировки весьма полезно для представления информации пользователю.

Свойство BoundColumn

Теперь, как и было обещано, поговорим о свойстве BoundColumn элемента управления DataCombo. Предположим, что нужно добавить новую книгу в таб­лицу Titles. Как вам уже известно, поле PubID в записи о книге ссылается на запись с соответствующий первичным ключом в таблице Publishers. Допус­тим, что пользователь не помнит сотни значений поля PubID. Конечно, он знает, в каком издательстве вышла книга, но для связи новой записи с издатель­ством нужно не название, а идентификатор последнего. Вот тут и приходит на помощь свойство BoundColumn.

С помощью элемента DataCombo можно показать названия издательств в выпа­дающем списке. Это лучшее решение проблемы, хотя на первый взгляд такой спо­соб кажется довольно сложным. Вам понадобятся два элемента управления данны­ми. Первый, Adodcl, открывает таблицу Titles, а второй – Adodc2 -таблицу Publishers. Свойству DataSource элемента DataCombo присвойте зна­чение Adodcl, а свойству RowSource - значение Adodc2.

Свойство ListField определяет, какое поле будет показано пользователю в эле­менте управления. Вы установили его так, чтобы отображались названия издательств. Свойство BoundColumn определяет, какое поле в таблице Publishers соответствует полю PubID в таблице Titles. Помните, что поле PubID в таблице Publishers ре­дактировать нельзя; поскольку указанное ноле является первичным ключом для таб­лицы, его значение никогда не должно изменяться. Вместо этого значение из поля PubID в таблице Publishers копируется в поле, имя которого задано свойством DataField, являющимся внешним ключом таблицы Titles, т.е. в поле PubID.

Практикум - свойство BoundColumn в действии

  1. Начните новый проект. Поместите в фор­му следующие компоненты: DataCombo, два ADO-элемента управления данными, семь полей ввода и семь меток. Располо­жите все это, как показано на рисунке.

  1. Задайте следующие свойства элементов:

ADODC1 ConnectionString Biblio.mdb

CommandType adCmdTable

RecordSource Titles

EOFAction adDOAddNew

ADODC2 ConnectionString Biblio.mdb

CommandType adCmdTable

RecordSource Publishers

Visible False

DataCombo1 DataSource ADODC1

DataField PubID

RowSource ADODC2

BoundColumn PubID

ListField Name

Текстовые поля формы привяжите к Adodc1 (DataSource) и к соответствующим полям (DataField)

Обра­тите внимание, что свойство Adodcl.EOFAction установлено adDoAddNew. Это сделано для того, чтобы в таблицу добавлялась новая запись в случае, если теку­щей является последняя и пользователь нажимает кнопку перехода к следующей. По умолчанию значением свойства EOFAction ADO-элемента управления является adDoMoveLast - при этом пользователю не разрешается перемещаться за послед­нюю запись. Изменив значение свойства, вы фактически дали пользователю воз­можность добавлять новые записи в таблицу Titles. Отметьте также, что свойство Visible элемента Adodc2 равно False, благодаря чему оно не будет видно на эк­ране во время работы программы.

3. Запустите программу.

4. «Погуляйте» по набору записей с помощью элемента Adodcl, который управляет набором записей из таблицы Titles. Посмотрите, как изменяется название издательства при перемещении, и не забудьте, что название издательства берется из таблицы Publishers, а не Titles. Согласитесь, вы получили наглядную демонстрацию того, как элемент управле­ния данными связывает две таблицы. Добавим теперь новую книгу в таблицу Titles. Всегда надо убедиться в нормальной работе программы, прежде чем отдавать ее за­казчику.

5. Для перехода к последней записи щелкните по кнопке >| на элементе управления данными. Затем щелкните по кнопке >, после чего откроется форма с незаполнен­ными полями, готовая для ввода данных о новой книге. Введите в пустые поля какой-нибудь текст, но щелкайте по элементу DataCombo. Это по­зволит проверить, что поле PubID заполнено правильно. Заполнив поля, щелкните по кнопке <. Изменения должны записаться в базу данных.

6. Но стоило щелкнуть по кнопке <, как Visual Basic выдал сообщение об ошибке. Поскольку не было выбрано издательство из выпадающего списка, программа не знает, какое значение записать в поле PubID - внешний ключ таблицы Titles. А поскольку пустым (Null) это поле быть не может, запись и не добавилась.

7. Выберите название издательства из списка, который является частью элемента DataCombo. Имея идентификатор издательства, DataCombo может связать его с полем PubID в таблице Titles. Выбрав издательство, щелкните по кнопке < и уви­дите, что на этот раз в таблицу Titles до­бавлена новая запись.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]