Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
3-98506
Miau
2003-10-08 19:14
2003.10.30
Неблокирующий запрос


1-98680
col-isaev
2003-10-21 13:11
2003.10.30
DLL


1-98715
Ormada
2003-10-17 12:23
2003.10.30
Редактор для Delphi


1-98637
tovSuhov
2003-10-21 15:20
2003.10.30
Эмуляция кликов


1-98587
Эл
2003-10-19 15:46
2003.10.30
Регулярные выражения в delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский