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

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

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

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



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

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

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

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

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




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


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





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

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


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

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




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

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


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





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

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

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


Время выполнения скрипта: 0.7623. Количество выполненных запросов: 18, время выполнения запросов 0.2499
Rambler's Top100