Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не происходит 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. И тогда нужно просто вызвать метод.
К чему этот код - непонятно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо