Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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? Ты где такое вычитал? smile

Добавлено через 1 минуту и 7 секунд
Извини, исправленный проект выложить не могу, мой комп ща под капельницей.  smile 

Автор: 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. 
Приём взят из книги "Библия Дельфи", никаких других, более дельных примеров не нашлось.

Жалко, что не можешь поделиться примером.  smile  smile 

А что насчет lookup полей?

Автор: Akella 2.7.2009, 10:56
Цитата(dtp @  1.7.2009,  20:25 Найти цитируемый пост)
А что насчет lookup полей? 

Я уже ответил. Повторюсь

Цитата(Akella @  1.7.2009,  09:31 Найти цитируемый пост)
ты зачем присвоил компонентам IBDataSet2 и IBDataSet3 Datasource1?


Добавлено через 1 минуту и 3 секунды
А если тебе нужно Master-Detail, то кинь на форму отдельные наборы данных (НД). Нельзя использовать один и тот же НД и для lookup полей, и для Master-Detail.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)