|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Глава 2 Итак, продолжим. Для создания адресной книги, в которой мы будем хранить названия компьютеров и комментарии к ним, нам нужно создать небольшую базу данных. Для этого мы используем файл таблиц Dbase (*.dbf). Скачайте утилиту DBU поместите ее в каталог C:\project\message\ и запустите. Откроется окно C:\project\message\DBU.EXE (Рис. 1) Если при запуске программы DBU.EXE возникает ошибка, выберите пункт "Пропустить". Нажмите F3, выберите пункт "Создать структуру", и введите название первого поля: "USER", нажмите Enter для перехода курсора. Теперь нужно выбрать тип поля. Для хранения строковых данных используется тип Character. Чтобы его выбрать, нажмите C (латинская). В поле "Ширина" введите 18 - как правило, компьютеры не называют даже такими длинными именами, поэтому нам хватит 18 символов для хранения имени компьютера. Нажмите стрелку вниз для перехода на следующую строку. Введите: имя поля "COMMENT" - короткий комментарий к имени компьютера, тип поля "Character", ширина поля 64 (рис. 2). Нажмите F4 и выберите пункт "Записать структуру". Введите имя файла "USERS.DBF" и нажмите Enter 2 раза. Теперь нам нужно соединиться с базой данных (БД) в момент загрузки нашего приложения. Для этого нам нужно создать источник данных ODBC, через драйвер которого будет происходить взаимодействие PowerBuilder и программы с БД. Для этого на панели инструментов PowerBuilder нажмите на иконку . В открывшемся окне "Database Profiler" откройте ветку "ODBC", а в ней ветку "Utilities". Двойным щелчком выберите пункт "ODBC Administrator" (Рис. 3).
Теперь нам нужно сделать две вещи: "научить" программу соединяться с БД во время
выполнения и динамически создавать источник ODBC, если он по каким-то причинам отсутствует. Начнем
со второго. Откроем окно "Application Painter", перейдем в секцию объявлений и в выпадающем
списке выберем пункт "Global Variables". Объявим две глобальные переменные строкового типа:
Теперь нам нужно объявить две функции Windows API1 , с помощью которых мы сможем присвоить значения этим переменным. Для этого в секции объявлений в выпадающем списке выберем пункт "Global External Functions". Объявим функции GetSystemDirectory - получение пути к системному каталогу Windows и GetCurrentDirectory - получение пути, по которому запущено наше приложение: Сохраните сделанные изменения. Теперь напишем функцию, которая будет динамически
создавать источник ODBC, если программа его не обнаружит. Выберите в левом выпадающем списке пункт
"Functions", а в правом выпадающем списке пункт "New Function". Определим параметры
функции:
Пишем код функции:
Сохраним изменения и разберемся, как будет работать эта функция. В блоке (1) мы объявляем переменную
syskey строкового типа и переменную err целочисленного типа
длинное целое, равную нулю. В блоке (2) мы с помощью оператора Space() заполняем
глобальную переменную sysdir пробелами в количестве 255. Дальше мы вызываем
глобальную функцию Windows API GetSystemDirectory, которая возвращает в переменную
sysdir путь к системному каталогу Windows, и "дописываем" в эту переменную имя файла
драйвера, через который и происходит взаимодействие между программой и БД. В блоке (3) мы записываем в
переменную syskey имя раздела системного реестра Windows, в котором будет храниться
информация обо всех параметрах нашего источника ODBC - Mess.
В блоке (4) мы прибавляем к переменной err значения, возвращаемые оператором
RegistrySet. Этот оператор производит запись данных в системный реестр Windows.
Рассмотрим его параметры:
Перейдем к первой задаче - напишем код, который будет производить соединение с БД в момент запуска приложения. Внесем нижеприведенный код в событие Open объекта приложения (класс Application) Mess перед строчкой Open (w_main). Сохраним внесенные изменения и рассмотрим, как работает этот код. В блоке (1) мы с помощью внешней функции Windows API GetCurrentDirectory получаем в переменную curdir путь к каталогу, из которого была запущена наша программа. В блоке (2) мы заполняем свойства глобального базового объекта структуры SQLCA, которая используется для хранения информации о соединении с БД, и с помощью оператора соединения с БД connect соединяемся с БД. Обратите внимание, что сразу после оператора connect стоит точка с запятой - это синтаксис вызовов языка SQL2 в PowerBuilder. После выполнения оператора connect в свойство sqlcode объекта SQLCA возвращается код операции. В случае удачного соединения код равен нулю. В блоке (3) мы проверяем, какое значение вернулось и, если оно не равно нулю, предполагаем, что источник ODBC отсутствует или неправильно настроен. В этом случае мы вызываем нашу функцию create_dsn(), которая создает источник, и повторяем попытку соединиться с БД. В блоке (4) мы вновь проверяем, какое значение вернулось после операции соединения, и если оно вновь не равно нулю, сообщаем пользователю, что не можем соедениться с БД и часть функций программы будет недоступна.
Data Window dw_1, Command Button
cb_add ("Добавить"), Command Button cb_delete
("Удалить") и Command Button cb_cancel ("Отмена") (Рис. 5). В событие
Clicked() кнопки cb_cancel внесем код закрытия окна.
Теперь нам нужно создать объект Data Window, который мы будем использовать. Для этого через
меню "File New" открываем диалог создания объектов
и на закладке "DataWindow" выбираем иконку "Grid". Откроется окно мастера создания
DataWindow. Выбираем иконку "SQL Select" и нажимаем "Next". Откроется окно
Data Window Painter и окошко Select Tables. В нем мы выбираем таблицу нашей БД -
USERS и нажимаем "Open". Таблица откроется в области Table Layout Selection List
окна Data Window Painter в графическом представлении. Кликами мыши подсветите оба поля таблицы -
USER и COMMENT. Нажмите иконку на панели
инструментов.
Во вновь открывшемся окне мастера создания DataWindow нажмите "Next" и "Finish".
Мы вернулись в окно Data Window Painter, в область Design (Рис. 6). Итак, основа для
объекта Data Window создана, теперь нужно придать ему надлежащий внешний вид и
определить нужные нам свойства и параметры. Для начала сохраним объект под именем dw_1.
Дальше нам нужно "русифицировать" поля Data Window. Для этого по очереди выделяем их кликом мыши и
выставляем в панели инструментов шрифт MS Scan Serif. Далее переименовываем заголовки столбцов
"User" и "Comment" в "Адресат" и "Описание". Теперь идем в меню
"Rows Update properties" и в открывшемся
окне устанавливаем свойства:
Сохраним изменения. Теперь перейдем к коду события Open() окна
w_addr и внесем туда следующий код:
Теперь давайте закодируем событие Clicked() объекта
cb_delete.
Теперь пора подумать и о добавлении адресатов в БД. Для этого нам потребуется еще
одно окно. Создадим его и выставим ему следующие параметры:
Затем разместим на этом окне следующие элементы управления: 2 Static Text (st_1 и st_2), 2 Single Line Edit Control (sle_name и sle_comm), 2 Command Button (cb_ok и cb_cancel). Расположим их на окне (рис. 7) и присвоим им следующие свойства: st_1
Теперь напишем обработку событий для этого окна.
Теперь вставим вызов окна w_insert в событие Clicked() объекта
cb_add окна w_addr:
Рис. 8 Внесите в поле "Executable File Name" путь к каталогу программы и имя файла приложения. В выпадающем списке "Rebuild" выберите пункт "Full". Сохраните проект под именем "pr_message" (Рис. 8). Для компиляции исполняемого EXE - файла выберите пункт меню "Design Build Project". После выполнения этих действий в папке "c:\project\message\" появится файл mess.exe. В следующей главе мы улучшим интерфейс программы и создадим меню настроек для пользователя.
1
Windows API - Windows Application Programming Interface - специальный функционал Windows который
может быть вызван из приложения не являющегося компонентом Windows и позволяющий использовать стандартные
формы, диалоги, функции и прочие элементы операционной системы.
2 SQL - Structured Query Language - структурированный язык
запросов. Последнее обновление: 11.08.2016 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
subscribe.ru
(c)2002-2024 Ikar Ikar Home Center ICQ: 167220388 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель. |