Текущий архив: 2006.10.22;
Скачать: CL | DM;
Вниз
Коды ошибок провайдера. Найти похожие ветки
← →
Anatoly Podgoretsky © (2006-08-18 23:35) [40]Ega23 © (18.08.06 16:51) [15]
Не ужели ИП проблема?
← →
Anatoly Podgoretsky © (2006-08-18 23:39) [41]Вопросы у тебя нормальные, но паранойя должна быть разумной и главное продуманной.
← →
Bless © (2006-08-19 09:16) [42]
> Anatoly Podgoretsky © (18.08.06 23:29) [36]
>
> Можно и так, конечно. Но все же хотелось не записать изменения
> в базу в любом случае
> Да как же ты запишешь, если например база не позволяет дубли
> или что то еще. С логикой не дружим?
К словам придираетесь? Разумеется, если в базе есть ограничения на значение записи, то оно не пройдет, несмотря ни на какие "unique table".
Пример:
пусть таблица имеет поля код наименование значение
----------------------------
1)1 Киев город
Я выбрал эту запись к себе.
После этого кто-то изменил ее на такую
2)1 Киев-град город
Я же решил изменить ее на такую:
3)1 Киев мегаполис
Если воспользоваться советом sniknik[7], то никакой ошибки не возникнет,мое изменение пройдет, значение "город" изменится на "мегаполис", но у меня на клиенте останется "Киев", хотя в базе он уже "Киев-град". Так вот, я хочу не чтоб прошло мое изменение, а перехватить ошибку "такой записи больше нет", обновить запись на клиенте до состояния 2) и далее по обстоятельствам.
← →
sniknik © (2006-08-19 10:09) [43]> а перехватить ошибку "такой записи больше нет", обновить запись на клиенте до состояния 2) и далее по обстоятельствам.
adResyncConflicts в параметре Update Resync по моему это делает автоматом (не уверен точно потому как не использовал, но по описаниям в хелпах), т.е. если произошол конфликт при записи то конфликтная строка считывается с сервера.
это к тому что не надо будет в ексепте это делать и делить на ошибки по кодам, в эксепте надо только учесть что ошибка была, сообшить ее юзеру, и пускай разбирается.
← →
sniknik © (2006-08-19 10:17) [44]а вообще посмотри на королевстве статьи по ADO, ты ямно не используеш его возможности, пытаешся реализовать сам то что уже есть...
← →
Bless © (2006-08-19 12:00) [45]
> sniknik © (19.08.06 10:17) [44]
Статьи про ADO c королевства я читал, хотя о варианте с adResyncConflicts забыл совсем.
Update Resync=adResyncConflicts не обновит мне значение полей в датасете автоматом. Это просто изменит UnderlyingValue у полей со старых на актуальные значения. А вот делать Value равное UnderlyingValue придется вручную. А где делать - это, имхо, дело вкуса. Я хочу в try-except, а не в обработчиках событий dataset-а, как в примере с королевства.
В таможнем примере использования adResyncConflicts стоит обработчик
> if Reason=erUndoUpdate then begin ///в случае ошибки
> ReadUnderlyingValues; //тут value := UnderlyingValue
> EventStatus:=esCancel; //....и прото отменяем обновление
> end;
>
Этот пример, имхо, полностью аналогичен моему:
try
q.post;
except
on E: Exception do begin
q.Cancel;
RefreshCurRec(q);//обновить текущую запись датасета
end;
...
end;{try}
Т.е. вне зависимости от причины отказа в update, в обеих примерах обновляется текущая запись до актуальных значений и отменяются изменения.
А мне хочется так делать только в случае измененной кем-то другим записи в базе, во всем остальных случаях отказа просто показать ошибку.
← →
Bless © (2006-08-19 12:15) [46]
> А мне хочется так делать только в случае измененной кем-
> то другим записи в базе, во всем остальных случаях отказа
> просто показать ошибку.
В общем-то, потому и спрашиваю о кодах ошибок, чтоб посмотреть какие они вообще бывают.
А то если причины отказа update ограничиваются только двумя:
- кто-то после меня изменил
- нет прав на изменение.
то можно действительно сделать как в упомянутом примере на королевстве
← →
Ega23 © (2006-08-21 09:37) [47]
>
> Anatoly Podgoretsky © (18.08.06 23:35) [40]
>
> Ega23 © (18.08.06 16:51) [15]
> Не ужели ИП проблема?
>
Ты же сам говорил, что паранойя должна быть разумной?
Страницы: 1 2 вся ветка
Текущий архив: 2006.10.22;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.057 c