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

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

Обновление lookup кэша при автоматическом обновлении НД [D5, Paradox]


Тучудище ©   (2005-06-07 12:14:00) 

Hello all!!!
Кратко опишу ситуацию:
Имееться НД, который содержит подстановочные поля, у данных полей включено кэширование значений для подстановки.
При работе с локальными БД (в данном случае paradox) как вам известно имеется следующая особенность, когда один из пользователей добавил новую запись, остальные при листании НД с помощью сетки увидят данную запись(более как автодобавление новых записей это назвать не могу)
Теперь ближе к моей ситуации:
Пользователь А добавил запись с несколькими новыми значениями для подстановочных полей которые он сам же и создал
Пользователь Б просматривая НД обнаружил новую запись но поскольку новые значения для подстановки в кэш не попали то соответсвенно lookup поля будут пустыми
Вид на запись пользователя а:
№ ордера |Дата ордера |ФИО             | вид док-та    |
1978     |07/06/05    |Иванов И.И.     | Нац. паспорт  |
Вид на запись пользователя б:
№ ордера |Дата ордера |ФИО             | вид док-та    |
1978     |07/06/05    |                |               |

Собственно сам вопрос, каким образом можно отловить появление новых записей в НД таким вот образом.

В качестве нд используется компонент TQuery с RequstLive:=True


ЮЮ   (2005-06-09 10:05:00) [1]

>так оно сейчас и работает... :-( блин

И чем не нравится?


Тучудище   (2005-06-09 10:00:00) [2]

готично.... так оно сейчас и работает... :-( блин... ну ладно оставлю как есть....


ЮЮ   (2005-06-09 09:51:00) [3]

>каким образом можно отловить появление новых записей в НД таким вот образом

procedure TCustomDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
 ...
 Value := DrawColumn.Field.DisplayText;
 ...

function TField.GetDisplayText: string;
begin
 Result := '';
 if Assigned(FOnGetText) then
   FOnGetText(Self, Result, True) else
   GetText(Result, True);
end;

Поэтому, достаточо в OnGetText  
 Text := TFieldCrack(Sender).GetText(Result, True);
 if Text = '' then //следует обновить


Тучудище   (2005-06-09 06:42:00) [4]

Ни одного каммента за 2 суток... кашмар...


Тучудище   (2005-06-08 06:54:00) [5]

>А почему это не делать BeforeRefresh соновного НД ?

Да потому, что он не срабатывает на автоматическое обновление, в BeforeRefresh и так стоит обработчик, который следит за актуальностью кэша!


вп   (2005-06-07 16:35:00) [6]


> 2)RefreshLookupCache в AfterScroll(торомза будут ужастные
> и не нужно это никому)

А почему это не делать BeforeRefresh соновного НД ?


Тучудище   (2005-06-07 16:21:00) [7]

а жаль, почитать очень хочется по этому поводу.... :-(
даже что то в хелпе ни чего не попадается по данному поводу....


вп   (2005-06-07 16:08:00) [8]


> 3)Отловить событие автообновления НД(можно ли???)

Видел подобное на Королевстве Делфи.. Но точно, где не подскажу.. Помню, что применяется call-back процедуры (вроди)..


Тучудище   (2005-06-07 16:03:00) [9]

Блин!
Ладно пойду простым путем варианта родилось в голове 2
1)CachedUpdates(наборов данных много...)
2)RefreshLookupCache в AfterScroll(торомза будут ужастные и не нужно это никому)
3)Отловить событие автообновления НД(можно ли???)


Наверх

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