Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c