Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];
ВнизОбновление одной записи. Найти похожие ветки
← →
Леша © (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 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c