Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

разное содержимое комобобокса в одном столбце DbGridEh   Найти похожие ветки 

 
topperz   (2006-11-08 14:08) [0]

Сначала фрагмент БД:

1 таблица – Сотрудники:
КодСотрудника (INTEGER) – первичный ключ
Фамилия, Имя, Отчество и т.д. – разные информативные поля

2 таблица – Проекты:
КодПроекта (CHAR[5]) – первичный ключ
НазваниеПроекта (CHAR[10])

3 таблица – ИсторияПроектов:
Год (INTEGER) – первичный ключ
КодПроекта (CHAR[5]) – первичный ключ

Т.е. в начале каждого года в эту таблицу заносятся действующие на этот год проекты.

4 таблица – ИсторияСотрудников:
Год (INTEGER) – первичный ключ
КодСотрудника (INTEGER) – первичный ключ
КодПроекта (CHAR[5]) – первичный ключ

Ну соответственно здесь хранится инфа о том, кто в каком проекте и в каком году работал.

Надо мне сделать такую штуку. В DBGridEh выводятся данные из 4 таблицы. Надо, чтобы в столбце КодПроекта вместо самого кода был комбобокс со списком названий проектов. Но этот список должен быть разным для каждой строки и зависеть от указанного в данной строке года, т.е. содержать названия только тех проектов, которые действуют в указанном году (в соответствии с таблицей ИсторияПроектов).

Я пытался в событии OnEditButtonClick для этого столбца определять свойства KeyList и PickList путем параметрического запроса. Но это привело к такой проблеме:
Пусть например есть в таблице строки:
2004  1045  PR123
2005  1045  PR230

Щелкаем по комбобоксу на строке с 2005 годом, выпадает список с названиями проектов, актуальных на 2005 год, вроде все нормально. Но если для 2005 года нет проекта с кодом PR123 (который был для 2004 года), то в строке с 2004 годом в столбце КодПроекта останется пустое место (что понятно, раз код PR123 не задан в свойстве KeyList для 2005 года)

Надеюсь, что понятно описал проблему. Есть у кого какие-нибудь соображения на этот счет?

P.S. Использую BDS 2006


 
Stanislav ©   (2006-11-08 14:18) [1]

есть у колонки еще свойство ListSource Куда подключается  отфильтрованный запрос .


 
Sergey13 ©   (2006-11-08 15:41) [2]

> [0] topperz   (08.11.06 14:08)

Так можно сделать, ИМХО, только если рисовать свой комбобокс вместо встроенного на лукап-поле. Стандартно не прокатит, ИМХО, опять же.


 
Stanislav ©   (2006-11-08 15:51) [3]

Sergey13 ©   (08.11.06 15:41) [2]
У него EhLib,а там это решено. Настраивается Lookup поле по неотфильтрованному запросу, а в колонке грида указываешь ListSource, который можно фильтровать.


 
Sergey13 ©   (2006-11-08 15:58) [4]

> [3] Stanislav ©   (08.11.06 15:51)

Это в 4-ке появилось? Вроде в 3.6-ке я такого не помню.


 
Stanislav ©   (2006-11-08 16:01) [5]

В 3.6 тоже есть. Может не обращал внимания?


 
Stanislav ©   (2006-11-08 16:02) [6]

DropDownBox->ListSource


 
Sergey13 ©   (2006-11-08 16:03) [7]

> [5] Stanislav ©   (08.11.06 16:01)

Скорее всего.


 
topperz   (2006-11-08 18:19) [8]

Так, не совсем понятно.
Описываю свои действия:
1. Создаю ADODataSet на таблице ИсторияСотрудников, в него добавляю лукап-поле, основанное на ADOQuery, фильтр у которого не установлен.
2. Ну естественно связываю грид с датасетом через DataSource.
3. Создаю ADOQuery2, связываю с ним DataSource2
4. В гриде для столбца, связанного с лукап-полем, в свойстве ListSource указываю DataSource2.
5. Потом функция для события OnFormShow:


ADOQuery2.Close;
ADOQuery2.Filter := "ИсторияПроектов.Год=" + IntToStr(DBGridEh1.Columns[0].Field.AsInteger);
ADOQuery2.Filtered := true;
ADOQuery2.Open;


Вываливается ошибка: Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру

Наверное я неправильно устанавливаю фильтрацию. Подскажите, что не так?


 
ЮЮ ©   (2006-11-09 04:14) [9]


> 5. Потом функция для события OnFormShow:

Т.е. фильтр, ели и получится, применится только раз

Предлагаю идти тем же путем параметрического запроса, указав для него DataSorce - отображаемый НД, т.е. установив Master-Detail связь. Тогда при переходе на другую запись будет обновляться и запрос.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
2-1168324858
Extar
2007-01-09 09:40
2007.01.28
Дебугер не останавливается на BP


15-1167826006
melkyi
2007-01-03 15:06
2007.01.28
Интересная задача по ДМ


2-1168473975
AnEnd
2007-01-11 03:06
2007.01.28
Как быстро скопировать record ?


15-1167841785
fs_more
2007-01-03 19:29
2007.01.28
совместный доступ к массиву из потоков


15-1168175654
Rouse_
2007-01-07 16:14
2007.01.28
Дельфи глазами Чайника