![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не происходит RefreshRecord в Oracle
Тфьу © (2007-05-31 13:40:00)Использую 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;
В чем подстава? Почему не обновляется?
Тфьу (2007-05-31 15:05:00) [1]Сам нашел в чем дело.
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)
А OnApplyRecord:
qItemsRefresh.SetVariable('unit_id',qItems.GetVariable('session_id'));
qItems.DeclareQueryVariables(qItemsRefresh);
qItems.SetQueryVariables(qItemsRefresh);
qItemsRefresh.Execute;
qItemsRefresh.SetVariable('normal_qty',qItemsRefresh.FieldAsInteger('normal_qty' ));
qItems.GetQueryVariables(qItemsRefresh);
Вот так все работает.
Тфьу (2007-05-31 14:51:00) [2]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 - не флудите тут.
Sergey13 (2007-05-31 14:36:00) [3]> [4] Тфьу (31.05.07 14:20)
> У меня есть запрос вида:
И он работает? Сомнительно мне что-то.
Тфьу (2007-05-31 14:20:00) [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
Sergey13 (2007-05-31 14:09:00) [5]> [2] Тфьу (31.05.07 14:05)
> Если в запросе агрегирующие функции или union
Тогда что ты там меняешь?
Тфьу (2007-05-31 14:05:00) [6]Если в запросе агрегирующие функции или union, то Refresh по rowid не работает (RTFM Allroundautomations) приходится самому писать RefreshSQL и вот этим синтаксисом он должен из RefreshSQL подтягивать данные. Но не подтягивает. :(
Если тебе интересен именно рефрешрекорд то он вызывается просто из кода на:
qItems.RefreshRecord
Я привел тут только эвент OnApplyRecord
ANB (2007-05-31 13:51:00) [7]
> В чем подстава? Почему не обновляется?
Не вижу рефрешрекорда. Насколько я помню, чтобы в DOA работал рефрешрекорд нужно явно затянуть в запросе rowid. И тогда нужно просто вызвать метод.
К чему этот код - непонятно.