[FireBird] Как бороться с транзакциями?
От: Аноним  
Дата: 14.01.11 10:21
Оценка:
Hi, All!

Перевожу MSVC-приложение на FireBird при помощи евойного C API. Изначально программа писалась под SQLite с его дефолтным механизмом autocommit:
— Если серия запросов выполняется внутри транзакции (begin transaction;...;commit, то эта серия выполняется как единая транзакция
— Если запрос либо серия запросов выполняется без указания транзакции, то SQLite создает под него транзакцию самостоятельно.

Очень хотелось бы организовать подобное и на FB: Сишный код с расчетом на вышеуказанное уже написан и переделывать его ВЕСЬ не хочется. С другой стороны, я не вижу, как в C API вообще в принципе можно работать в таком режиме: ф-ции C API isc_dsql_prepare и isc_dsql_execute требуют параметра "хэндл транзакции" и не похоже, чтобы туда можно было передать NULL.

Вопросы:
— Есть ли в FB режим автокоммита? Если да, то как его включить?
— Если нет, то как — без глобального переписывания сишного кода — можно обойти это ограничение?
Re: [FireBird] Как бороться с транзакциями?
От: LuciferArh Россия  
Дата: 15.01.11 11:29
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>- Есть ли в FB режим автокоммита? Если да, то как его включить?


Насколько я помню, нет. Точнее, он есть, но это все равно — транзакция. И хэндл оной нужно передавать серверу явно. Можно на одно соедиение повесить транзакцию по умолчанию. Но это неправильно. Логичнее каждое двействие предварять стартом отдельной транзакции.

А>- Если нет, то как — без глобального переписывания сишного кода — можно обойти это ограничение?


Никак. Потому что FB — это полноценный сервер БД, а SQLite — недосервер. Хочется подробнее — ступайте на http://www.ibase.ru и читайте. Там море документации.
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re[2]: [FireBird] Как бороться с транзакциями?
От: Lloyd Россия  
Дата: 15.01.11 11:36
Оценка:
Здравствуйте, LuciferArh, Вы писали:

А>>- Если нет, то как — без глобального переписывания сишного кода — можно обойти это ограничение?


LA>Никак. Потому что FB — это полноценный сервер БД, а SQLite — недосервер.


Чудечная логика. В таком случае, Microsoft SQL Server — тоже недосервер, т.к. у него autocommit тоже имеется.
Re[3]: [FireBird] Как бороться с транзакциями?
От: LuciferArh Россия  
Дата: 15.01.11 11:49
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Чудечная логика. В таком случае, Microsoft SQL Server — тоже недосервер, т.к. у него autocommit тоже имеется.


Неверная логика. Ибо FB умеет как embedded, так и полноценно работать. (Microsoft, кстати, embedded умеет?) SQLite же в полноформатном режиме... Молчу, молчу... (с)
... << RSDN@Home 1.2.0 alpha 4 rev. 1481>>
Re[4]: [FireBird] Как бороться с транзакциями?
От: Lloyd Россия  
Дата: 15.01.11 18:18
Оценка: +1
Здравствуйте, LuciferArh, Вы писали:

L>>Чудечная логика. В таком случае, Microsoft SQL Server — тоже недосервер, т.к. у него autocommit тоже имеется.


LA>Неверная логика. Ибо FB умеет как embedded, так и полноценно работать. (Microsoft, кстати, embedded умеет?) SQLite же в полноформатном режиме... Молчу, молчу... (с)


У вас какой-то сумбур в голове. Нет никакой связи между наличием автокоммита и умением работать в embedded-режиме, совсем никакой связи.
Re: [FireBird] Как бороться с транзакциями?
От: Пацак Россия  
Дата: 15.01.11 19:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопросы:

А>- Есть ли в FB режим автокоммита? Если да, то как его включить?

Нету. Никак. Все транзакции в FB стартуются и коммитятся явно, с клиента.

А>- Если нет, то как — без глобального переписывания сишного кода — можно обойти это ограничение?


Вы бы чтоль пример вашего кода привели, чтоб понятнее стало, с чем реально вы имеете дело. Сильно сомнительно, что API дергается из бизнес-логики явно, наверняка у вас для него уже создана какая-нибудь обертка. Если так — то в нее работу с транзакциями и встроить, нет?
Ку...
Re[2]: [FireBird] Как бороться с транзакциями?
От: Аноним  
Дата: 19.01.11 10:57
Оценка:
Здравствуйте, Пацак, Вы писали:

А>>- Если нет, то как — без глобального переписывания сишного кода — можно обойти это ограничение?


П>Вы бы чтоль пример вашего кода привели, чтоб понятнее стало, с чем реально вы имеете дело. Сильно сомнительно, что API дергается из бизнес-логики явно, наверняка у вас для него уже создана какая-нибудь обертка. Если так — то в нее работу с транзакциями и встроить, нет?


Да, конечно, какая-то обертка есть, и в нее пришлось встроить явную работу с неявными транзакциями Т.е. проблема решена, но без удовольствия
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.