Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-87762
Boriska
2003-01-12 21:14
2003.02.27
Скрытие процесса


1-87486
HardClubber
2003-02-15 20:43
2003.02.27
преобразование типов


6-87581
DJ_Sedoy
2003-01-07 07:38
2003.02.27
Перебор активных соединений TServerSocket


14-87618
Val
2003-02-07 19:09
2003.02.27
Передача графики на мобильник via e-mail


1-87369
BOA_KAA
2003-02-17 17:04
2003.02.27
Динамические массивы внутри записи





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