- Delphi refreshrecord не работает
- Devart Forum
- Принудительное обновление записи
- Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Re: Принудительное обновление записи
- Народ как правильно сделать обновление «1-ой текущей возвращенной записи»
- Delphi refreshrecord не работает
- Components for Delphi and C++ Builder.
- Вывод обновленной строки в DbGridEh
- Кто сейчас на форуме
Delphi refreshrecord не работает
Здравсвтвуйте. При попытке обновить текущую запись в TClientDataSet через RefreshRecord на клиента прокачиваются все данные выборки. Вопрос: Как сдалать так, чтобы при вызове ClientDataSet.RefreshRecord с сервера считывалась именно та запись, которую мне нужно обновить на клиенте.
Erik ( 2002-10-21 16:48 ) [1]
А что при Refresh происходит?
Polevi ( 2002-10-21 17:44 ) [2]
в НД должно быть поле с флагом Key в ProviderFlags
Alexxx9801 ( 2002-10-21 18:03 ) [3]
2 Erik:
При Refresh происходит следующее: из базы закачивается весь набор данных (100 — 500 — 20000 записей), в нем находится запись, соответствуя текущей в ClientDataSet и обновляются значения полей. А мне не нужно считывать заново все записи. Достаточно только одну, соответствующую текущей. Я даже готов отдельный запрос написать, который выдает ту единственную нужную мне запись. Вот только куда его вставить?
2 Polevi:
Есть такое поле. Оно же первичный ключ в таблице.
Alexxx9801 ( 2002-10-22 15:20 ) [4]
Ну что, так никто и не знает?
Короче, если ты готов ради этой «мути» использовать целый запрос, то:
1) Создай 2-ой объект TClientDataSet на форме пользователя.
2) Настрой его на тот же провайдер и все такое, как у первого экземпляра класса TClientDataSet.
3) В свойство TClientDataSet. CommandText второго экземляра, пиши запрос:
Select * From Where
= ;
Затем вызывай метод TClientDataSet. Execute
4) Получаешь свою обновленную запись во втором экземпляре объекта TClientDataSet. И далее решаешь, ЧТО ДЕЛАТЬ , но это делать нужно уже ручками. Обновляешь запись в первом экземпляле на ту, которая во втором экземпляре класса TClientDataSet.
Вообще, свойство( CommandText ) отвечает за содержание запроса, который будет выполнен на сервере и результат которого будет помещен в соответствующий экземпляр класса TClientDataSet.
А метод TClientDataSet. Execute непосредственно передают содержание SQL — запроса для выполнения, через провайдер на сервер приложений.
— тебе оно известно, т.к. запись редактируется, и значит она была добавлена уже ранее.
Polevi ( 2002-10-22 17:31 ) [6]
создай наследника TDatasetProvider
перегрузи в нем
function InternalRowRequest(const Row: OleVariant; RequestType: TFetchOptions): OleVariant; override;
именно эта ф-ия вызывается при RefreshRecord на клиенте
Источник
Devart Forum
Discussion forums for open issues and questions concerning database tools, data access components and developer tools from Devart
Принудительное обновление записи
Принудительное обновление записи
Сообщение Rajoe » Сб 20 окт 2012 13:05
Re: Принудительное обновление записи
Сообщение AndreyZ » Пн 22 окт 2012 07:36
dbMonitor отображает запросы если включены опции TMSSQLMonitor.Active и TMSSQLMonitor.Options.moDBMonitor . Убедитесь что они включены. Я выполнил следующий код:
Re: Принудительное обновление записи
Сообщение Rajoe » Вт 23 окт 2012 10:33
Re: Принудительное обновление записи
Сообщение AndreyZ » Вт 23 окт 2012 11:07
Re: Принудительное обновление записи
Сообщение Rajoe » Вт 23 окт 2012 17:17
Re: Принудительное обновление записи
Сообщение AndreyZ » Ср 24 окт 2012 09:02
Re: Принудительное обновление записи
Сообщение Rajoe » Ср 24 окт 2012 14:17
Re: Принудительное обновление записи
Сообщение AndreyZ » Ср 24 окт 2012 14:23
Re: Принудительное обновление записи
Сообщение Rajoe » Чт 25 окт 2012 09:35
Re: Принудительное обновление записи
Сообщение AndreyZ » Чт 25 окт 2012 12:58
Re: Принудительное обновление записи
Сообщение Rajoe » Чт 25 окт 2012 13:28
Re: Принудительное обновление записи
Сообщение AndreyZ » Пт 26 окт 2012 09:01
Re: Принудительное обновление записи
Сообщение Rajoe » Пн 29 окт 2012 15:33
Из него видно, что RefreshRecord всегда, при любых условиях вызывается строго после отправки запроса на вставку записи на сервер. То есть, к моменту выполнения RefreshRecord запись на сервере уже есть. Да и значения это не имеет, поскольку RefreshRecord не делает никаких прямых проверок наличия записи на сервере, во всяком случае, в Wireshark я ничего такого не увидел. Или не разглядел?
Согласен, решение проблемы найдено, просто хочется разобраться с механизмом работы компонента, чтобы уверенней с ним работать.
Re: Принудительное обновление записи
Сообщение AndreyZ » Вт 30 окт 2012 10:21
Re: Принудительное обновление записи
Сообщение Rajoe » Вт 30 окт 2012 16:08
Источник
Народ как правильно сделать обновление «1-ой текущей возвращенной записи»
Доброе утро всем
Если кто с FireDAC работал — опишите минимально необходимые шаги — чтобы обновить в датасет только одну
строку после вставки — второй день бьюсь просто WorkerQ.Refresh; работает а WorkerQ.RefreshRecord; нет
я его и с параметром false и без параметра передавал — все без толку
я использую FDQuery и подключенный к нему FDUpdaterSQL
в свойстве FDUpdateWorker.FetchRowSQL в дизайнере такой запрос зашивал
так же пробовал вместо w.id_worker=:old_id_worker передать id новой вставляемой записи из переменной вручную
Основная проблема в том что данные после RefreshRecord новые не появляются вообще
Свойство WorkerQ.updateoption.refreshmode стоит в rmOnDemand
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как сделать чтобы при перемещении по форме «Задачи» на любой вкладке в поле «ИДЗадачи_Фрм».
Настройки таблицы, исходное состояние таблицы — см. скрин. 1. ДатаВремя для новой записи.
Сценарий: 1. Ставлю галку в «запись2» «флаг1» — все флаги таблицы становятся = «Ложь» .
Вопрос еще -актуален, скинте фрагмент кода у кого есть где происходит refresh только одной записи которая только что была вставлена в таблицу (и чтоб информация в гриде изменилась без переоткрытия датасета или рефреша на весь датасет)
просто в документации написано, что есть данный механизм и он должен работать — но у меня не срабатывает
срабатывает только просто refresh на всю выборку
База MySQL 5.5
Сначала
1 Перевожу датасет в режим буферизации (CasheUpdate:=true)
2 Перевожу датасет в режим редактирования Edit
Когда пользователь применяет изменнения
3 Стартую пишущую транзакцию (пишущая своя на каждый модуль настроена на датасеты, читающая общая и лежит в дата модуле и настроена на подключение)
4 если в наборе данных есть изменения ApplyUpdates = 0 then CommitUpdates и trWrite.Commit; — коммит транзакции
5 если не было исключений то CasheUpdate:= false и надо грид обновить
и если вызвать Refresh у датасета — он действительно обновляется но по идее как я понял
мне вообще ничего вызывать не нужно поскольку есть связь между компонентами FDQuery и FDUpdaterSQL
и за обновление должен отвечать последний и делать это в автоматическом режиме для
этого в нем прописаны запросы на вставку, модификацию,удаление и возврат одной обновленной записи — но этого
не происходит. А когда делаю рефреш вручную то видно, что происходит обновление всей выборки -курсор прыгает на
другую запись
Источник
Delphi refreshrecord не работает
Использую DOA
Мне надо обновить одно значение.
//qItems.FieldByName(«normal_qty»).AsInteger = 153
В TOracleDataSet на OnApplyRecord делаю:
if Action=»R» then
begin
qItemsRefresh.SetVariable(«unit_id»,qItems.GetVariable(«session_id»));//unit_id поля нет в qItems
qItems.DeclareQueryVariables(qItemsRefresh);
qItems.SetQueryVariables(qItemsRefresh);
qItemsRefresh.Execute;
//qItems.FieldByName(«normal_qty»).AsInteger = 153
//qItemsRefresh.FieldAsItneger(«normal_qty») = 152
qItems.GetQueryVariables(qItemsRefresh);
//qItems.FieldByName(«normal_qty»).AsInteger = 153
Applied:=True;
end;
В чем подстава? Почему не обновляется?
ANB © ( 2007-05-31 13:51 ) [1]
> В чем подстава? Почему не обновляется?
Не вижу рефрешрекорда. Насколько я помню, чтобы в DOA работал рефрешрекорд нужно явно затянуть в запросе rowid. И тогда нужно просто вызвать метод.
К чему этот код — непонятно.
Тфьу ( 2007-05-31 14:05 ) [2]
Если в запросе агрегирующие функции или union, то Refresh по rowid не работает (RTFM Allroundautomations) приходится самому писать RefreshSQL и вот этим синтаксисом он должен из RefreshSQL подтягивать данные. Но не подтягивает. 🙁
Если тебе интересен именно рефрешрекорд то он вызывается просто из кода на:
qItems.RefreshRecord
Я привел тут только эвент OnApplyRecord
Sergey13 © ( 2007-05-31 14:09 ) [3]
> [2] Тфьу (31.05.07 14:05)
> Если в запросе агрегирующие функции или union
Тогда что ты там меняешь?
Тфьу ( 2007-05-31 14:20 ) [4]
У меня есть запрос вида:
select item_id, item_name, normal_qty
from
(
select item_id, sum(normal_qty) normal_qty
from norm_values
where unit_id = :unit_id
) v, dict_norm d
where d.item_id = v.item_id
мне надо normal_qty обновить для определенного item_id
Я пишу RefreshSQL:
select sum(normal_qty) normal_qty
from norm_values
where unit_id = :unit_id
and item_id = :item_id
> [4] Тфьу (31.05.07 14:20)
> У меня есть запрос вида:
И он работает? Сомнительно мне что-то.
Тфьу ( 2007-05-31 14:51 ) [6]
select d.item_id, d.item_name, v.normal_qty
from
(
select item_id, sum(normal_qty) normal_qty
from norm_values
where unit_id = :unit_id
) v, dict_norm d
where d.item_id = v.item_id
Вот так работает. Я просто не хочу тут приводить полный запрос на полторы страницы.
Народ, если вы не знаете, как делается RefreshRecord в DOA, а тем более сделанный через DeptAPI — не флудите тут.
Тфьу ( 2007-05-31 15:05 ) [7]
Сам нашел в чем дело.
GetQueryVariables ,берет значения только из параметров. Поэтому пришлось делать практологически:
select sum(normal_qty) normal_qty
from norm_values
where unit_id = :unit_id
and item_id = :item_id
and (1=1 or :normal_qty = :normal_qty)
Источник
Components for Delphi and C++ Builder.
| Текущее время: 19 окт 2021, 15:05 |
Часовой пояс: UTC
Вывод обновленной строки в DbGridEh
| Страница 1 из 1 | [ Сообщений: 8 ] |
|
| Автор | Сообщение | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| nimed74 | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Зарегистрирован: 19 мар 2014, 18:47 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||