Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1239829821
dmk
2009-04-16 01:10
2009.06.21
Совместный доступ


11-1202864756
Jon
2008-02-13 04:05
2009.06.21
Applet and Forms?


15-1239655688
Petr V. Abramov
2009-04-14 00:48
2009.06.21
TUser - с днюхой


4-1211184805
Barloggg
2008-05-19 12:13
2009.06.21
как отобрать у винды мышь?


2-1241521321
Леша
2009-05-05 15:02
2009.06.21
Обновление одной записи.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский