Страницы

29 октября 2012 г.

PostgreSQL. Переменные внутри триггерных функций.

Доброго времени суток.

       Решил законспектировать некоторую информацию о данных доступных при написании триггеров PostgreSQL.
       Во время работы триггера, в контексте  функции автоматически создаются переменные которые содержат очень полезные данные данные:
  • NEW.  Тип - RECORD. Содержит значения стобцов ТЕКУЩЕЙ записи таблицы при выполнении операций INSERT/UPDATE;

  • OLD. Тип - RECORD. Содержит значения стобцов ТЕКУЩЕЙ записи таблицы при выполнении операций UPDATE/DELETE;

  • TG_NAME. Тип - NAME.Содержит имя запущенного триггера;

  • TG_WHEN. Тип - TEXT. Содержит строку "BEFORE" или "AFTER", в зависимости от режима срабатывания триггера;

  • TG_OP. Тип - TEXT. Содержит строку "INSERT", "UPDATE" или "DELETE", в зависимости от оператора который вызвал выполнение триггера;

  • TG_TABLE_NAME. Тип - NAME. Содержит имя таблицы к которой была применена операция вызвавщая текущий тириггер;

  • TG_TABLE_SCHEMA. Тип - NAME. Содержит имя схемы которой принадлежит таблица описанная в предидущем пункте;

Полный список переменных, описания, и примеры можно увидеть в официальном мануале.

16 октября 2012 г.

Delphi. Ошибка: Ancestor for 'Component' not found.

Доброго времени суток.
       При запуске приложения, и при построении формы, содержащей какой-либо фрейм, может появляться ошибка "Ancestor for 'Component' not found" (где Component - имя компонента).
Эта ошибка появляется если Вы переименовали компонент на фрейме, но в на форме, которая содержит фрейм компонент прописан со старым именем. Нужно просто указать одинаковые имена компонентов в родителе и наследнике.

P.S. Многократно видел в интернете обсуждение аналогичных проблем. Надеюсь кому-то пригодится данный пост.

9 октября 2012 г.

ZeosLib. Транзакции. Ошибка: invalid operation in non AutoCommit mode

Еще раз Здравствуйте.
       Наткнулся на ошибку "invalid operation in non AutoCommit mode" при выполнении ZConnection.StartTransaction.
       В zeos-компонентах управление транзакциями производится из объекта класса TZConnection. В этом классе есть свойство AutoCommit:boolean, а так же методы StartTransaction, Commit, Rollback.
       Я думал, что когда используется StartTransaction..Commit/Rollback, AutoCommit должен быть FALSE. Ибо если логически подумать, то зачем нам автоматический коммит, если мы управляем транзакциями вручную.
Оказывается немного не так... StartTransaction НЕ будет работать если AutoCommit = false.
       Если AutoCommit = true, тогда транзакции фиксируются после каждого корректно завершенного SQL-оператора, а StartTransaction позволяет отменить автоматическое фиксирование и управлять транзакцией вручную. При AutoCommit = false - изменения не будут фиксироваться в базу вообще, следовательно команду StartTransaction вызывать бесполезно.

p.s.
Код метода который генерирует указанное в сабже исключение:
procedure TZConnection.CheckAutoCommitMode;
begin
  if not FAutoCommit and (FExplicitTransactionCounter = 0) then
    raise EZDatabaseError.Create(SInvalidOpInNonAutoCommit);
end;

8 октября 2012 г.

PostgreSQL. Склеиваем дату и время в SQL запросе.

Hello World.
Сегодня понадобилось склеить дату и время находящиеся в разных столбцах вместе, и поместить в третий результирующий столбец.
Функций для этой операции я не нашел, поэтому пришлось экспериментировать.
Представим, что есть таблица с полями:
create table test (
field_date date, 
field_time time without time zone,
field_result timestamp without time zone) 

Предположим, что первые две колонки таблицы заполненны датами и значениями времени. Далее, чтобы заполнить третий столбец совмещенными значениями даты и времени из двух предидущих столбцов, пишем update:
update test set
field_result = (field_date::date||' '||field_time::time without time zone)::timestamp without time zone

Все, проверяем результат...

3 октября 2012 г.

Delphi XE2. FastReport. Fail с экспортом.

       Друзья мои, сразу после того как вы увидите в стандартной поставке Delphi XE2 копмоненты FastReport 4, и бесконечно обрадовавшись начнете ваять на их базе какую-нибудь серьезную подсистему отчетности - загляните по ссылке: http://www.fast-report.com/ru/products/fast-report4-editions-compare.html, и ознакомтесь с ограничениями Вашей версии!
Имеено для XE2 отсутствует экспорт в самые нужные форматы! Я об этом не прочел вовремя... и приплыл. Канешно, временное решение я нашел, но в скором будущем, похоже, стану клиентом FastReport.
Вот так бывает. :)

2 октября 2012 г.

pgAdmin. Резервное копирование и восстановление базы данных.

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

1 октября 2012 г.

Delphi XE2. Установка ZeosLib.

Приветствую Вас в своем блоге.

Сегодня я хотел бы описать процесс установки компонентов Zeos на Delphi XE2.

        Первое, что необходимо это конечно сами компоненты. Когда-то я качал их из официального SVN-а. Архив с тех пор сохранился, его можно взять ТУТ, если по каким-либо причинам Вы не можете скачать с SVN.
        Итак, компоненты загружены, сложены в отдельную папку, идем далее...
Выбираем "File - Open Project..."