- •Знакомство с visual basic
- •Практическая работа
- •Свойства, методы и события
- •Практическая работа
- •Переменные
- •Объявление переменных
- •Область видимости переменной
- •Ф орма 1
- •Форма 2
- •Математические операторы
- •Операторы сравнения
- •Логические операторы
- •Практическая работа
- •Обработка ошибок
- •Практическая работа
- •Самостоятельно
- •Условия и циклы
- •Самостоятельно
- •Использование списков и полей со списками
- •Удаление строк из списка
- •Ф орма Код (самостоятельно)
- •Массивы
- •Объявления массивов Объявление массива как одной переменной:
- •Заполнение массива
- •Динамический массив
- •Самостоятельно
- •Работа со строками
- •Определение длины строки
- •Усечение строк
- •Самостоятельно
- •Использование одной кнопки для включения / выключения
- •Конкатенация разнотипных строк
- •Коды символов в формате ascii
- •Окно ввода данных
- •Функция Val() и Slr()
- •Вывод информации на форму
- •Функция Format
- •Работа с графическим окном
- •Элемент управления RichTextBox
- •Объект Printer
- •Дополнительные возможности работы со строками Оператор Like и неопределенный поиск
- •Прочие строковые функции
- •Работа с файлами Чтение текстового файла (1 способ)
- •Запись текста в текстовый файл: Форма
- •Чтение текстового файла (2 способ)
- •Самостоятельно
- •Код (самостоятельно)
- •Простой файловый менеджер
- •'FileCopy не допускает файловые шаблоны, поэтому копирование по полному пути
- •Изменение регистра символов строки
- •Код (проанализировать программу, при необходимости – набрать и проверить работу)
- •Создание меню
- •Клавиши доступа и быстрые клавиши
- •Создание всплывающих меню
- •Разделение строк меню
- •Вырезание, копирование и вставка с помощью объекта Clipboard (буфера обмена)
- •Выделение текста в поле текста
- •Самостоятельно
- •Код (сначала попытайтесь самостоятельно написать код)
- •Использование элемента управления
- •Управляющие элементы Image List и Tool Bar
- •Создание дистрибутивного пакета – подготовка приложения к распространению
- •Время и таймеры
- •Использование одной кнопки для включения /выключения
- •Вычисление разницы между датами
- •Вычисление возраста
- •Код (проанализировать, при необходимости набрать проверить работу)
- •Самостоятельно
- •Код (сначала самостоятельно)
- •Подпрограммы и функции Использование процедур в Visual Basic
- •Самостоятельно
- •Определение точки входа в программу (запуск проекта с нужной формы)
- •Выбор подпрограммы Main() точкой входа проекта
- •' Оповещаем пользователя
- •Тестирование и отладка программ
- •Точка остановки программы
- •Наблюдение за несколькими переменными
- •Полосы прокрутки
- •Самостоятельно
- •Дополнительные компоненты active X
- •Создание дистрибутивного пакета – подготовка приложения к распространению
- •Время и таймеры
- •Использование одной кнопки для включения /выключения
- •Вычисление разницы между датами
- •Вычисление возраста
- •Код (проанализировать, при необходимости набрать проверить работу)
- •Самостоятельно
- •Форма Код (сначала самостоятельно)
- •Подпрограммы и функции Использование процедур в Visual Basic
- •Самостоятельно
- •Определение точки входа в программу (запуск проекта с нужной формы)
- •Выбор подпрограммы Main() точкой входа проекта
- •' Оповещаем пользователя
- •Понятие о базах данных
- •Терминология баз данных
- •Элемент управления данными
- •Свойства элемента управления данными
- •Методы элемента управления данными
- •Свойства набора данных
- •Методы набора записей
- •Практическая работа
- •Связывание элемента управления данными с базой данных
- •Что такое Recordset?
- •Поиск записей
- •Поиск дальше
- •Запросы
- •Компоненты языка sql
- •Самостоятельно
- •Создание отчетов с помощью crystal reports
- •Создание отчета
- •Объекты
- •Практика
- •Движение объектов
- •О связанных элементах управления Последовательность событий при загрузке формы
- •Отношения родитель/потомок между элементами управления данными
- •Практикум –
- •Создание базы данных своими руками
- •Какую технологию выбрать?
- •Элемент управления данными ado
- •Сортировка и объединение данных с помощью элемента управления Hierarchical FlexGrid
- •Проект «Школьный журнал» (пример создания и работы с базой данных)
- •Практическое задание Создать базу данных «Записная книжка»
- •Простейший графический редактор
- •При отпускании кнопки мыши
- •Dim n As Integer ‘счетчик новых записей в массиве
Элемент управления данными 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-элементом управления данными
Создайте новый проект. Поместите в форму элемент DataCombo и ADO-элемент управления данными. Пиктограмма ADO-элемента управления данными на панели инструментов выглядит как уменьшенная копия пиктограммы стандартного элемента управления данными, только на ней еще изображен желтый цилиндр. Это визуально указывает пользователю, что он имеет дело с информационно-ориентированным элементом. Информационно-ориентированные элементы, связанные с элементом управления данными, автоматически отображают одно или несколько полей из текущей записи. Элемент управления данными выполняет все операции над текущей записью. Если вы немного задержите курсор над пиктограммой, появится всплывающая подсказка, сообщающая о том, что это Adodc (Элемент управления данными ActiveX Data Obiect).
Первое, что нужно сделать, - задать свойства ADO-элемента управления данными, чтобы он знал, какой набор записей создавать. В ADO применяется другой подход к открытию источника информации. Чтобы познакомиться с ним, щелкните по ADO-элементу управления данными и откройте окно Properties. Поскольку ADO может подключаться к любому источнику информации, необходимо задать строку соединения; она описывает источник и сообщает ADO, как до него добраться.
Щелкните по свойству ConnectionString, и в правой половине таблицы появится кнопка с многоточием. Щелкните по ней - пусть Visual Basic создаст строку соединения с источником данных:
4. Щелкните по кнопке Build - появится первая из форм, которые предстоит заполнить. Поскольку вы собираетесь подключиться к базе данных Access, выберите Microsoft Jet 3.51 OLE DB Provider (это словосочетание описывает родовой тип базы данных, о чем будет рассказано позже). Щелкните по Next >.
Далее вы сообщаете, какую базу данных открывать. Щелкните по кнопке с многоточием и выберите Biblio.mdb. Поскольку база не защищена паролем, оставьте в поле User Name (Имя пользователя) значение по умолчанию и поднимите флажок Blank Password (Пустой пароль). Так как пароль не требуется, этого достаточно. Имя пользователя Admin разрешает полный доступ к базе данных. Но если бы база данных была защищена паролем, в диалоговом окне надо было бы ввести как имя пользователя, так и пароль. Эти сведения были бы включены в строку соединения.
Многие программисты не знают, что в Jet система защиты задействована всегда. Всякий раз, когда программа пытается что-то сделать с базой данных, Jet проверяет, есть ли у пользователя полномочия, необходимые для совершения операции. Поскольку никакого окна или сообщения, относящегося к вопросам безопасности, не появляется, пользователи даже не осознают, что их действия все время контролируются. Принимаемый по умолчанию учетный регистр пользователя Admin обеспечивает полный доступ ко всем объектам базы данных. Следовательно, по умолчанию вы можете делать все, что захотите, поэтому Jet ничего и не запрещает. Тотальный контроль безопасности всегда имеет смысл. Ведь это означает, что нельзя открыть базу данных в обход механизма защиты - нет никакого «черного хода». Если вы не активировали пароли для своей базы данных, механизм защиты работает, визуально никак не проявляя себя.
Теперь проверим возможность соединения с указанной базой данных. Щелкните по кнопке Test Connection. Если все нормально, на экране должно появиться окно с сообщением об успешном соединении:
Щелкните по вкладке All на странице свойств. В окне отображается вся информация, необходимая ADO-элементу управления данными. Большая часть свойств имеет значения по умолчанию. Опытные пользователи могут изменить любое значение.
Закройте диалоговое окно и вместе с ним страницу свойств, щелкнув по кнопке ОК. Если теперь посмотрите на свойство Connection String (Строка соединения), то увидите, что ему присвоено значение, которое вы определили в предыдущем шаге.
Теперь щелкните по свойству RecordSource ADO-элемента управления данными. Щелкните по кнопке с многоточием, чтобы открыть страницу свойств RecordSource. Поскольку вы собираетесь извлекать данные из таблицы, надо выбрать из списка Command Туре (Тип команды) пункт 2 – adCmdTable.
Позже для формирования запросов будет использоваться SQL, и тогда надо будет выбирать пункт 1 - adCmdText. В результате вы сможете поместить в поле Command Text (SQL) текст любого SQL-запроса. А пока вы просто выбираете все записи из таблицы, поэтому укажите ее в выпадающем списке, который содержит имена всех таблиц, имеющихся в базе Biblio.mdb. Выберите таблицу Titles и щелкните по кнопке ОК.
Итак, вы задали параметры соединения между базой данных и ADO-элементом управления данными, благодаря чему сможете построить набор записей. Теперь сосредоточимся на элементе, который будет отображать данные - DataCombo. Вернитесь к форме и откройте окно Properties для добавленного ранее элемента DataCombo. ADO-элемент управления данными выполнит всю работу по заполнению DataCombo сведениями, вы должны лишь предоставить достаточно информации для его действий. Щелкните по вкладке Categorized, в которой представлены различные категории свойств, относящихся к отображению данных. Щелкните по свойству DataSource и выберите из выпадающего списка Adodcl - имя только что созданного ADO-элемента управления. Тем самым вы сообщаете элементу DataCombo, с каким элементом управления данными он связан (не забывайте, что в форме может быть несколько таких элементов).
Теперь все готово, чтобы связать элемент DataCombo с ADO-элементом управления данными. Установите свойство RowSource равным Adodcl (единственно возможный выбор). Затем щелкните по свойству ListField и выберите из выпадающего списка Title. Когда из списка ListField выбирается новое значение, Visual Basic автоматически обновляет свойство BoundColumn. Свойство BoundColumn позволяет связать две таблицы для отображения в одном элементе DataCombo. Пока не задумывайтесь о том, как все происходит. Отметьте для себя главное - с помощью указанного свойства можно одновременно обновлять две таблицы. Скоро об этом будет рассказано подробнее. Установите свойство Text равным пустой строке, чтобы не показывать название элемента управления на экране.
Уже можно полюбоваться на плоды своих трудов. Запустите программу. Затем откройте выпадающий список, в котором присутствует более 8000 строк, помещенных туда элементом управления данными
Введите какую-нибудь букву в поле над списком. Если, например, вы набрали «С», список прокрутится и покажет первую строку, начинающуюся на «С». Таким образом, элемент управления ищет нужную информацию автоматически, а когда в списке больше 8000 элементов, это очень полезно! А если бы вы захотели расположить строки в списке по алфавиту, пришлось бы задать SQL-запрос, осуществляющий сортировку.
Ниже рассказано, как это делается. Сейчас очень подходящий момент продемонстрировать богатые возможности элемента управления. Откройте диалоговое окно Properties для ADO-элемента управления данными и выберите свойство RecordSource. Щелкните по кнопке с многоточием:
Выберите из списка 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 в действии
Начните новый проект. Поместите в форму следующие компоненты: DataCombo, два ADO-элемента управления данными, семь полей ввода и семь меток. Расположите все это, как показано на рисунке.
Задайте следующие свойства элементов:
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 добавлена новая запись.