Вниз
Скачать: CL | DM;

Обновление одной записи.   Найти похожие ветки 

 
Леша ©   (2009-05-05 15:02) [0]

У меня есть открытый в гриде набор данных. Я модифицирую запись. Делаю это не через грид, а через попап-форму:
2-клик на запись появляется форма, в нее передаются параметры записи. Запись модифицируется через хранимую процедуру. Форма закрывается.
Как сделать, чтобы изменения отобразились в начальном гриде, без переселекта всех данных? Т.е., чтобы обновилась одна запись.

ADO, MSSQL.


 
Лёша   (2009-05-05 15:19) [1]

Нашел, вроде:
TCustomADODataSet.UpdateBatch(arCurrent)


 
Лёша   (2009-05-05 15:37) [2]

Нет это совсем не то.

Странно, почему я могу модифицировать одну запись, написав:
Query.Edit;
Query.FieldValues["Reset"] := 0;
Query.Post;
И ничего нет, для "перечтения" записи.


 
Сергей М. ©   (2009-05-05 15:57) [3]

Description

Call Refresh to ensure that an application has the latest data from a database. For example, when an application turns off filtering for a dataset, it should immediately call Refresh to display all records in the dataset, not just those that used to meet the filter condition.

Note: The Refresh method does not work for all TDataSet descendants. In particular, TQuery components do not support the Refresh method if the query is not “live”. To refresh a static TQuery, close and reopen the dataset.

Note: Most datasets try to maintain the current record position when you call refresh. However, this is not always possible. For example, the current record may have been deleted from the server by another user. Unidirectional datasets have no mechanism for locating the current record after a refresh, and always move back to the first record.


 
sniknik ©   (2009-05-05 16:18) [4]

> Нет это совсем не то.
это то самое, но у тебя видимо не ltBatchOptimistic.

> И ничего нет, для "перечтения" записи.
есть Resync у рекордсера (не датасета! там несколько иное).


 
sniknik ©   (2009-05-05 16:32) [5]

> это то самое, но у тебя видимо не ltBatchOptimistic.
и конечно если ты этим пытаешься обновить одну запись на сервере. а не прочитать. не совсем понял сначала.

Resync самое то.

но вообще я бы посоветовал убрать лишнюю процедуру и менять данные в датасете... ну и что они в другой форме меняются.


 
Леша ©   (2009-05-05 17:12) [6]

Refresh вытягивает все записи, причем по одной.

Работающий вариант такой:
Recordset.Resync(adAffectCurrent, adResyncAllValues);
Resync([]);

В InternalRefresh Recordset.Resync вызывается с adAffectAll.

Поэтому, задача решается переопределением InternalRefresh, который учитывает внешний флаг (тек. запись или все). И тогда можно юзать Refresh, что б срабатывали всякие Афтер-Вефоре.

Всем спасибо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
15-1239741954
Юрий
2009-04-15 00:45
2009.06.21
С днем рождения ! 15 апреля 2009 среда


15-1239229185
Хитрий Лис
2009-04-09 02:19
2009.06.21
Гууглмапс - странные объекты


15-1239538451
Kerk
2009-04-12 16:14
2009.06.21
.Net Compact Framework


15-1239395408
Юрий
2009-04-11 00:30
2009.06.21
С Днём рождения ! 11 апреля 2009 суббота


15-1239967211
passlight
2009-04-17 15:20
2009.06.21
Кому-нибудь нужны книги по программированию (базы данных, .NET)?




   Наверх