Уважаемый посетитель! Так как в Вашем браузере запрещено использование
JavaScript для web-страниц, меню сайта Вам не доступно. Для навигации по сайту используйте
пожалуйста карту сайта.
Итак, продолжим. Для создания адресной книги, в которой мы будем хранить названия
компьютеров и комментарии к ним, нам нужно создать небольшую базу данных. Для этого мы используем файл
таблиц Dbase (*.dbf). Скачайте утилиту DBU
поместите ее в каталог C:\project\message\ и запустите. Откроется окно
C:\project\message\DBU.EXE (Рис. 1)
Рис. 1 Если при запуске программы DBU.EXE возникает ошибка, выберите пункт "Пропустить".
Нажмите F3, выберите пункт "Создать структуру", и введите название
первого поля: "USER", нажмите Enter для перехода курсора. Теперь нужно выбрать тип поля.
Для хранения строковых данных используется тип Character. Чтобы его выбрать, нажмите C
(латинская). В поле "Ширина" введите 18 - как правило, компьютеры не называют даже такими
длинными именами, поэтому нам хватит 18 символов для хранения имени компьютера. Нажмите стрелку вниз для
перехода на следующую строку. Введите: имя поля "COMMENT" - короткий комментарий к имени
компьютера, тип поля "Character", ширина поля 64 (рис. 2). Нажмите F4 и выберите
пункт "Записать структуру". Введите имя файла "USERS.DBF" и нажмите Enter 2 раза.
Рис. 2
Теперь нам нужно соединиться с базой данных (БД) в момент загрузки нашего приложения.
Для этого нам нужно создать источник данных ODBC, через драйвер которого будет происходить взаимодействие
PowerBuilder и программы с БД. Для этого на панели инструментов PowerBuilder нажмите на иконку
. В открывшемся окне "Database Profiler"
откройте ветку "ODBC", а в ней ветку "Utilities". Двойным щелчком выберите пункт
"ODBC Administrator" (Рис. 3).
В открывшемся окне на закладке "User DSN" нажмите кнопку "Add". Выберите пункт
"Microsoft dBase VFP Driver (*.dbf)" и нажмите "Ok". В поле "Data Source Name"
внесите "Mess" - это будет название нашего источника данных. В поле "Description"
внесите комментарий: "Источник данных для программы "Message"". Установите точку в поле
"Free Table Directory", а в поле "Path" внесите путь к нашей программе -
"C:\project\message\". Нажмите "Ok". Источник данных готов.
Рис. 3
Теперь нам нужно создать профиль для подключения PowerBuilder к базе данных в процессе разработки
приложения. Для этого в окне "Database Profiler" выберите пункт "ODBC" и нажмите кнопку
"New". В появившемся окне "Database Profile Setup - ODBC" на закладке "Connection"
в поле "Profile Name" внесите название профиля - "Mess". В выпадающем списке
"Data Source" выберите созданный источник ODBC - "Mess" , а в полях "User ID" и
"Password" снимите флажки (Рис. 4). Нажмите кнопку "Ok", а в окне
"Database Profiler" подсветите пункт "Mess" и нажмите кнопку "Connect". Все,
источник и профиль готовы, соединение с БД установлено, можно работать дальше.
Рис. 4
Теперь нам нужно сделать две вещи: "научить" программу соединяться с БД во время
выполнения и динамически создавать источник ODBC, если он по каким-то причинам отсутствует. Начнем
со второго. Откроем окно "Application Painter", перейдем в секцию объявлений и в выпадающем
списке выберем пункт "Global Variables". Объявим две глобальные переменные строкового типа:
В этих переменных мы будем хранить пути системного каталога Windows и нашей программы. За счет того,
что мы объявили переменные в секции глобальных переменных, они будут доступны нам из любой точки
приложения.
Теперь нам нужно объявить две функции Windows API1, с помощью которых мы сможем присвоить значения этим переменным. Для этого в секции
объявлений в выпадающем списке выберем пункт "Global External Functions". Объявим функции
GetSystemDirectory - получение пути к системному каталогу Windows и GetCurrentDirectory -
получение пути, по которому запущено наше приложение:
Сохраните сделанные изменения. Теперь напишем функцию, которая будет динамически
создавать источник ODBC, если программа его не обнаружит. Выберите в левом выпадающем списке пункт
"Functions", а в правом выпадающем списке пункт "New Function". Определим параметры
функции:
Return Type = Boolean
Function Name = Create_DSN
Пишем код функции:
Сохраним изменения и разберемся, как будет работать эта функция. В блоке (1) мы объявляем переменную
syskey строкового типа и переменную err целочисленного типа
длинное целое, равную нулю. В блоке (2) мы с помощью оператора Space() заполняем
глобальную переменную sysdir пробелами в количестве 255. Дальше мы вызываем
глобальную функцию Windows API GetSystemDirectory, которая возвращает в переменную
sysdir путь к системному каталогу Windows, и "дописываем" в эту переменную имя файла
драйвера, через который и происходит взаимодействие между программой и БД. В блоке (3) мы записываем в
переменную syskey имя раздела системного реестра Windows, в котором будет храниться
информация обо всех параметрах нашего источника ODBC - Mess.
В блоке (4) мы прибавляем к переменной err значения, возвращаемые оператором
RegistrySet. Этот оператор производит запись данных в системный реестр Windows.
Рассмотрим его параметры:
RegistrySet ( key, valuename, valuetype, value )
Key - ключ реестра в который производится запись
Valuename - имя параметра который записывается
Valuetype - тип данных параметра
Value - значение пераметра
Возвращаемые значения оператора RegistrySet это 1 в случае
удачной записи и -1 в случае ошибки.
Так как мы использовали оператор RegistrySet 11 раз, то в блоке (5) мы проверяем,
все ли 11 раз оператор вернул 1. Если это так, то функция возвращает значение true
(истина). Если же в один из вызовов произошла ошибка и оператор хотя бы один раз вернул значение -1,
то значение переменной err не будет равно 11 и функция возвращает значение
false (ложь).
Перейдем к первой задаче - напишем код, который будет производить соединение с БД
в момент запуска приложения. Внесем нижеприведенный код в событие 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) мы вновь проверяем, какое значение вернулось
после операции соединения, и если оно вновь не равно нулю, сообщаем пользователю, что не можем
соедениться с БД и часть функций программы будет недоступна.
Теперь пришла пора создать справочник адресатов. Создаем новое окно и устанавливаем ему следующие
параметры:
Title = Выбор адресатов
Window Type = popup!
Window Color = Silver
Visible
Enabled
Title Bar
Control Menu
width= 1285
height= 944
Сохраним окно под именем w_addr. На окне расположим элементы управления:
Рис. 5
Data Windowdw_1, Command Buttoncb_add ("Добавить"), Command Buttoncb_delete
("Удалить") и Command Buttoncb_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" в "Адресат" и "Описание". Теперь идем в меню
"RowsUpdate properties" и в открывшемся
окне устанавливаем свойства:
Allow Updates
Table to Updates = USERS
Key Columns
Use Update
А так же в списке полей "Updateable Columns" выбираем оба поля - USERS и COMMENT,
а в списке "Unique Key Column(s)" - только USERS. Теперь нужно установить порядок
перехода для полей USERS и COMMENT в области Detail и установить для поля
USERS свойство Protect = 1. Для этого на закладке свойств
Рис. 6
поля нажимаем на кнопку справа от свойства
Protect, и в открывшемся окне просто ставим 1 и нажимаем "Ok". Это свойство запрещает
редактирование поля, что убережет нас в будущем от случайного изменения имени компьютера в адресной
книге. Сохраняем изменения, закрываем Data Window Painter, и возвращаемся к окну
w_addr. Установим свойства элемента dw_1:
DataObject = dw_1
HscrollBar
VscrollBar
LiveScroll
Сохраним изменения. Теперь перейдем к коду события Open() окна
w_addr и внесем туда следующий код:
В первой строке мы центруем окно на экране. Во второй строке с помощью метода
SetTransObject() мы указываем DataWindow, что соединение с БД происходит через
SQLCA. В третьей строке мы с помощью метода Retrieve()
даем DataWindow команду отобразить строки, содержащиеся в БД.
Теперь давайте закодируем событие Clicked() объекта
cb_delete.
Сохраним изменения и рассмотрим работу кода. В блоке (1) определяем переменные. В строке (2)
запрашиваем у dw_1 текущую строку с помощью метода GetRow().
В строке (3) проверяем, что строка существует. Если это не так, прерываем обработку события. В строке
(4) записываем в переменную usr имя компьютера адресата которого пользователь
захотел удалить. В строке (5) мы формируем и записываем в переменную ask запрос
на подтверждение удаления записи. В строке (6) мы с помощью функции MessageBox
спрашиваем у пользователя, уверен ли он в удалении записи. Если пользователь не подтверждает удаление
(нажимает кнопку "Нет"), функция MessageBox возвращает 2 и обработка
события прерывается командой Return. Если мы попали в строку (7), значит
пользователь подтвердил удаление записи, и мы удаляем строку из dw_1 с помощью
метода DeleteRow(), указывая в качестве аргумента переменную row,
которая содержит номер удаляемой строки. Теперь нужно удалить запись непосредственно из БД.
Это мы оставляем на откуп механизму Data Window и просто даем команду на сохранение изменений методом
Update() в строке (8).
Теперь пора подумать и о добавлении адресатов в БД. Для этого нам потребуется еще
одно окно. Создадим его и выставим ему следующие параметры:
Window Type = popup!
Window Color = Silver
Visible
Enabled
Title Bar
width= 1640
height= 375
Рис. 7
Затем разместим на этом окне следующие элементы управления: 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
Text = Имя компьютера
st_2
Text = Описание
sle_name
Limit = 18 - в поле ввода можно ввести не более 18
символов.
sle_comm
Limit = 64 - в поле ввода можно ввести не более 64
символов.
cb_ok
Default
cb_cancel
Cancel
Теперь напишем обработку событий для этого окна.
Событие Open() окна:
Событие Clicked() кнопки cb_cancel:
Событие Clicked() кнопки cb_ok:
Сохраним изменения и разберем принцип работы последнего фрагмента кода.
В блоке (1) мы объявили переменные и присвоили им значения, полученные из свойства
Text полей ввода. В строке (2) мы проверяем, заполнил ли пользователь имя компьютера
адресата, а так же проверяем значение переменной на Null. Если пользователь не
заполнил поле "Имя компьютера", то скажем ему об этом. В строке (3) мы проверяем на
Null значение переменной comm. И если оно равно Null,
присваиваем ей пустую строку. В строке (4) мы обращаемся к объекту dw_1,
принадлежащего окну w_addr, и используем оператор InsertRow()
с параметром 1 для того, чтобы вставить в Data Window строку с номером 1. В строке (5) мы
вставляем в первую строку в поле "user" значение переменной usr, а в строке
(6) вставляем значение переменной comm в поле "comment". В строке (7) мы
сохраняем изменения в БД и закрываем окно в строке (7).
Теперь вставим вызов окна w_insert в событие Clicked() объекта
cb_add окна w_addr:
Осталось совсем немного. Вставим обработку в событие DoubleClicked() объекта
dw_1 окна w_addr:
Сохраним сделанные изменения и запустим программу. Теперь функционал программы готов. Программа имеет
легко редактируемую адресную книгу и отсылает сообщения адресатам в локальной сети. Интерфейс программы
конечно не образец совершенства, но он удобен, функционален и интуитивно понятен для пользователя.
Итак, можно компилировать исполняемый EXE - файл программы. Для этого через меню
"FileNew" открываем диалог создания объектов и
на закладке "Project" выберем иконку "Application". Откроется окно "Project Painter".
Рис. 8
Внесите в поле "Executable File Name" путь к каталогу программы и имя файла приложения. В
выпадающем списке "Rebuild" выберите пункт "Full". Сохраните проект под именем
"pr_message" (Рис. 8). Для компиляции исполняемого EXE - файла выберите пункт меню "DesignBuild Project". После выполнения этих действий в папке
"c:\project\message\" появится файл mess.exe.
В следующей главе мы улучшим интерфейс программы и создадим меню настроек для пользователя.
1Windows API - Windows Application Programming Interface - специальный функционал Windows который
может быть вызван из приложения не являющегося компонентом Windows и позволяющий использовать стандартные
формы, диалоги, функции и прочие элементы операционной системы. Вернуться к
тексту^
2SQL - Structured Query Language - структурированный язык
запросов. Вернуться к тексту^
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент
рекламируемых сайтов несет рекламодатель.