Домашен център Икар
Глава 2 написване на първата програма (продължение)


Сега трябва да се свържем с базата данни (DB) в момента на зареждане на нашето приложение. За да направим това, трябва да създадем ODBC източник на данни, чрез драйвера на който PowerBuilder и програмата ще взаимодействат с базата данни. За да направите това, щракнете върху иконата в лентата с инструменти на PowerBuilder. В прозореца "Database Profiler", който се отваря, отворете клона "ODBC", а в него клона "Utilities". Щракнете два пъти върху „ODBC Administrator“ (Фигура 3).

Сега трябва да създадем профил, за да свържем PowerBuilder с базата данни, докато разработваме приложението. За да направите това, в прозореца "Database Profiler" изберете "ODBC" и щракнете върху бутона "New". В прозореца "Настройка на профил на база данни - ODBC", който се показва, в раздела "Връзка", в полето "Име на профила" въведете името на профила - "Бъркотия". В падащия списък "Източник на данни" изберете създадения ODBC източник - "Бъркотия" и махнете отметките в полетата "Потребителско име" и "Парола" (фиг. 4). Щракнете върху бутона Ok и в прозореца Database Profiler маркирайте елемента Mess и щракнете върху бутона Connect. Всичко, източникът и профилът са готови, връзката с базата данни е установена, можете да продължите да работите.

Запазете промените си. Сега нека напишем функция, която динамично ще създаде ODBC източник, ако програмата не го намери. Изберете „Функции“ от левия падащ списък и „Нова функция“ от десния падащ списък. Нека дефинираме параметрите на функцията:
ReturnType = Boolean | |
Име на функция = Create_DSN |
Нека запазим промените и да видим как ще работи тази функция. В блок (1) декларираме променлива syskey от тип низ и променлива err тип integer, дълго цяло число, равно на нула. В блок (2) използваме оператора Space(), за да запълним глобалната променлива sysdir с 255 интервала. След това извикваме глобалната Windows API функция GetSystemDirectory , която връща пътя до системната директория на Windows към променливата sysdir и "добавяме" към тази променлива името на файла на драйвера, чрез който се осъществява взаимодействието между програмата и базата данни. В блок (3) записваме в променливата syskey името на раздела на системния регистър на Windows, който ще съхранява информация за всички параметри на нашия ODBC източник - Mess. В блок (4) добавяме към променливата err стойностите, върнати от оператора RegistrySet. Този оператор записва данни в системния регистър на Windows. Нека разгледаме неговите параметри: Тъй като използвахме оператора RegistrySet 11 пъти, в блок (5) проверяваме дали операторът е върнал 111 пъти.Ако е така, функцията връща true. Ако възникне грешка в едно от извикванията и операторът върна стойността -1 поне веднъж, тогава стойността на променливата err няма да бъде равна на 11 и функцията връща стойността false (false).
Да преминем към първата задача – да напишем кода, който ще се свърже с базата данни в момента на стартиране на приложението. Нека добавим кода по-долу към събитието Open на обекта на приложението (клас на приложение) Mess преди реда Open (w_main). Нека запазим промените и да видим как работи този код. В блок (1), използвайки външната функция на Windows API GetCurrentDirectory, получаваме пътя до директорията, от която е стартирана нашата програма в променливата curdir. блокиран (2)попълваме свойствата на глобалния базов обект на структурата SQLCA, който се използва за съхраняване на информация за връзката с базата данни, и използваме оператора за свързване на връзка с база данни, за да се свържем с базата данни. Обърнете внимание, че точката и запетая непосредствено след оператора за свързване е синтаксисът за извикване на езика SQL 2 в PowerBuilder. След като операторът за свързване се изпълни, кодът на операцията се връща към свойството sqlcode на SQLCA обекта. При успешна връзка кодът е нула. В блок (3) проверяваме каква стойност е върната и ако е различна от нула, приемаме, че ODBC източникът липсва или е неправилно конфигуриран. В този случай извикваме функцията create_dsn(), която създава източника и се опитваме да се свържем отново с базата данни. В блок (4) отново проверяваме каква стойност е върната след операцията за свързване и ако тя отново е различна от нула, информираме потребителя, че не можем да се свържем с базата данни и някои от функциите на програмата ще бъдат недостъпни.

Прозорец с данни dw_1, команден бутон cb_add ("Добавяне"), команден бутон cb_delete ("Изтриване") и команден бутон cb_cancel ("Отказ") (Фигура 5). В събитието Clicked() на бутона cb_cancel добавете кода за затваряне на прозореца.
Сега трябва да създадем обекта Data Window, който ще използваме. За да направите това, от менюто "Нов файл" отворете диалоговия прозорец за създаване на обект и в раздела "DataWindow" изберете иконата "Мрежа". Отваря се прозорецът на съветника за създаване на DataWindow. Изберете иконата "SQL Select" и щракнете върху "Next". Ще се отворят прозорецът Data Window Painter и прозорецът Select Tables. В него избираме нашата таблица с база данни - ПОТРЕБИТЕЛИ и натискаме "Отвори". Таблицата се отваря в областта Списък за избор на оформление на таблица на Painter на прозореца с данни в графичен изглед. С кликване на мишката маркирайте и двете полета на таблицата - ПОТРЕБИТЕЛ и КОМЕНТАР.Щракнете върху иконата в лентата с инструменти. В новоотворения съветник DataWindow щракнете върху Напред и Край. Върнахме се в Data Window Painter, в областта Design (фиг. 6). И така, основата за обекта Data Window е създадена, сега трябва да му дадем правилния външен вид и да дефинираме свойствата и параметрите, от които се нуждаем. Първо, нека запазим обекта като dw_1. След това трябва да "русифицираме" полетата на прозореца с данни. За да направите това, изберете ги един по един с щракване на мишката и задайте шрифта MS Scan Serif в лентата с инструменти. След това преименувайте заглавията на колоните „Потребител“ и „Коментар“ на „Дестинация“ и „Описание“. Сега отидете в менюто „Свойства за актуализиране на редове“ и задайте свойствата в прозореца, който се отваря:
DataObject = dw_1 | |
hscrollbar | |
VscrollBar | |
превъртане на живо |
Нека запазим промените. Сега нека да преминем към кода на събитието Open() на прозореца w_addr и да добавим следния код там:
В първия ред центрираме прозореца на екрана. Във втория ред, използвайки метода SetTransObject(), казваме на DataWindow, че връзката към базата данни е чрез SQLCA. В третия ред използваме метода Retrieve(), за да инструктираме DataWindow да показва редовете, съдържащи се в базата данни.
Сега нека кодираме събитието Clicked() на обекта cb_delete.
WindowType = изскачащ прозорец! | |
Цвят на прозореца=сребрист | |
видими | |
Активирано | |
заглавна лента | |
w > | |
височина = 375 |
st_1
Текст = име на компютър |
Текст = Описание |
Лимит = 18 - в полето за въвеждане могат да се въвеждат не повече от 18 символа. |
Лимит = 64 - в полето за въвеждане могат да се въвеждат не повече от 64 символа. |
По подразбиране |
Отказ |
Сега нека напишем обработка на събития за този прозорец. Събитие 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.

В следващата глава ще подобрим интерфейса на програмата и ще създадем меню с настройки за потребителя.
IKAR, Програмист-разработчик PowerBuilder. Хоум център Икар | GSS, Програмист-разработчик PowerBuilder. [email protected] |
1 Windows API - Windows Application Programming Interface - специаленфункционалност на Windows, която може да бъде извикана от приложение, различно от Windows, което позволява използването на стандартни формуляри, диалогови прозорци, функции и други елементи на операционната система. Назад към текста^
2 SQL - Structured Query Language - структуриран език за заявки. Назад към текста^