Ikar Home Center

Розділ 2 пишемо першу програму (продовження)

center
Мал. 1 Якщо при запуску програми DBU.EXE виникає помилка, виберіть "Пропустити".

center
Мал. 2

Тепер нам потрібно з'єднатися з базою даних (БД) у момент завантаження нашої програми. Для цього нам потрібно створити джерело даних ODBC, через драйвер якого відбуватиметься взаємодія PowerBuilder та програми з БД. Для цього на панелі інструментів PowerBuilder натисніть . У вікні "Database Profiler" відкрийте гілку "ODBC", а в ній гілку "Utilities". Подвійним клацанням виберіть " ODBC Administrator " (Мал. 3).

home
Мал. 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 " . Все, джерело та профіль готові, з'єднання з БД встановлено, можна працювати далі.

ikar
Мал. 4

Збережіть зміни. Тепер напишемо функцію, яка динамічно створюватиме джерело 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 11 разів, то в блоці (5) ми перевіряємо, чи всі 11 разів оператор повернув 1. Якщо це так, то функція повертає значення true (істина). Якщо ж в один із викликів відбулася помилка і оператор хоча б один раз повернув значення -1, то змінна err не буде дорівнює 11 і функція повертає значення false (брехня).

Перейдемо до першого завдання - напишемо код, який буде з'єднуватися з БД в момент запуску програми. Внесемо нижченаведений код у подію Open об'єкта програми (клас Application) Mess перед рядком Open (w_main). Збережемо внесені зміни та розглянемо, як працює цей код. У блоці (1) ми за допомогою зовнішньої функції Windows API GetCurrentDirectory отримуємо в змінну curdir шлях до каталогу, з якого було запущено нашу програму. У блоці (2)ми заповнюємо властивості глобального базового об'єкта структури SQLCA, яка використовується для зберігання інформації про з'єднання з БД, та за допомогою оператора з'єднання з БД connect з'єднуємося з БД. Зверніть увагу, що відразу після оператора connect стоїть крапка з комою - це синтаксис викликів мови SQL 2 PowerBuilder. Після виконання оператора connect у властивості sqlcode об'єкта SQLCA повертається код операції. У разі успішного з'єднання код дорівнює нулю. У блоці (3) ми перевіряємо, яке значення повернулося і якщо воно не дорівнює нулю, припускаємо, що джерело ODBC відсутнє або неправильно налаштоване. У цьому випадку ми викликаємо нашу функцію create_dsn() , яка створює джерело, і повторюємо спробу з'єднатися з базою даних. У блоці (4) ми знову перевіряємо, яке значення повернулося після операції з'єднання, і якщо воно знову не рівне нулю, повідомляємо користувачеві, що не можемо з'єднатися з БД і частина функцій програми буде недоступна.

home
Мал. 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" і у вікні встановлюємо властивості:

DataObject = dw_1
HscrollBar
VscrollBar
LiveScroll

Збережемо зміни. Тепер перейдемо до коду події Open() вікна w_addr і внесемо туди наступний код:

У першому рядку ми центруємо вікно на екрані. У другому рядку за допомогою методу SetTransObject() ми вказуємо DataWindow, що з'єднання з базою даних відбувається через SQLCA . У третьому рядку ми з допомогою методу Retrieve() даємо DataWindow команду відобразити рядки, які у БД.

Тепер закодуємо подію Clicked() об'єкта cb_delete .

Window Type = popup!
Window Color = Silver
Visible
Enabled
Title Bar
w >
height = 375
Мал. 7Потім розмістимо на цьому вікні такі елементи управління: 2 Static Text ( st_1 і st_2 ), 2 Single LineEdit 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 :

Тепер вставимо виклик вікна w_insert у подію Clicked() об'єкта cb_add вікна w_addr :

Залишилось зовсім небагато. Вставимо обробку в подію DoubleClicked() об'єкта dw_1 вікна w_addr :

Вставимо виклик вікна w_addr у подію Clicked() кнопки cb_user вікна w_main .

home
Мал. 8 Внесіть у поле " Executable File Name " шлях до каталогу програми та ім'я файлу програми. У списку "Rebuild" виберіть пункт "Full". Збережіть проект під назвою " pr_message " (Мал. 8). Для компіляції виконуваного EXE-файлу виберіть пункт меню "Design Build Project". Після виконання цих дій у папці "c:\project\message\" з'явиться файл mess.exe.

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

IKAR, Програміст-розробник PowerBuilder. Ikar Home CenterGSS, Програміст-розробник PowerBuilder. [email protected]

1 Windows API - Windows Application Programming Interface - спеціальнийфункціонал Windows, який може бути викликаний з програми, що не є компонентом Windows і дозволяє використовувати стандартні форми, діалоги, функції та інші елементи операційної системи. Повернутись до тексту^

2 SQL - Structured Query Language - структурована мова запитів. Повернутись до тексту^