Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, при работе напрямую с таблицей ничего хорошего не получится - будет сохранятся запись целиком - все поля, даже те что и не меняли. Корявый режим
Не сохраняет "во второй форме" именно потому что видит конфликт. С lForce=.T. сохранит, переписав ВСЕ поля. Работай с куросрадаптером, там всё работает как я описывал, более контролируемо... ------------------ WBR, Igor |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
И таки ДА, действительно работает
А я то мучился..., вот и начал городить огород с LOCK() |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
А сохранение только измененных полей возможно только через CursorAdapter или и через LocalViews, или его поведение такое ж самое, как и при редактировании таблицы напрямую?
|
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Нет, "напрямую" похоже он все поля пытается записать - большая часть возможностей не работает... Не работаю я "напрямую" с dbf-ами. Плохой это подход получается, слабо управляемый.
Главное - чтобы в таблице был первичный ключ (уникальное поле или на худой конец комбинация полей). Ну и корректно настраивать CAD а потом корректно писать код... Например, вполне логично после сохранения или "отмены" сделать перезапрос. При закрытии формы - либо автоматом пытаться вызвать сохранение, либо вопрос задать. Плюс само сохранение я предпочитаю делать "построчно" - вручную крутить цикл по изменённым записям (GETNEXTMODIFIED() позволяет их последовательно перебирать) и сохранять по одной - контролируя ошибки более "тонко" нежели если tableupdate сам будет цикл такой внутри себя крутить... Плюс транзакции - если нужно обеспечить согласованность сохранения/несохранения разных записей. В общем ещё куча нюансов есть которые нужно продумывать чтобы получился красивый и правильный код ------------------ WBR, Igor |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Сколько книжек по VFP перечитал, нигде такого не встречал (как Вы советуете), тому то и на буферизацию не подсел, а изобрел велосипед в виде авто генерации переменных, и редактирования их в форме..., но трудоемко это очень...
Покрутил я ваш пример, и очень мне понравилась сама идея управление записями, большое вам спасибо... Вот только б где больше информации о CursorAdapter найти Исправлено 1 раз(а). Последнее : ZenTigra, 12.03.17 19:41 |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В хелпе, и поиском по форуму.
------------------ WBR, Igor |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
А в чем проблема - ТС, вроде, готов проверить ваши коды. |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Но.. вот мой код... работает правильно, надеюсь, по доступу к записи таблицы? IF RLOCK() && заблокировать запись таблицы, если она не заблокирована другим сетевым пользователем * что-то экслюзивно делаю с записью UNLOCK ENDIF И ты думаешь, что ISRLOCK() не покажет факт RLOCK() другого сетевого пользователя? (я правда ISRLOCK не использовал ни разу...) |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, хотя и имеет смысл в ОЧЕНЬ редких случаях. Как правило хватает автоматической блокировки, настройки SET REPROCESS и обработки ошибок. Я ничего не "думаю". Это чётко написано в мануале - не покажет ------------------ WBR, Igor |
Re: Как узнать что другой пользователь открыл для редактировать запись в буферизированой таблице | |
---|---|
akvvohinc Сообщений: 4217 Откуда: Москва Дата регистрации: 11.11.2008 |
Запускаешь Фокс. Открываешь таблицу в режиме SHARED
Запускаешь второй экземпляр Фокса. Открываешь ту же таблицу в режиме SHARED
Исправлено 2 раз(а). Последнее : akvvohinc, 18.03.17 17:43 |
© 2000-2024 Fox Club  |