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

Вниз

OnUpdateError и Paradox   Найти похожие ветки 

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

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

Я прочел, что автоинкрементные поля в Paradox часто слетают при многопользовательской работе, поэтому попытался отказаться от их использования в тех режимах, где возможна одновременная работа нескольких пользователей. Клиент толстый, сервер приложения не используется.
В чем опасность поиска максимального номера в таблице и присваивания следующего номера?
При конфликте используется
procedure TdmTables.qZakazUpdateError(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
if (UpdateKind = ukInsert) and (Pos("Key violation", E.message) > 0) then
begin
qZakazId.NewValue := qZakazId.NewValue + 1;
UpdateAction := uaRetry;
end;
end;


 
Johnmen ©   (2003-10-08 17:21) [1]

В свое время был описан подход, который очень даже имеет право на жизнь. И аналогичен твоему:
1. Выполняем запрос на макс. значение ключа
2. Пихаем новую запись с макс.+1
3. Если ошибка, то к п.1.
Рано или поздно, из цикла вывалимся. Причем, скорее всего, очень рано...:)


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

[1] Johnmen © (08.10.03 17:21)

Рад, что так уже делали. А то я сделал, проверил, но уверенности не было.
Особенно учитывая, что если будет другая ошибка, возвращающая Key violation, то программа зависнет :(

Я думаю, нужно возвращаться к п.1, только если пользователей очень много. Все-таки лишний запрос к базе.


 
Johnmen ©   (2003-10-08 18:02) [3]

>Sandman25 © (08.10.03 17:31)

Даже если пользователей мало, но >1, то, теоретически, между п.1 и п.2 может произойти событие от другого пользователя с аналогичными желаниями...:)


 
Sandman25 ©   (2003-10-08 18:53) [4]

[3] Johnmen © (08.10.03 18:02)

Все равно, по-моему, легче иногда получать лишнюю ошибку и пытаться опять, чме каждый раз зачем-то мучить сервер вопросами о максимальном номере :)


 
Johnmen ©   (2003-10-08 23:00) [5]

>Sandman25 © (08.10.03 18:53)

Так и в твоем случае мучишь сервер запросом ! Просто неявно.
Кстати, а как совместим "Парадокс" с "сервером" ? :)


 
Sandman25 ©   (2003-10-09 10:01) [6]

>Так и в твоем случае мучишь сервер запросом ! Просто неявно.

Да нет, я просто пытаюсь опять, без лишних запросов. В 99,9% случаев со второго раза вставка пройдет. В остальных случаях пройдет с 3-го раза.

>Кстати, а как совместим "Парадокс" с "сервером" ? :)

Я имел в виду машину, на которой находится БД. В некотором роде "сервер" :)


 
Johnmen ©   (2003-10-09 10:06) [7]

Лишний запрос, это запрос на макс.значение ключевого поля. Ты же не сомневаешься, что он отработает практически мгновенно.
Твой способ я не критикую, вполне приемлем, по-моему...


 
Sandman25 ©   (2003-10-09 10:20) [8]

>Ты же не сомневаешься, что он отработает практически мгновенно.

Тоже верно.
В принципе, гибкая программа должна вести статистику конфликтов, и при накоплении некоторого критического количества повторных неудач переходить на Вашу схему. Только сомневаюсь, что так кто-то делает :)



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

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

Наверх




Память: 0.48 MB
Время: 0.027 c
14-98834
PHPAsker
2003-10-08 03:52
2003.10.30
Телефонная книжка


3-98447
IBNovice
2003-10-10 09:50
2003.10.30
Autoinc


6-98766
arous
2003-09-05 01:03
2003.10.30
FTP


14-98841
pasha_golub
2003-10-11 14:47
2003.10.30
Безопасность чата


1-98610
Nikolas
2003-10-17 20:33
2003.10.30
Исключительные ситуации