Главная страница
    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
1-98686
arche
2003-10-21 08:55
2003.10.30
Как пользоваться TParser?


3-98486
saNat
2003-10-09 01:33
2003.10.30
Динамическое создание компонента DBLookUpComboBox


3-98526
Bless
2003-10-08 17:45
2003.10.30
как можно обновить одну строку грида?


14-98852
ИМХО
2003-10-09 19:10
2003.10.30
Футбол и мафия


1-98559
tria
2003-10-20 13:45
2003.10.30
Как в TTreeView отловить событие перехода между елементами?





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