Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941
База на Access XP -> ODBC -> MSSQL 2K
Главное требование - чтобы эту процедуру можно было считать транзакцией. Т.е. если где-то в середине процесса произошел сбой, то полный Rollback...
Сложность в том, что вносятся изменения сразу в 4 таблицы.
Мои варианты:
1) Сделать SP на серваке //направление не совсем изведанное, но интересное
2) Все сделать в VBA на Recordset'ах. //изведано и неинтересно + откат заколебусь делать

Что скажет стая?
21 янв 04, 16:23    [501253]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
хвост стаи акеса :)
Guest
1.
21 янв 04, 16:26    [501264]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Хвоста зовут Виктор. :^)
21 янв 04, 16:29    [501278]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
ноготь задней ноги стаи акеса :)
Guest
21 янв 04, 16:30    [501281]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941

А дополнения, замечания и напутствия?!?!
21 янв 04, 16:33    [501288]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
>А дополнения, замечания и напутствия?!?!

А что не ясно?
Создал ХП с нужными выходными параметрами, не забыл про Begin Tran/Commit Tran/Rollback tran
СCREATE PROCEDURE dbo.StoredProcedure1


(
@parameter1 int,
@parameter2 money
)

AS
SET NOCOUNT ON
BEGIN TRAN
UPDATE...
INSERT...
UPDATE...
INSERT...

IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
RAISERROR ('Остатки не обновлены из-за...',16,1)
END
ELSE
BEGIN
COMMIT TRAN
END

RETURN


Блок проверки вообще-то надо размножить после каждой операции по изменении данных - я для простоты сократил.

Вызвал ХП с помощью DAO/ADO.
Убедился в отсутствии ошибок - пошел пить пиво.
21 янв 04, 16:50    [501337]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Артем1
Member

Откуда: www.desnogorsk.{ru||net} -> Москва
Сообщений: 2036
Делай SP. в ней начиная транзакицю и откатывай, если что.
Что делать при откате и в скольких таблицах - уже сервер будет думать.
21 янв 04, 16:51    [501340]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941
2 Viktor: да в се ясно. Теперь стало еще яснее, спасибо...
Может просто есть какие-нить подводные камни, рифы, отмели и т.д.
Короче говоря, лоцман может идти пить пиво?

2 Артем1: Угу. Пасиб.

2 Всем:
Т.е. ХП - самый оптимальный вариант решения?
21 янв 04, 17:06    [501361]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
AlexJuice
Member

Откуда: Не от мира сего
Сообщений: 1413
А сам как думаешь - где надежнее делать Rollback: в Аксессе или в SQL'e?
21 янв 04, 17:38    [501445]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
где надежнее делать Rollback: в Аксессе или в SQL'e?
Монопенисуально
Все равно Rollback будет делаться на MS SQL
21 янв 04, 17:48    [501481]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
транзакции лучше делать на сервере ибо в случае зависания клиентского приложения все остальные юзеры могут начать курить ожидая снятия блокировки
21 янв 04, 17:56    [501499]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Спрашивалось "где надежнее"
А зависнуть и ХП может :))
21 янв 04, 18:04    [501515]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
AlexJuice
Member

Откуда: Не от мира сего
Сообщений: 1413
Лох Позорный
Все равно Rollback будет делаться на MS SQL

Не-а, он будет делаться на VBA
А дойдет ли до него - вот это вопрос...
21 янв 04, 18:17    [501537]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
AlexJuice
Member

Откуда: Не от мира сего
Сообщений: 1413
Лох Позорный
Спрашивалось "где надежнее"
А зависнуть и ХП может :))


Есть такой анекдот про динозавра и женскую логику.
В приложении к текущей теме это будет звучать примерно так:

- Что скорее зависнет - клиент или сервер?
- А монопенисуально!
- Почему?
- В обоих случаях вероятность 50% - или зависнет, или не зависнет
21 янв 04, 18:26    [501558]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
AlexJuice
Member

Откуда: Не от мира сего
Сообщений: 1413
Senin Victor
Блок проверки вообще-то надо размножить после каждой операции по изменении данных - я для простоты сократил.

Я бы сделал так:
if @@error<>0 goto MYLABEL

А уж там
ROLLBACK TRAN

RAISERROR ('Остатки не обновлены из-за...',16,1)


Да и в Else при одной инструкции не нужны Begin / End (но это я уже так, придираюсь попусту)
21 янв 04, 18:40    [501580]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6065
Сорри, что поздно - но откат лучше давать деньгами - больше вероятность что клиент придет снова :-)
21 янв 04, 18:54    [501590]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941
2 Odess:
Шутник. Мы и так в кредит даем.
Если еще и дженьги отдавать, то ...
21 янв 04, 18:56    [501595]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941
Лады, я решился. О ходе операции буду сообщать
Сяду на мель, подам SOS.
21 янв 04, 18:57    [501597]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Не-а, он будет делаться на VBA
А дойдет ли до него - вот это вопрос...

Не смешите мои тапки.
В VBA даже слова такого нет
И пусть не дойдет до Rollback в VBA (ну умер клиент совсем) - что с того? Commit что-ли случится? Или до второго пришествия блокировки будут висеть?
21 янв 04, 20:01    [501654]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
Если конекшен оборвется то с транзакцией случится автоматом ролбак

по второму пришествию - новое соединение и соответственно - запущенная другим процессом транзакция будет не видна


гораздо хуже если есть "долгие" транзакции или приложение зависло во время начатой транзакции а конкшен не оборвался. будут отдыхать все пользователи в чьи запросы нужно отбирать записи из блокированных таблиц(если это особо не оговорено в хинтах что разрешается грязное считывание) пока не оборвется коннект или будет подтверждена или откачена транзакция....
22 янв 04, 09:39    [501957]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
AlexJuice
Member

Откуда: Не от мира сего
Сообщений: 1413
Лох Позорный
Не смешите мои тапки.
В VBA даже слова такого нет

Мои тапки тоже смешить не надо
Dim wsp As DAO.Workspace
wsp.BeginTrans
wsp.Rollback

К VBA это отношения не имеет, что ли?
(Хотя выразить Rollback можно и другими словами
что я и имел в виду)
23 янв 04, 10:11    [503992]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
_ChaiNik
Member

Откуда: Сибирь, матушка/Москва теща
Сообщений: 235
2 AlexJuice

>Мои тапки тоже смешить не надо
>Dim wsp As DAO.Workspace
>wsp.BeginTrans
>wsp.Rollback
>
>К VBA это отношения не имеет, что ли?
>(Хотя выразить Rollback можно и другими словами
>что я и имел в виду)

Я, конечно, дико извиняюсь, но сии манипуляции относяться к ядру Jet и могут быть исполнены из любой среды поддерживающей COM.
(дружный смех тапок)
28 янв 04, 00:30    [509584]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Темный
Member

Откуда:
Сообщений: 11941
Опять чего-то накурились... Прям-таки беда... Тапки смеются...
28 янв 04, 01:22    [509597]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше сделать откат списания накладной?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Я, конечно, дико извиняюсь, но сии манипуляции относяться к ядру Jet
Я дико извиняюсь перед чайником и смеющимися тапками, но сии манипуляции относятся не к Jet, а к DAO, и мало того, что могут быть исполнены из любого языка, так еще и применительно к любым базам (не только к аксесу или MS SQL).
тапки уже катаются по полу от смеха
28 янв 04, 09:27    [509759]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить