Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задать порядок обновления двух detail-таблиц, У одного master'а две детализации... 
V
    Опции темы
Tcin
Дата 30.1.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 7
Регистрация: 4.2.2008
Где: Екатеринбург

Репутация: нет
Всего: 1



Hi, All!

Не могу заставить корректно работать простую, казалось бы, штуку...
Вводная: есть два набора обрудования (различных типов), нужно просматривать в двух таблицах - по одной для каждого типа. Кроме того, оборудование разбито по категориям, нужно делать отбор в обеих таблицах по категориям. То есть, делаем таблицу с категориями (назовём её Master) и привязываем к ней две таблицы-детализации, по одной для каждого типа оборудования - Detail1 и Detail2. Всю эту красоту реализуем на 3-х ClientDataSet'ах (данные живут in memory). 
Дальше немного сложнее. Существует ещё и связь между Detail1 и Detail2: каждая запись в Detail2 может ссылаться ровно на одну запись в Detail1 (подразумевается foreign key) по двум полям: ИД категории и ИД устройства - и эту ссылку пользователь в таблице Detail2 видит. А в табличке Detail1 пользователь должен видеть, какая именно строка (устройство) из Detail2 привязана (или не привязана smile ) к каждой из строк Detail1. Связи между устройствами разных типов (из Detail1 и Detail2) - всегда в пределах одной категории. Реализуем добавлением lookup-поля в Detail1. И это даже работает. Иногда smile
Но возникает проблемка. При выборе новой категории в таблице Master обновляются наборы данных обеих детализаций, причём, lookup-поле оказывается пустым. Такое подозрение, что первым обновляется набор Detail1, когда Detail2 ещё пустой или содержит данные из другой категории - естественно, lookup в этом наборе ничего не находит. Если после заполнения обеих детализаций каким-либо образом (избыточно!) обновить данные в Detail1 - lookup заполняется корректно.
Вопрос такой: можно ли повлиять на то, в каком порядке заполняются данными различные детализации одного мастера? Или есть другое решение, желательно, без костылей?
PM   Вверх
Bose
Дата 30.1.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Tcin @  30.1.2009,  09:57 Найти цитируемый пост)
Вопрос такой: можно ли повлиять на то, в каком порядке заполняются данными различные детализации одного мастера? 
Или есть другое решение, желательно, без костылей? 

Можно. Я в таких случая, убирал связь master-detail в Designer-e и обновлял содержимое detail вручную. Точнее, у master писал примерно такой обработчик в событии OnAfterScroll. Примерно такой:
Код

DetailDataset1.Close;
DetailDataset1.ParamByName('DetailParam1').Value:=MasterDataset1.FieldByName('DetailField1').Value;
DetailDataset1.Open;

DetailDataset2.Close;
DetailDataset2.ParamByName('DetailParam2').Value:=MasterDataset1.FieldByName('DetailField2').Value;
DetailDataset2.Open;

PM MAIL WWW Skype   Вверх
Tcin
Дата 30.1.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 7
Регистрация: 4.2.2008
Где: Екатеринбург

Репутация: нет
Всего: 1



Bose, спасибо, вариант ясен.
Но в чистом виде не проканает smile, ибо у меня TClientDataSet и про ParamByName он не в курсе.
А так-то я и ищу пока вариант обхода с временным отключением связи master-detail... Но побочные эффекты полезли... Борюсь... Костыли подставляю...

Это сообщение отредактировал(а) Tcin - 30.1.2009, 12:50
PM   Вверх
Tcin
Дата 3.2.2009, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 7
Регистрация: 4.2.2008
Где: Екатеринбург

Репутация: нет
Всего: 1



Ставлю в тему крыжик, чтоб народ больше не смущать smile
На порядок обновления связей мастера с детализациями влиять так и не научился. Видимо, невозможно.
Для конкретного случая принято решение от Bose (в адаптированном виде). Перелезть нельзя - обойдём.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.