Уважаемый посетитель!
Так как в Вашем браузере запрещено использование JavaScript для web-страниц, меню сайта Вам не доступно.
Для навигации по сайту используйте пожалуйста карту сайта.

Сделать стартовой Добавить в избранное Обратная связь

партнеры

SQL.RU

Детский Дворик - Портал детских фотографий

ГавГав.Инфо - портал для собаководов-любителей и профессиональных кинологов

информация

реклама

Скачать RAR архив. 135Kb
« Глава 1 Оглавление Глава 3 »

Глава 2
пишем первую программу (продолжение)

Итак, продолжим. Для создания адресной книги, в которой мы будем хранить названия компьютеров и комментарии к ним, нам нужно создать небольшую базу данных. Для этого мы используем файл таблиц 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 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" и в открывшемся окне устанавливаем свойства:

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:

Вставим вызов окна w_addr в событие Clicked() кнопки cb_user окна w_main.

Сохраним сделанные изменения и запустим программу. Теперь функционал программы готов. Программа имеет легко редактируемую адресную книгу и отсылает сообщения адресатам в локальной сети. Интерфейс программы конечно не образец совершенства, но он удобен, функционален и интуитивно понятен для пользователя. Итак, можно компилировать исполняемый EXE - файл программы. Для этого через меню "File New" открываем диалог создания объектов и на закладке "Project" выберем иконку "Application". Откроется окно "Project Painter".


Рис. 8

Внесите в поле "Executable File Name" путь к каталогу программы и имя файла приложения. В выпадающем списке "Rebuild" выберите пункт "Full". Сохраните проект под именем "pr_message" (Рис. 8). Для компиляции исполняемого EXE - файла выберите пункт меню "Design Build Project". После выполнения этих действий в папке "c:\project\message\" появится файл mess.exe.

В следующей главе мы улучшим интерфейс программы и создадим меню настроек для пользователя.

06 августа 2003 г.

IKAR,
Программист-разработчик
PowerBuilder.
Ikar Home Center
GSS,
Программист-разработчик
PowerBuilder.
gss_work@zmail.ru


1 Windows API - Windows Application Programming Interface - специальный функционал Windows который может быть вызван из приложения не являющегося компонентом Windows и позволяющий использовать стандартные формы, диалоги, функции и прочие элементы операционной системы.
Вернуться к тексту^

2 SQL - Structured Query Language - структурированный язык запросов.
Вернуться к тексту^



Последнее обновление: 11.08.2016
реклама
ссылки


Продвижение сайтов
subscribe.ru
Биржа ссылок

статистика

Яндекс цитирования

subscribe.ru (c)2002-2024 Ikar
Ikar Home Center
ICQ: 167220388
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель.
hosted on pets-tree
.