Страницы

4 марта 2013 г.

Переходим с Delphi на C# (беглый взгляд + мысли вслух)

Приветствую Вас.
       Совсем недавно я принял решение сменить место работы, а вместе с тем и основной язык программирования. Существует много мнений и статей на форумах о переходе с Delphi на C#. Когда я задался этим вопросом, первое что я сделал - это по погуглил на тему впечатлений от перехода и вообще на тему отзывов. Потому что меня одолевали сомнения, а стоит ли...

Хочется вложить и свои пять копеек...

21 декабря 2012 г.

ODBC, Quik. В указанном DSN архитектура драйвера и архитектура приложения не соответствуют друг- другу...

Доброго времени суток.
А вам попадалась такая ошибка:
"В указанном DSN архитектура драйвера и архитектура приложения не соответствуют друг- другу SQLSTATE = IM014 Код ошибки = 0" ?

       Мне попалась при попытке настроить выгрузку по ODBC из торговой системы Quik в базу PostgreSQL на ОС Windows 7 x64.

Итак, как это решить?

       Суть проблемы заключается в несоответствии разрядности ODBC-драйвера и приложения которое им может воспользоваться .Если у вас 64-разрядная система, то Вы наверняка скачали и установили 64-разрядный драйвер ODBC. Если у Вас приложение для которого требуется выгрузка по ODBC - 64-х битное, то проблем не должно было возникнуть впринцыпи (Троговой платформы Quik это не касается, на текущий момент она 32-разрадная). Если приложение 32-битное, тогда скачиваем 32-битный драйвер ODBC, ставим его в систему, и настраиваем при помощи приложения расположенного в папке "c:\windows\sysWOW64\odbcad32.exe".

       Если у Вас есть и 32-х и 64-х разрядные приложения работающие по ODBС, то ничто не мешает установить драйвера с ссответствующими разрядностями.

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;