Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

UpdateAction?   Найти похожие ветки 

 
Sandman25 ©   (2003-10-10 16:59) [0]

Доброе время суток.

Не могу найти выход из следующей, наверное, стандартной ситуации. Заполняю документ на несколько позиций, для записи использую Action с обработчиком

...
with dmTables.qZakNewDishes do
if RecordCount > 0 then
begin
dmDatabase.dbDatabase.StartTransaction;
try
ApplyUpdates;
CommitUpdates;
dmDatabase.dbDatabase.Commit;
except
on E:Exception do
begin
dmDatabase.dbDatabase.Rollback;
raise;
end;
end;
...

Для dmTables.qZakNewDishes: TQuery есть обработчик OnUpdateRecord, в котором и происходит работа с таблицами.

В случае возникновения ошибки я кидаю Exception и откатывается вся транзакция, но нужно еще и восстановить буфер с измененными записями, чтобы в следующий раз они снова обрабатывались. То есть проблема связана с UpdateAction обработчика OnUpdateRecord.
Если я ставлю uaApplied, то в следующий раз прошедшие до ошибки записи заново не посылаются.
Если я ставлю uaSkip, то в следующий раз прошедшие до ошибки записи посылаются 2 раза.
Если я ставлю uaAbort, то естсественно никакой записи вообще не происходит.
Если я ставлю uaFail, то это тоже не то ("Table is read only" И все такое)

Что посоветуете? Вроде бы должен быть uaSkip, но почему он в следующий раз отправляет запись дважды???


 
Reindeer Moss Eater ©   (2003-10-10 17:03) [1]

Отличный пример обработки подобной ситуации есть в стандартных встроенных демосах


 
Sandman25 ©   (2003-10-10 17:07) [2]

спасибо, сейчас посмотрю. Совсем забыл об этом.


 
Sandman25 ©   (2003-10-10 17:18) [3]

Устроил поиск по UpdateAction, пересмотрел все найденное в Demos. Моего случая нет даже и близко. Там всюду только OnUpdateError, а мне нужно OnUpdateRecord, причем проблема связана со второй попыткой записи.
Еще мысли есть, или мне придется из-за этой ерунды переходить на Provider и ClientDataSet? :(


 
Sandman25 ©   (2003-10-10 17:40) [4]

Если попытка записи в БД не проходит 4 раза, а затем проблемную запись юзер удаляет, то при следующей попытке все записи записываются 4 раза. Как можно очистить буфер без CancelUpdates?


 
Sandman25 ©   (2003-10-10 17:41) [5]

"все записи записываются 4 раза" следует читать как "5 раз", конечно.


 
Sandman25 ©   (2003-10-10 18:30) [6]

Кому интересно, могу рассказать, что я покопался в BDE и выяснил, что исправить ситуацию я не могу - cache и глюк находятся в BDE.
DbiApplyDelayedUpdates.
Поэтому мне пришлось выкручиваться - при добавлении есть уникальная совокупность полей, и перед добавлением новой записи я проверяю эту совокупность. Если такая уже была, значит ожидается добавление фантомной записи и не надо этого делать :)



Страницы: 1 вся ветка

Текущий архив: 2003.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-98863
VDen
2003-10-10 21:02
2003.10.30
SSI-переменные и Апач


4-98917
ShadoWFM
2003-08-24 21:29
2003.10.30
Как создать ярлык на форме?


14-98789
tOester
2003-10-09 14:27
2003.10.30
Умная программа


3-98464
Broot
2003-10-11 06:29
2003.10.30
Русский язык в базе данных DBASE


1-98611
No_Na_Me
2003-10-16 20:00
2003.10.30
FileSetAttr & FileGetAttr