Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
ВнизЗапрос на Update для TIBDataSet Найти похожие ветки
← →
KonuhovSegey (2003-02-04 18:19) [0]Уважаемые знатоки, может кто сталкивался с подобной проблемой.
У меня в программе есть набор TIBDataSet, в котором записаны 4 запроса на выбор, добавление, изменение, refresh, и удаление.
Запрос на изменение раньше уменя использовал только первичный ключ в разделе where, но при переходе к сетевой структуре мне потребовалось записать в этом разделе все поля обновляемой записи. И если старые значения хотя бы одного поля NULL,
то обновления не происходит. При этом исключений не возникает.
Запись как быдто нормально изменилась, на на сервер не записалась. Если NULL значений нет, то все нормально.
А мне очень желательно задавить полное условие, на тот случай,
если запись за это время была изменена другим пользователем.
В крайнем случае можно считать новые значения, но Refresh не работает.
← →
Johnmen (2003-02-04 23:35) [1]А как выглядит запрос на UPDATE ?
И почему вдруг "...потребовалось записать в этом разделе (в where, что ли ?)все поля обновляемой записи..." ???!!!
← →
KonuhovSegey (2003-02-06 17:09) [2]Все поля в Where потребовалось записать, чтобы исключить
перезапись, уже измененной другим пользователем записи.
Т.е.
1.Первый пользователь открыл для просмотра.
2.Второй пользователь отредактировал и записал.
3.Первый пользователь начал редактировать старую версию записи.
4.Первый пользователь записал с потерей изменений, которые внес
второй пользователь.
Между шагами 3 и 4 запись заблокирована по записи. т.е. ее никто не может начать редактировать. А между 1 и 2 могут пройти изменения.
Если записать в Where все поля, то запись измененная пользователем 1 не запишется.
Можно было бы обновить текущую запись перед редактированием, но
IBDataSet.Refresh неработает, а закрывать и открываьь весь
набор долго, т.е. в нем много записей, а редактируется только одна.
Есть обходные пути, например считать одну запись в другой IBDataSet и его обновлять, но потом ее прийдется ее переписывать
в большой набор, коряво получается.
Может кто знает как обновить одну запись.
В компоненте есть запрос на обновление, но неясно как его выполнить принудительно.
← →
Наталия (2003-02-07 06:26) [3]При шаге 1 использовать холостой update, тогда второй пользователь не сможет редактировать эту запись. С другой стороны, мне кажется, нужно задуматься почему возникает такая ситуация, когда два пользователя должны менять одну и ту же запись? И почему считается, что правильно её меняет именно первый, а не второй? :)
← →
KonuhovSegey (2003-02-08 10:07) [4]Два пользователя и не должны изменять одну и ту же запись,
но тредуется обязательно запредить это, т.к. иначе будет большой бардак, я просто перестраховываюсь.
Холостой update делается на 3-м шаге, пользователи должны иметь
возможность смотреть запсиси независимо.
Но поскольку в where неполучается записать условия со всеми полями, то произвести проверку, а не изменилась ли эта запись
затруднительно (возможно но очень коряво получается).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c