Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Программирование »   Pascal/Delphi »   Работа с PostgreSQL из приложения на Object Pascal.
RSS

Работа с PostgreSQL из приложения на Object Pascal.

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Модераторы: Winnowing_Raven, wsxПечать
 
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
Писака из меня не кудышный..Так что принимается только конструктивная критика.

Автор: Багаутдинов Ирек Айратович, ака wsx.
------------------------------------------------------------------------------------------------------
Работа с PostgreSQL из приложения на Object Pascal (IDE: Delphi).

Тяжела работа российских администраторов: приходится выполнять самые разнообразные функции: администрировать сервера, сети, базы данных, разрабатывать приложения. В ходе такой работы у меня возникла задача реализации учёта компьютерного оборудования.



В частности, требовалось следующее:

1. Разработать «персональные карточки компьютеров»
2. Приход, списание оборудования на склад.
3. Использование оборудование со склада.


Вообще-то так получилось, что я – любитель баз данных, в особенности PostgreSQL.

Поэтому в своей разработке я использовал:
· Delphi 7 Personal
· PostgreSQL 8.0
· PostgresDAC 2.2.1

Что же собой представляет продукт «PostgresDAC»? PostgresDAC - является компонентом, способным работать на прямую с базой данных PostgreSQL. Данный продукт разработан и поддерживается MicroOLAP Technologies LTD. На их сайте также можно найти немало других интересных и полезных продуктов, связанных не только с базами данных: приложения для наблюдения за состоянием сети, «дизайнеры» карт баз данных, менеджеры данных для управления итд..

Так как рассматриваемая разработка не является коммерческой, и предназначалась только для использования в нашем малом офисе, я использовал Trial версию продукта. Особенности Trial лицензии:

· При подключении к базе данных появляется окошечко о разработчиках и сайте продукта.
· Закрытый исходный код.

В остальном компонент не отличается от коммерческих версий. Важно отметить, что работает он стабильно и быстро.

Ну что же, самое время запастись кружечкой кофе и начать работу над нашим приложением. Для начала следует разработать концепцию приложения, спроектировать базу данных и приступить к разработке.

Концепция.



Рассмотрим более подробно.



Разработка персональных карточек компьютеров

Что же такое «Персональная карточка компьютера»? Это личная карточка «болезней» каждого офисного компьютера, которая включает в себя характеристики оборудования, используемое программное обеспечение, данные по настройки сети, информацию о проведении профилактических работ, а так же дополнительные заметки.





Учет прихода и списания оборудования на склад.

Так как оборудование часто выходит из строя, организация закупает детали для «быстрой замены», а также списывает на склад морально устаревшее железо. Эту информацию необходимо фиксировать в разрабатываемом приложении.



Использование оборудование со склада.

Нам также может потребоваться фиксировать информацию об использовании оборудование со склада. Кому, когда и зачем было передано.



Само оборудование следует классифицировать для облегчения дальнейшей работы с приложением. Классы оборудования предлагается сделать динамическими, для дальнейшей маштабируемости.

Так же не стоит забывать и о программном обеспечении, установленном на компьютерах. Сведения о нем мы тоже будем заносить в базу данных.



У оборудования должны быть статусы: устаревшее, не рабочее, резерв, новое.

А так же sub-статусы: на складе, используется.



Очень важный момент – это представлять в чьём же распоряжении находится то или иное устройство.



Мы мысленно можем представить «дерево представления объектов данных» в приложении:


-Карточки компьютера.



        --Карта№1



     -Программное обеспечение



     -Профилактические работы



     -Пользователи



        --Карта№2



     -Программное обеспечение



     -Профилактические работы



     -Пользователи



        --…



        --Карта№N



     -Программное обеспечение



     -Профилактические работы



     -Пользователи







-Оборудование



   -Классы оборудования.



        -Видео карты



            --Riva TNT2



            --Nvidia GeForce4 mx440



        -Оперативная память



            --512DDR2



            --8mb SIM



        -Мониторы



            --Samsung Sync Master 765mb



        -RAID контроллеры





Более-менее определившись с концепцией и задачами, можно приступать к разработке структуры базы данных.


Я предлагаю использовать следующую структуру БД:



CREATE TABLE devices(



id                                SERIAL NOT NULL,



PRIMARY KEY(id),



device_name               VARCHAR(255) NOT NULL,



sn                                VARCHAR(50) NOT NULL,



device_group_id          INT NOT NULL,



device_descr                VARCHAR(500) NOT NULL,



status_str                      VARCHAR(10) NOT NULL DEFAULT ‘new’,



wh_status_str                INT(1) NOT NULL DEFAULT 0,



comp_card_id  INT NOT NULL,



user_id                         INT NOT NULL,



incoming_date  DATE NOT NULL,



modification_date          DATE NOT NULL,



brake_date                   DATE NOT NULL);











CREATE TABLE devices_groups(



id                                 SERIAL NOT NULL,



PRIMARY KEY(id),



group_name                  VARCHAR(255) NOT NULL,



group_descr               VARCHAR(500) NOT NULL,



last_incoming_date   DATE NOT NULL,



dg_status                     INT(1) NOT NULL DEFAULT 1);







CREATE TABLE comp_cards(



id                                 SERIAL NOT NULL,



user_id                        INT NOT NULL,



ip_addr                        INET NOT NULL,



net_mask                     INET NOT NULL,



dns1                            INET NOT NULL,



dns2                            INET NOT NULL,



domain_controller        VARCHAR(255) NOT NULL,



computer_name           VARCHAR(100) NOT NULL,



mac_address  



gateway                       INET NOT NULL,



rescue_system VARCHAR(255) NOT NULL);



*По своему желанию вы можете добавить поля с данными о proxy сервере или VPN если используете таковые.











CREATE TABLE users(



id                                 SERIAL NOT NULL,



PRIMARY KEY(id),



first_name                    VARCHAR(255) NOT NULL,



last_name                    VARCHAR(255) NOT NULL,



patronymic                   VARCHAR(255) NOT NULL,



position                        VARCHAR(255) NOT NULL,



phone_num                  BIGINT NOT NULL,



status               INT(1) NOT NULL DEFAULT 1);











































CREATE TABLE card_links(



            id                                 SERIAL NOT NULL,



            PRIMARY KEY(id),



            card_id                        INT NOT NULL,



            device_group_id          INT NOT NULL,



            device_id                     INT NOT NULL);







CREATE TABLE soft_links(



            id                                 SERIAL NOT NULL,



            PRIMARY KEY(id),



soft_id                         INT NOT NULL,



card_id                        INT NOT NULL);







CREATE TABLE works_links(



            id                                 SERIAL NOT NULL,



            PRIMARY KEY(id),



            work_id                       INT NOT NULL,



            card_id                        INT NOT NULL);







CREATE TABLE soft(



            id                                 SERIAL NOT NULL,



            PRIMARY KEY(id),



            soft_name                    VARCHAR(255) NOT NULL,



            soft_descr                    VARCHAR(400) NOT NULL,



            soft_version                 VARCHAR(15) NOT NULL



            default_path                 VARCHAR(500) NOT NULL);







CREATE TABLE works(



            id                                 SERIAL NOT NULL,



            PRIMARY KEY(id),



            work_name                 VARCHAR(255) NOT NULL,          



            work_descr                 VARCHAR(500) NOT NULL,



            work_reason               VARCHAR(500) NOT NULL,



            work_date                   DATE NOT NULL);




Определившись со структурой базы данных мы можем переходить к процессу разработки. Для начала мы научимся производить основные операции, с СУБД используя PostgresDAC.

Создадим в среде Delphi новый проект. Далее, для удобства, я предлагаю вынести все объекты, которые напрямую связаны работой с СУБД в Data Module.

Сама установка компонента PostgresDAC – предельно проста и по этой причине я не буду её описывать в данной статье.



Начнём с подготовки компонентов к работе с базой данных.



Как видно из рисунка, на начальном этапе, я расположил в DataModule два объекта – TPSQLDatabase и TPSQLQuery.

Объекту TPSQLDatabase я назначил имя db, в объекту TPSQLQuery – query.

Хотелось бы поговорить подробнее об их свойствах.




Поле «Connected» принимает значение типа Boolean –True или False.

В поле «DatabaseName» следует указать имя базы данных, с которой мы будем работать.

В поле «Host» следует указать ip адрес или имя сервера, на котором располагается СУБД.

В поля «UserName» и «UserPassword» заносятся данные для авторизации на сервере. Соответственно имя пользователя и пароль пользователя, которые будут использованы для подключения и работы с БД.

В свойство «Params» можно занести дополнительные значения, если таковые требуются.



Указав все требуемые настройки, можно задать свойству «Connected» значение «true». Этим действием мы выполним соединение с СУБД.



Теперь я предлагаю вынести настройки подключения в отдельный конфигурационный файл. Эксперимента ради, будем использовать не обычный классический ini файл, а файл формата XML.


Создадим в текстовом редакторе файл с подобным содержанием и сохраним его в файл config.xml



<?xml version="1.0" encoding="UTF-8" standalone="yes"?>



<Config>



   <DataBase>



     <DBname>warehouse</DBname>



     <DBUser>MYCOOLUSER</DBUser>



     <DBHost>database</DBHost>



     <DBPass>MYCOOLPASS</DBPass>



</DataBase>



</Config>





Дальше, нам потребуется компонент, из закладки «Internet», XMLDocument. Его можно расположить на главное форме, или же вынести в отдельный модуль, для строгого разделения кода программы. Я же, для быстроты, вынес этот компонент на главную форму.



Следует задать свойства для полей DOMVendor и Name.

В качестве DOMVendor я выбрал OpenXML, а поле name приобрело значение XML.

Создадим процедуру, которая будет выполнять «прогрузку» конфигурации.



procedure LoadConfig();



var



XMLNode : IXMLNode;



begin



mainfrm.XML.FileName:='config.xml';



  mainfrm.XML.Active:=true;



XMLNode := mainfrm.XML.DocumentElement.ChildNodes[0];



  with dbModule do begin



    db.Host         := trim(XMLNode.ChildNodes['DBHost'].Text);



    db.UserName     := trim(XMLNode.ChildNodes['DBUser'].Text);



    db.UserPassword := trim(XMLNode.ChildNodes['DBPass'].Text);



    db.DatabaseName := trim(XMLNode.ChildNodes['DBname'].Text);



  end;



dbModule.db.Connected:=true;   //Устанавливаем соединение с СУБД.



end;



Теперь, после «прогрузки» конфигурационного файла, мы установим соединение с СУБД.

Далее следует продумать удобный для использования интерфейс. К сожалению я не обладаю даром делать вещи удобными. Так что у меня получилось что-то вроде:




На данной форме, мною использовались:

TDBGrid, TGroupBox, TSpeedButton, TPageControl, TMainMenu.

А так же DBNavigator для каждого DBGrid.

Вот здесь то нам и понадобиться компонент типа TPSQLTable. Он будет выступать в роли DataSet.

В поле «Database» следует выбрать имя компонента класса TPSQLDatabase.

Далее следует выбрать Table Name, если PSQDatabase уже настроен и подключен к базе данных, то появится список доступных таблиц.



На этом первая часть статьи закончена.

Полезные ссылки:

http://www.microolap.com/
http://www.sql.ru
http://www.postgresql.org
http://www.openproj.ru
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
я не понял, а где "ам/кг", "убей сибя ап стену" и "выпий яду" ?
Где каменты ?
zair
Новичок


Всего сообщений: 1
Рейтинг пользователя: 0





Дата регистрации на форуме:
30 июля 2006
Аффтар! Ты гений!!!
Бл@ я на основе твоей подачи сваял собственную прогу, на выделенном UNIX сервере с PostgreSQL 8.1.3
По твоей статье сделал свою тестовую базу и сейчас ее наполняю техникой, ну и гоняю в хвост и в гриву. Короче Постгрес - это то что нужно. Буду переводить на нее учреждение с кучей баз данных. Все давно говорят что лучшего решения нет либо Oracle либо Postgresql. Oracle под юникс работает хреново, только под Линуксятину, а портировать ее на Free или Net BSD - мучались мучались - гимор один, да и платить за него надо если по правильному.
Что могу сказать...
Есть уже зарегистрированные компоненты PgDAC, если нужно - пиши.
Есть вопрос по обработке исключений, не совсем отработал процесс с ошибками подключения, если база недоступна - вываливается прога, нужно как то ловить ошибки - если опишешь решение не надо будет искать коды :)

В общем вот такие пироги...


---
------------------------
Нунетууменяподписи
wsx
Модератор раздела
Юниксойд, сетевик
wsx
Откуда: Казань
Всего сообщений: 1074
Рейтинг пользователя: 28

Репутация пользователя: 1




Дата регистрации на форуме:
14 янв. 2005
С обработкой ошибок и ексепшенов разных - я вроде разобрался. Так что если сорки свои найду, то может и опишу.
Рад, что хоть кому то помог.
Кстати говоря есть ещё одна СУБД - DB2 от АйБиЭма, но она тоже комерческая.

з.ы. Зареганный постгресдак у меня тоже есть.
canada
Новичок


Всего сообщений: 1
Рейтинг пользователя: 0





Дата регистрации на форуме:
12 июля 2009
Статья до сих пор актуальна! (несмотря на дату написания) !!! Спасибо автору!

Только вот непонятно: где продолжение?

Просим! Просим! .... :biggrin
<<Назад  Вперед>>Модераторы: Winnowing_Raven, wsxПечать
Объединенный Открытый Проект »   Программирование »   Pascal/Delphi »   Работа с PostgreSQL из приложения на Object Pascal.
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0697. Количество выполненных запросов: 19, время выполнения запросов 0.0260