![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO - обновление данных перед редактированием [D7, MSSQL]
Санёк © (2004-10-12 09:54:00)Пишу наследника TADODataSet, хочу сделать так, чтобы при переводе набора данных в режим редактирования данные сначала обновлялись. Возможно ли это сделать средствами ADO?
KSergey (2004-10-12 10:39:00) [1]> [4] Санёк (12.10.04 10:28)
> И при несовпадении данных нужно всё же обновлять запись
> или предложить кленту обновить её самостоятельно?
Сам думай ;)
Санёк (2004-10-12 10:28:00) [2]При проверке блокировки проверяються мёртвые соединения и обрубаются, а узнать кто на данный момент заблокировал запись можно из той же таблицы блокировок.
И при несовпадении данных нужно всё же обновлять запись или предложить кленту обновить её самостоятельно?
KSergey (2004-10-12 10:19:00) [3]Дык просто прочитать в темповый RecordSet одну запись и сравнить с имеющейся в рабочей
Но идея таблицы блокировок, управляемая с клиента плоха изначально:
а) клиент может открыть редактирование и пойти пить чай на 2 часа
б) у клиента могут выбрать провод/зависнуть прога и т.п. - и все. Запись навсегда заблокировалась...
Санёк (2004-10-12 10:15:00) [4]Идея такая, при переводе набора данных в режим редактирования сначала проверяется нет ли данных о записи в таблице блокировок (она создается на сервере самостоятельно, так называемый метод логической блокировки), если нет, то сохраняются данные о записи в таблице блокировок, и разрешается редактирование, иначе запрещается и набор данных переводиться в режим чтения. Но вот в чем вопрос!!! После блокирования записи, хотелось бы быть уверенным в том, что она идиентична находящейся на сервере. Можно как то сделать иначе?
KSergey (2004-10-12 10:04:00) [5]Обновлялись с сервера? Хотя как-то момент выбран не удачно, по-моему... Т.е. вижу одно, а только начинаю редактировать - и уже другое? Подозрительно это как-то..
Потырено где-то (здесь?) когда-то
---------------------------------------------------------------------------------------------
Как обновить текущу запись, перечитав ее с сервера?
Вариант 1
with ADODataSet do
if Recordset.Supports(adResync) then
begin
Recordset.Resync(adAffectCurrent, adResyncAllValues);
Resync([rmExact, rmCenter]);
end;
Вариант 2
Как обновить одну строку не переоткрывая DataSet
>можно ли только одну строку обновить?
можно и нужно
ADODS.Properties['Unique Table'].Value := 'table';
ADODS.Properties['Resync Command'].Value := 'select * from table where ID = ?';
ADODS.Properties['Update Resync'].Value := adResyncAll;
ADODS.UpdateCursorPos;
ADODS.Recordset.Resync(adAffectCurrent,adResyncAllValues);
ADODS.Resync([rmExact]);
----------------------------------------------------------------------------------------------