Форум: "Базы";
Текущий архив: 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.47 MB
Время: 0.044 c