Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA и Lookup / 8 сообщений из 8, страница 1 из 1
19.03.2003, 10:29
    #32122640
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
Выставляю себя на посмешище, потому что не знаю, как сделать следущую простую вещь - один раз загрузить справочник улиц из базы в память и больше туда не лазтиь, если не нажать кнопочку "Обновить"...
Вобщем, использую Direct Oracle Access, хотелось бы иметь DataSet, на который ссылаются многочисленные Lookup-поля, чтобы они в базу лазили по минимуму...
...
Рейтинг: 0 / 0
19.03.2003, 11:06
    #32122681
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
И что?
Ну и держи справочник в этом датасете а из других нужных мест на него ссылайся.

Или в чем другом проблема?
...
Рейтинг: 0 / 0
19.03.2003, 11:11
    #32122688
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
Проблема в том, что он (не знаю кто, наверное TDataSet.Locate) десятки раз загружает его по новой из базы, а я прексрано знаю, что он редко изменяется - и не хотелось бы, почему целиком не загнать в кэш и не брать там?
...
Рейтинг: 0 / 0
19.03.2003, 11:27
    #32122706
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
>Проблема в том, что он (не знаю кто, наверное TDataSet.Locate) десятки раз загружает его по новой из базы.

Да не должен он такого делать, если ты сам его не закрываешь. А TDataSet.Locate ты где используешь, для датасета справочника что ли. Как делаешь то лукап поля напиши.
...
Рейтинг: 0 / 0
19.03.2003, 12:08
    #32122773
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
>Да не должен он такого делать, если ты сам его не закрываешь.
Сам не закрываю - совершенно точно...
>Как делаешь то лукап поля напиши.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
          Field:={ например TStringField}.Create;
          Field.FieldKind:=fkLookup;
          Field.Size:=...;
          Field.LookupDataSet:=...;
          Field.KeyFields:=...;
          Field.LookupKeyFields:=...;
          Field.LookupResultField:=...;
          Field.LookupCache:=true;


Братцы а может он насильно Refresh делает, когда в таблице с Lookup-полями Refresh происходит (или RefreshRecord)? Но в любом случае должен быть способ отказаться от этого...
> А TDataSet.Locate ты где используешь, для датасета справочника что ли.
я хотел написать TDataSet.Lookup - нет я явно не использую, но думаю что используют Lookup-поля...
...
Рейтинг: 0 / 0
19.03.2003, 13:21
    #32122884
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
Ты че, в рантайм их создаешь?

И вот это вот попробуй:
Код: plaintext
Field.LookupCache:=FALSE;
...
Рейтинг: 0 / 0
19.03.2003, 13:27
    #32122891
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
Блин, ну насоветовал!!!

Хотел написать TRUE, а написал FALSE. Да и у тебя это уже есть...
...
Рейтинг: 0 / 0
19.03.2003, 14:41
    #32122969
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOA и Lookup
Да... Разобрался я похоже... Кто бы мог подумать, но:

1. Если вы используете LookupCache=True - в момент открытия таблицы делается полный цикл по всем записям таблицы справочника - они загоняются в этот LookupCache. И так - для каждого Lookup-поля в каждой таблице!

2. Если на момент шага 1, DataSet со справочником ещё не открыт - то после всего этого он ещё и закрывает его...
Соответственно в моём случае, справочник загружался по новой для каждого Lookup-поля - он закрывался/открывался (хотя я явно не закрывал его).

Смотрите не ступите на мои грабли!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DOA и Lookup / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]