![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Row cannot be located for updating. Some values may have been cha [MSSQL]
Bless © (2004-06-25 10:48:00)1) как обработать ситуацию
У клиента в DBGrid-е посредством запроса (ADODataSet) оказались некоторые данные. При попытке изменить что-то в некоторой строке возникает ошибка
'Row cannot be located for updating. Some values may have been changed since it was last read'
потому что другой пользователь в это же время изменил эту строчку.
Нужно, чтобы данные все-равно были записаны, затерев то, что уже записал другой пользователь в эту строчку. Можно, конечно, обновить эту строчку с сервера и попробовать записать еще раз, но может есть варианты без обновления с сервера?
2) Как наложить блокировку на данные, выбранные ADODataSet-ом до тех пор, пока пользователь не закончит работать с этими данными (например, нажав кнопочку "записать")
И еще, я слышал мельком от нескольких человек, что для многопользовательских систем нужно использовать не data-aware компоненты. Так ли это?
Да и вообще, хотелось бы услышать от людей, которые занимались разработкой многопользовательских систем, несколько общих рекомендаций, по поводу чего делать нельзя, а что нужно.
Например
1) используй/не используй то-то то-то
2) если есть опасность работы с таблицей одновременно нескольких пользователей, всегда делай...
и т.п.
А еще лучше, подкиньте, плз, ссылку на литературу, где подобные вопросы хорошо освещаются.
Bless (2004-06-25 12:16:00) [1]Ясненько, спасибо.
Sandman25 (2004-06-25 12:09:00) [2][5] Bless © (25.06.04 12:03)
Раньше BDE, теперь dbExpress.
Но с MS SQL я тоже никогда не работал. Только не спрашивайте, чем я его заменяю :)
Bless (2004-06-25 12:03:00) [3]>Не знаю, никогда с ADO не работал.
А чем ты его заменяешь?
Курдль (2004-06-25 11:51:00) [4]А вы еще спрашивали, чем мне не нравится ADO и MS SQL :)))
Sandman25 (2004-06-25 11:10:00) [5][2] Bless © (25.06.04 11:09)
>Это с помощью ResyncCommand и UniqueTable?
Не знаю, никогда с ADO не работал.
>А как насчет общих рекомендаций?:)
Мне не нравится идея локировать весь набор данных, который пользователь хочет посмотреть. Локировка должна быть как можно короче, только на время непосредственного изменения. Обычно.
Bless (2004-06-25 11:09:00) [6]Sandman25[1]>
Это с помощью ResyncCommand и UniqueTable?
Спасибо, совсем забыл, что есть такой способ.
Пожалуй, я так и сделаю.
А как насчет общих рекомендаций?:)
Sandman25 (2004-06-25 10:52:00) [7]1. Обновлять по неизменяемому ключу, а не по всем полям записи. То есть
update .. where id = :old_id, а не where id = :old_id and field1 = :old_field1 и т.д.