Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с хранимыми процедурами / 5 сообщений из 5, страница 1 из 1
20.10.2003, 13:47
    #32298364
tdn
tdn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с хранимыми процедурами
Проблема в следующем:
2 клиента. Если на 1 выполняется 2 процедура, а на 2, через некоторое время 1(:ipPR один и тот же) то выдается ошибка. о незавершённости транзакции. Если значение :ipPR разное проблем нет.


Текст 1 процедуры
DECLARE VARIABLE FAMIL VARCHAR(20);
DECLARE VARIABLE NAM VARCHAR(20);
DECLARE VARIABLE OTC VARCHAR(20);
DECLARE VARIABLE STAT VARCHAR(20);
DECLARE VARIABLE OTD VARCHAR(20);
begin
begin
select fam,name,ot,status,otdel from users
where pr=:ipPR
into :famil,:nam,:otc,:stat,:otd;
insert into log (pr,fam,name,ot,status,otdel,sys_date,date_in)
values (:ipPR,:famil,:nam,:otc,:stat,:otd,:ipDate,:ipDate);
update users
set IN_OUT = "1"
where PR = :ipPR;

end
suspend;
end

Текст 2 процедуры
DECLARE VARIABLE FAMIL VARCHAR(20);
DECLARE VARIABLE NAM VARCHAR(20);
DECLARE VARIABLE OTC VARCHAR(20);
DECLARE VARIABLE STAT VARCHAR(20);
DECLARE VARIABLE OTD VARCHAR(20);
begin
begin
select fam,name,ot,status,otdel from users
where pr=:ipPR
into :famil,:nam,:otc,:stat,:otd;
insert into log (pr,fam,name,ot,status,otdel,sys_date,date_out)
values (:ipPR,:famil,:nam,:otc,:stat,:otd,:ipDate,:ipDate);
update users
set IN_OUT = "0"
where PR = :ipPR;
end
suspend;
end
...
Рейтинг: 0 / 0
20.10.2003, 14:20
    #32298421
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с хранимыми процедурами
Ну так видать транзакции у тебя неправильно обрабатываются. Если поцедура 1 не подтверждена, то при выполнении процедуры 2 должен быть dead lock, поскольку оба пишут в одну и ту же запись при одинаковых ipPR.
Про транзакции читать на ibase.ru
...
Рейтинг: 0 / 0
20.10.2003, 14:22
    #32298426
dalai lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с хранимыми процедурами
а как правильно?

ответ. в клиенте делать бегинтран - коммит.

ы
...
Рейтинг: 0 / 0
20.10.2003, 16:46
    #32298760
Малиновский Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с хранимыми процедурами
Используйте компоненты прямого доступа - IB Express, IBX или, еще лучше - FIBPlus. Там хочешь - не хочешь, придется разобраться с транзакциями.
В общем, принцип такой -
//--- Клиент хочет изменять данные:
try
Start Transaction
...
// Клиент меняет данные
...
Commit // Все в порядке, данные изменены, можно позволить другим
// клиентам читать мои изменения
except // Ошибка

RollBack // Все изменения отменяются, другие клиенты
// ничего не заметят...

end

//-----------

Для операции чтения обычто используют "длинную" транзакию, которая одна на все время жизни приложения, в ней ничего не изменяют, только читаю данные из базы. Для операции изменения (быстро-быстро) создают пишущую транзакцию, как описано выше, которую после операции изменения завершают (или Commit - подтверждение, или RollBack - откат).
Возможны варианты.
...
Рейтинг: 0 / 0
23.10.2003, 06:15
    #32302382
tdn
tdn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с хранимыми процедурами
После вызова процедуры добавил
IBTransaction.Commit

Все пошло.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблема с хранимыми процедурами / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]