| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Delphi2007-IBDataSet. Lookup field |
| Автор: dtp 29.6.2009, 13:01 |
| Я новичек. В IBDataSet создал 2 lookup дополнительных поля. Таблицы заполнены данными, но в lookup только в некоторых ячейках отображаются данные, иногда они появляются только если повторно ввести тот же самый номер в ключевое поле (столбец). То есть, в основной таблице храню ID имени и профессии, а в других таблицах - сами имена и профессии, и оттуда пытаюсь брать данные. Но уже на стадии проектирования видно, что большинство ячеек в lookup полях пустое. Это выглядит так: ID | Name_ID|Prof_ID| Name | Prof | 1 |1 |1 |Александр| | 2 |1 |1 | | | 3 |2 |1 |Олег | Строитель| 4 |3 |4 |Татьяна | Дизайнер | Использую Delphi2007, FireBird, IBExpert. Создал базу данных. В ней 3 таблицы: 1 Таблица: ID:Integer Name_ID:Integer Prof_ID:Integer 2 Таблица: ID:Integer Name:Char[20] 3 Таблица: ID:Integer Prof:Char[20] В клиенте исползую 3 цепочки: IBDatabase-IBTransaction-IBDataSet1-DataSource-DBGrid +IBTransaction-IBDataSet-DataSource-DBGrid +IBTransaction-IBDataSet-DataSource-DBGrid |
| Автор: Akella 29.6.2009, 23:52 |
| Хм... Может ты неправильно связал? |
| Автор: dtp 30.6.2009, 11:13 |
| Вот ссылка на файл - в нем база данных и клиент с исходниками. http://files.wyw.ru/3744134 CodeGear Delphi2007, FireBird 2.5 Beta, компоненты InterBase Может быть можете прокоментировать, почему созданные в IBDataSet 2 lookup поля не отображаются (или частично отображаются)? Спасибо. |
| Автор: Akella 1.7.2009, 09:01 |
| Ты так и не написал, в какой кодировке создавалась база. Добавлено через 1 минуту и 22 секунды Советую убрать с FormActivate тот код. Событие FormActivate может быть вызвано за время работы приложения много раз. И каждый код в этом событии будет выполняться. Добавлено через 6 минут и 33 секунды Зачем ты для каждого НД создал отдельную транзакцию? |
| Автор: Akella 1.7.2009, 09:31 |
| Чувааак, О_о ты зачем присвоил компонентам IBDataSet2 и IBDataSet3 Datasource1? Ты где такое вычитал? Добавлено через 1 минуту и 7 секунд Извини, исправленный проект выложить не могу, мой комп ща под капельницей. |
| Автор: dtp 1.7.2009, 20:25 |
| Akella, В компонентах IBDataSet2, IBDataSet3 в свойстве DataSource присвоен IBDataSet1, потому что в них используются такие SQL-запросы: select * from TBL_NAMES where (ID_NAMES=:NAME_ID) select * from TBL_PROF where (ID_PROF=:PROF_ID) NAME_ID и PROF_ID берутся из IBDataSet1. Приём взят из книги "Библия Дельфи", никаких других, более дельных примеров не нашлось. Жалко, что не можешь поделиться примером. А что насчет lookup полей? |
| Автор: Akella 2.7.2009, 10:56 |
Я уже ответил. Повторюсь Добавлено через 1 минуту и 3 секунды А если тебе нужно Master-Detail, то кинь на форму отдельные наборы данных (НД). Нельзя использовать один и тот же НД и для lookup полей, и для Master-Detail. |