Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

разное содержимое комобобокса в одном столбце 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.052 c
15-1168423930
alex_***
2007-01-10 13:12
2007.01.28
Excel: именованный диапазон. Как изменить


15-1168014485
vidiv
2007-01-05 19:28
2007.01.28
Купил себе стиральную машину...


15-1168240374
Slider007
2007-01-08 10:12
2007.01.28
С днем рождения ! 8 января


1-1165427944
du_hast
2006-12-06 20:59
2007.01.28
Принудительный вызов Hint -а


8-1148644131
Михайлов Антон
2006-05-26 15:48
2007.01.28
Как слушать радио?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский