C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблемы с master-detail, InterBase + C++Builder6
Денис
Отправлено: 11.07.2005, 12:57


Не зарегистрирован







Здравствуйте! Есть 3 таблицы Отделы (dep), Подразделения(sub) и Статистика(stat). В обработчике события AfterScroll для sub делаю выборку из stat по году(вводится на форме) и по подразделению из sub. Sub и dep связаны master-detail.
Если выбрал отдел в таблице dep, к-рый не имеет подразделения, то AfterScroll для sub не срабатывает и в stat остается содержимое предыдущего запроса, что не желательно. Как этого избежать?
Guest
Отправлено: 11.07.2005, 13:08


Не зарегистрирован







Например анализировать в DataSource для dep OnDataChange с Field = NULL и стирать из окна статистику. А еще удобно "отложенный" master-detail (при переходах по master detail менять спустя 1-2 сек)
Денис
Отправлено: 12.07.2005, 10:28


Не зарегистрирован







Здравствуйте! Спасибо за ответ. Как лучше реализовать "програмно" отложенный механизм мастер-деталь?
Событи OnDataChenge лучше применить для sub, т.к. для статистики нам нужен идентификатор этого подразделения.
Guest
Отправлено: 12.07.2005, 17:27


Не зарегистрирован







QUOTE

Как лучше реализовать "програмно" отложенный механизм мастер-деталь?

Как лучше — решать вам. Я делаю так:
При изменении положения курсора dataset'а master взвожу таймер на N
секунд (или ставлю в очередь к таймеру). По истечении этого времени или раньше, если потребовалось принудительно обновить подзапрос, выполняю подзапрос detail в "ручном режиме".

QUOTE

Событи OnDataChenge лучше применить для sub

Если у вас для каждой строки sub своя статистика, то да, иначе к dep. Но смотрите сами.
Денис
Отправлено: 13.07.2005, 16:02


Не зарегистрирован







Здравствуйте! У меня как раз статистика для каждой строки sub. Ваш совет насчет OnDataChange очень помог! Спасибо.
Каким способом(методом) можно быстро очистить таблицу?
Я использовал запрос тот же запрос, что и в остальных случаях, только sub_id = NULL.
Guest
Отправлено: 13.07.2005, 16:13


Не зарегистрирован







QUOTE

Каким способом(методом) можно быстро очистить таблицу?
Я использовал запрос тот же запрос, что и в остальных случаях, только sub_id = NULL.

Не понял. Очистить таблицу (долго) Delete From table_name. Быстро — зависит от сервера, например в Oracle Ttruncate Table table_name. Причем здесь sub_id = NULL?
А если контролы, то можно и так.

Вернуться в Работа с базами данных в C++Builder