Вниз
Скачать: 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.013 c
11-1201597213
Elec3C
2008-01-29 12:00
2009.06.21
Баг ListBox.DoubleBuffer := True


2-1240986826
Nameziz
2009-04-29 10:33
2009.06.21
New и GetMem


15-1234784192
Rule
2009-02-16 14:36
2009.06.21
Ура хвастаюсь, свершилось. Началось внедрение нашего ПО в Стрим.


2-1241097180
Vadim-nikodim
2009-04-30 17:13
2009.06.21
ShellExecute


15-1239620213
ZeroDivide
2009-04-13 14:56
2009.06.21
Лицензионные фильмы




   Наверх