Visual2000 · Архив статей А.Колесова & О.Павловой

Создание приложения "Календарь наших дел" в среде VB 6.0

Часть 1.2

Андрей Колесов, Ольга Павлова

© Андрей Колесов, Ольга Павлова, 2000
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" N 05/2000, компакт-диск.


II этап. Создание базы данных

Для хранения записей-напоминаний нам нужно создать базу данных. Мы сейчас не будем заниматься изысками в области структуры БД (с точки зрения минимизации ее объема и универсальности применения), поэтому наша база данных будет состоять из одной таблицы с тремя полями: RemindTime — дата и время, когда должно произойти соответствующее им событие, RemindMemo — текст, напоминающий об этом событии, DeleteMe — отметка о необходимости удалить данную запись.

Для упрощения задачи будем считать, что все записи имеют уникальные параметры RemindTime (время напоминания). И это условие не противоречит реалиям — нельзя в один и тот же момент делать два разных дела. Кроме того, для хранения текста самой записи-напоминания будем использовать поле типа Memo. Это несколько снизит скорость работы с базой данных по сравнению с использованием текстового поля фиксированной длины, но на наших объемах данных (сколько записей может хранить один человек — сто, тысячу?) это будет совершенно незаметно. Взамен нам не придется ломать голову над тем, сколько места нужно отвести для записи — 100 или 500 байт.

Шаг 12. Для создания базы данных воспользуемся приложением Visual Data Manager или просто VisData (о работе с ним мы уже подробно писали в статье "Создание персональной адресной книги на VB 5.0" в КомпьютерПресс N 7/98). Запустим его с помощью команды Visual Data Manager из меню Add-Ins, а затем выберем команду File|New|Microsoft Access|Version 7.0 MDB. Назовем создаваемый файл Reminder.mdb и сохраним его в том же каталоге, где находится наш файл проекта Reminder.vbp.

Шаг 13. Щелкните правой кнопкой мыши внутри окна Database и выберите команду New Table из быстрого меню. Введите Reminder в поле текста Table Name и потом щелкните кнопку Add Field, чтобы добавить три поля: RemindTime, RemindMemo и DeleteMe. Задайте тип поля RemindTime как Date/Time, затем установите флажок Required и щелкните OK. Для поля RemindMemo задайте параметр Type как Memo, установите флажок AllowZeroLength (не устанавливая флажок Required) и щелкните OK. И, наконец, для DeleteMe задайте параметр Type как Boolean, используемое по умолчанию значение (DefaultValue) — как False, установите флажок Required и щелкните OK.

Теперь закройте диалоговое окно Add Field (Close) и щелкните кнопку Add Index для установки индекса. В поле Name введите имя индекса PrimaryKey, затем выберите поле RemindTime из списка Available Fields, и вы увидите, что поле RemindTime появилось в списке Indexed Fields. Установите флажки Primary и Unique и закройте это диалоговое окно. Сейчас структура нашей таблицы имеет такой вид, как показано на рис. 14. Щелкните кнопку Build the Table, и все — таблица Reminder создана!

Рис. 14

Примечание. Если элемент управления ADO Data связан с DateTimePicker, а в соответствующем источнике данных не существует никаких записей, то при запуске приложения в VB 6.0 возникает ошибка, которая выводит сообщение Unable to bind to field or DataMember: "RemindTime".

Шаг 14. Чтобы избежать такой ситуации, добавьте одну запись к базе данных. Для этого дважды щелкните таблицу Reminder в окне Database, щелкните кнопку Add и введите, к примеру, 27.03.2050 10:00 в поле RemindTime и "Sample memo (do not delete)" в поле RemindMemo. (Такая "далекая" дата не позволит этой служебной записи появляться в будущем при работе с "просроченными"датами в нашем "будильнике".

Конечно, мы не сомневаемся в ценности нашего приложения, но вряд ли оно прослужит нам до 2050 года :-). Щелкните кнопку Update, а затем — Close. Теперь можно закрыть приложение VisData и вернуться в среду VB.

Примечание. В VisData 6.0 так же, как и в версии 5.0 (см. статью "Создание персональной адресной книги на VB 5.0" в КомпьютерПресс N 7/98), существует проблема с вводом и просмотром русского текста (именно поэтому мы ввели английское название пустой записи). Во-первых, в процессе ввода не производится переключение на русскую раскладку клавиатуры, во-вторых — для просмотра данных используется нерусифицированный шрифт. Решение этой проблемы было найдено спустя год после написания этой статьи, оно описано в Совете 352.

В начало статьи

III этап. Создание формы для ввода данных с помощью Мастера DataForm

Шаг 15. Создадим форму для ввода данных при помощи Мастера DataForm. Мы могли бы воспользоваться им еще на этапе применения Мастера Application, но для этого нам нужно было сначала создать базу данных (тем самым поменяв местами этапы I и II). Сейчас же поступим следующим образом: добавим новую форму к проекту, используя команду Add Form из меню Project. На экран выведется диалоговое окно Add Form, в котором во вкладке New выберите значок VB Data Form Wizard и щелкните кнопку Open.

Примечание. В этих двух вариантах создания формы мы обнаружили одно отличие, которое, скорее всего, объясняется ошибкой в программе. В ходе дальнейшей работы, для того, чтобы подключить базу данных, мы будем применять механизм ADO/OLE DB, для чего потребуется ссылка на соответствующую библиотеку MS ActiveX Data Objects 2.x Library. При использовании автономного варианта создания формы с помощью команды Add Form такая ссылка устанавливается автоматически самим Мастером. Но при обращении к Data Form из Мастера Application эта ссылка не устанавливается: данную операцию придется выполнять вручную (Project|References), иначе при запуске программы будет выдаваться сообщение, что переменная ADODB не определена.

Шаг 16. Окно Introduction, аналогично соответствующему окну в Мастере Application, позволяет выбрать установки, сохраненные во время предыдущих сессий. Проигнорируем эту возможность и щелкнем кнопку Next.

В окне Database Type выводится список возможных типов баз данных. К сожалению, в VB 6.0 этот список ограничен только двумя позициями — Access и Remote (ODBC), тогда как в VB 5.0 он существенно шире и включает такие распространенные сегодня типы, как dBASE и Paradox. Выберем Access и перейдем к следующему окну.

Окно Database запрашивает путь и имя базы данных MDB, которую мы собираемся использовать. Щелкните кнопку Browse, чтобы перейти в каталог, где мы сохранили созданную на предыдущем этапе базу данных Reminder.mdb, и щелкните Open.

В следующем окне Form введите frmRemindersSet в качестве имени формы, выберите Single Record из окна списка Form Layout и установите переключатель ADO Data Control в рамке Binding Type (рис. 15). Аналогичное окно в VB 5.0, к сожалению, не содержит рамки Binding Type с флажками, из-за чего вы не можете задать там тип связывания формы с данными.

Рис. 15

Окно Record Source (рис. 16) позволяет выбрать таблицу, которая будет служить в качестве источника записей для элемента управления ADO Data, заданного в предыдущем окне.

Рис. 16

Щелкните стрелку в раскрывающемся списке Record Source и выберите таблицу Reminder. В окне списка Available Fields появится перечень доступных полей, из которого выберите поле RemindTime, а затем щелкните кнопку с изображением направленной вправо одиночной стрелки, чтобы перенести поле в окно списка Selected Fields. Выполните аналогичную операцию для поля RemindMemo. Поле DeleteMe оставим на месте. Укажите в списке Column to Sort By поле RemindTime в качестве столбца для сортировки записей.

Теперь вы попадаете в окно Control Selection (рис. 17), где можете решить, какие стандартные кнопки для работы с базой данной следует поместить на форму. Щелкните кнопку Select All, чтобы установить все флажки, и двигайтесь дальше.

Рис. 17

И наконец, последнее окно Finished дает вам возможность сохранить все выбранные установки в файле Profile. Введите Dataset в качестве имени такого файла, нажав сначала кнопку [...], чтобы выбрать также каталог, и щелкните кнопку Finish для завершения работы. Теперь у вас появилась форма Dataset, которую необходимо сохранить под названием Dataset.frm командой Save Dataset из меню File.

Шаг 17. Программный код, создаваемый Мастером DataForm, не содержит комментариев и окон сообщений типа ToDo, и поэтому его можно запускать на выполнение в том виде, какой есть. Это мы сейчас и сделаем, но для автономного тестирования формы Dataset требуется установить имя frmRemindersSet в списке Startup Objects в окне Project Properties|General (в дальнейшем для тестирования всего приложения нужно будет вернуть исходную установку — подпрограмму Main).

Запустим наш проект на выполнение, и мы увидим созданную форму, которая обеспечивает просмотр и редактирование (обновление, удаление, добавление записей) нашей таблицы Reminder (рис. 18). Пользуясь случаем, заменим английский текст начальной записи на русский (чего мы не могли сделать в VisData).

Рис. 18

Обратите внимание, что в данном случае мы реализовали самый простой вариант диалогового интерфейса взаимодействия с базой данных в виде работы с отдельной записью. Но при желании этот интерфейс можно было бы сделать в виде таблицы, иерархической структуры и пр. (см. рис. 15).

Продолжение статьи: Часть 2.1.

В начало статьи