Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-98769
Andrew
2003-08-29 09:31
2003.10.30
FTP, получить список файлов с подкаталогами


3-98453
nick-from
2003-10-11 12:13
2003.10.30
значение NULL в ХП


1-98627
Yel
2003-10-17 10:02
2003.10.30
ошибки при работе с памятью


1-98644
Brutus
2003-10-17 13:04
2003.10.30
Как создать собственный заголовок?


4-98938
aldapooh
2003-08-22 14:22
2003.10.30
Работа с учетными записями





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский