Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Commit в хранимой процедуре 
V
    Опции темы
VladBD
Дата 22.1.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: нет
Всего: 5



Interbase 6.0+Delphi 7

Есть внутренняя процедура
Код

 begin
  /*берем все записи со статусом=IN_STATUS*/
  FOR SELECT ID_LINK, ID_LOT, KOLVO FROM TBL2 WHERE (ID_STATUS= :IN_STATUS) INTO :pID_LINK, pID_LOT, pKOLVO
  DO
  BEGIN
    /*ищем лот pID_LOT*/
    SELECT ID_SUPPLIER, PRICELOT1, PAR_VES, PAR_X, PAR_Y, PAR_Z FROM SPRLOT WHERE (ID_LOT=:pID_LOT) INTO :pID_SUPPLIER, :pPRICELOT1, :pPAR_VES, :pPAR_X, :pPAR_Y, :pPAR_Z;
    UPDATE TBL2 SET ID_SUPPLIER=:pID_SUPPLIER,SUMMA1=:pPRICELOT1,ALLSUMMA1=:pPRICELOT1*:pKOLVO,VES1=:pPAR_VES*:pKOLVO,PAR_X=:pPAR_X*:pKOLVO,PAR_Y=:pPAR_Y*:pKOLVO,PAR_Z=:pPAR_Z*:pKOLVO WHERE (ID_LINK=:pID_LINK) AND (ID_LOT=:pID_LOT);
  END
  suspend;
end

Вызываю через IBStoredProc1.ExecProc.
Обязательно ли делать Commit после вызова процедуры или можно как-то в процедуре вызвать Commit? 
PM MAIL   Вверх
Alex
Дата 22.1.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Почитай http://forum.vingrad.ru/topic-133235/kw-%F...A%F6%E8%E8.html

PS: Вызов ХР для сервера в контексте транзакций ни чем не отличается от вызова элементарного sql оператора.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
VladBD
Дата 22.1.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: нет
Всего: 5



т.е. так?
Код

DM.IBTransaction1.Active := False;
DM.IBTransaction1.StartTransaction;
try
  вызов ХР
  DM.IBTransaction1.Commit;
  Application.MessageBox('Импорт завершен!','Сообщение', MB_OK);
except
  DM.IBTransaction1.Rollback;
  Application.MessageBox('Сбой в импорте данных!','Внимание', MB_OK);
end;

PM MAIL   Вверх
Alex
Дата 22.1.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Код

DM.IBTransaction1.Active := False;
DM.IBTransaction1.StartTransaction;
try
  вызов ХР
  DM.IBTransaction1.Commit;
  Application.MessageBox('Импорт завершен!','Сообщение', MB_OK);
except
  if DM.IBTransaction1.Active then // т.к. транзакцию могли уже закрыть
    DM.IBTransaction1.Rollback;
  Application.MessageBox('Сбой в импорте данных!','Внимание', MB_OK);
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
VladBD
Дата 22.1.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: нет
Всего: 5



Цитата
// т.к. транзакцию могли уже закрыть

Интересно - как это могли ее закрыть, если внутри процедуры происходят действия с БД
PM MAIL   Вверх
Alex
Дата 22.1.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



внутри ХР с транзакцией ни кто ничего сделать не может (только откатиться до определенной точки сохранения, но это уже другое) 
Могли сделать commit и программа вылетит с ошибкой на Application.MessageBox, попадет в except часть и тут опять улетит с ошибкой, если не сделать эту проверку.

Многие конечно мне сейчас скажут, да не может Application.MessageBox привести к ошибке, а я на это скажу "не зарекайтесь" всякое бывало и Application.MessageBox может с ошибкой улететь...


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
VladBD
Дата 22.1.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.11.2006

Репутация: нет
Всего: 5



ок. намек понял - береженного - бережет!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.