Разработка тестового проекта велась на IDE Lazarus версии 3.6, а PostgreSQL использовалась 16 версии. Разумеется оба пакета являются 64-разрядными. При разработке в Linux потребуется установка зависимостей для разработки в связке с СУБД PostgreSQL.
Итак, на повестке этой пятницы PostgreSQL и IDE Lazarus. Попробуем подключиться к базе данных postgres и запросить из неё данные. Например, спросим у базы данных какой порт прослушивается СУБД и получим его описание. Оговорюсь, что я не подключал никаких дополнительных модулей, не занимался внедрением экстравагантных пакетов и пересборкой IDE, а просто кинул на форму изкоробочный компонент TPQConnection и понеслось.
Прежде всего, методом исключения, я определил перечень необходимых динамических библиотечек, которые нам потребуются для работы с PostgreSQL 16:
libcrypto-3-x64.dll libiconv-2.dll libintl-9.dll libpq.dll libssl-3-x64.dll libwinpthread-1.dll
Их необходимо разместить в папке с проектом, иначе чуда не произойдёт. Библиотеки зазипую и выложу отдельным архивом.
Для тестового проекта ограничимся одной формой, тремя компонентами и двумя процедурами. Бросаем на форму вот эти штуки:

Кто есть кто, указано здесь:
postgre:=TPQConnection.Create(nil); query:=TSQLQuery.Create(nil); transaction:=TSQLTransaction.Create(nil);
Я умышленно обозвал компонент TPQConnection — postgre, чтобы не запутаться в процессе написания кода. Мне ещё предстояло нагородить комментариев, так что решил начать с минимализма.
Основной модуль проекта в редакторе исходного кода выглядит так:
unit postgretest_unit;
{$mode objfpc}{$H+}
interface
uses
SysUtils,
PQConnection,
SQLDB,
Forms,
Graphics,
Dialogs;
type
{ TForm1 }
TForm1 = class(TForm)
// Объекты
postgre: TPQConnection;
query: TSQLQuery;
transaction: TSQLTransaction;
// Процедуры
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
// Создание формы
procedure TForm1.FormCreate(Sender: TObject);
var
// Переменная для получения порта
PortValue: string;
// Переменная для описания
DescriptionValue: string;
// Переменная для запроса
SQLQuery: string;
begin
// Создаём объекты
postgre:=TPQConnection.Create(nil);
query:=TSQLQuery.Create(nil);
transaction:=TSQLTransaction.Create(nil);
try
// Запрос
SQLQuery:='SELECT setting, short_desc FROM pg_settings WHERE name = ''port''';
// Настройка соединения
postgre.HostName:='localhost';
postgre.DatabaseName:='postgres';
postgre.UserName:='postgres';
postgre.Password:='VeryStrongPassword';
postgre.Params.Values['port']:='5432';
postgre.Transaction:=transaction;
transaction.DataBase:=postgre;
query.DataBase:=postgre;
postgre.Open;
// Подключаемся к базе данных
if postgre.Connected then
begin
// Выведем сообщение об успешном подключении
ShowMessage('Подключено!');
// Покрасим форму в лаймовый цвет
Self.Color:=clLime;
// Зададим заголовок формы
Self.Caption:='Успешно подключились к ' + postgre.DatabaseName;
// Начало транзакции
transaction.StartTransaction;
try
// Текст запроса
query.SQL.Text:=SQLQuery;
// Выполнение запроса
query.Open;
// Проверка результата
if not query.IsEmpty then
begin
// Получение значений
PortValue:=query.FieldByName('setting').AsString;
DescriptionValue:=query.FieldByName('short_desc').AsString;
// Вывод сообщения с результатом запроса
ShowMessage('Значение порта: ' + PortValue
+ sLineBreak +
'Описание: ' + DescriptionValue);
end
else ShowMessage('Результаты запроса пусты.');
// Завершение транзакции
transaction.Commit;
except
on E: Exception do
begin
// Откат транзакции в случае ошибки
transaction.Rollback;
// Вывод сообщения об ошибке
ShowMessage('Ошибка: ' + E.Message);
end;
end;
end
else ShowMessage('Не удалось подключиться к базе данных.');
except
on E:Exception do ShowMessage('Ошибка подключения: ' + E.Message);
end;
end;
// Закрытие формы и освобождение ресурсов
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
query.Free;
transaction.Free;
postgre.Close();
postgre.Free;
end;
end.
Если уточнить настройки соединения, согласно Вашему окружению, и запустить проект — то можно полюбоваться на такое окошко:

После нажатия на ОК получим другое окно с данными о текущем порте СУБД:

Вновь ОК и получим форму, залитую лаймовым цветом, как указано здесь:
// Покрасим форму в лаймовый цвет Self.Color:=clLime;
По сути дела, это вся наука базового подключения к серверу баз данных PostgreSQL. Осталось только доработать код под Ваши потребности: вынести что-то в отдельные функции, добавить метод освобождения ресурсов, проверку пустоты запросов и добавить щепотку магии транзакций.