![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, уважаемые форумчане и все любители Delphi!
Давно не программировал на Delphi 7 и в связи с этим позабыл многое из того, что делал раньше. Выручайте! ![]() Моя проблема. Есть у меня таблица Main (в главной форме компонент MainDBGrid), куда помещаются данные ежедневного отчета (тема - аттракционы, зоопарк, аквапарк). Есть три таблицы Park, Waterpark и Zoo, соответственно. В главной таблице есть два поля: Территориальность (maLocationOf)(комбобокс из трех записей, Парк, аквапарк и зоопарк) и Объект (maObject). Собственно проблема как раз с полем Объект. Мне необходимо в зависимости от того, какое значение стоит в поле Территориальность для ТЕКУЩЕЙ записи в DGBrid'e сформировать список значений из определенной таблицы в PickList (одной из трех) ТОЛЬКО для данной записи. Так если надо изменить значение поля Территориальность, например, выбрать не Парк, а Зоопарк, то при изменении в поле Объект соответственно сразу бы формировался новый PickList из другой таблицы (Zoo, соответственно). Не пойму какое событие мне нужно. Пробовал и OnColEnter и OnEnter, OnCellClick в DBGrid и AfterScroll в ADOTable но результат двоякий. Работает криво, при переключении на другое поле список пропадает. Lookup поля по-моему, так вот динамически формировать нельзя? или это как-то с помощью ADOQuery можно сделать? Подскажите, как сделать точно и правильно, чтобы работало, как мне надо? Прикладываю программу в архиве и БД. Очень хотелось бы с этим разобраться. |
#2
|
|||
|
|||
![]() Беда вашего метода в том, что какое бы событие не использовалось (забыли еще про OnColExit - единственно возможное в этом случае событие), не поможет ничто.
Потому как при непосредственном редактировании в гриде этот прием работает не корректно. Факт: ввели данные в новую строку. "Парк" в территориальности и "Тир" в колонке Объект, затем вновь перешли на эту строку, выбрали в локализации "Аквапарк" и перешли на другую строку. Вопрос что осталось в колонке "Объект"? Правильно, нужен еще один геморрой для проверки правильности ввода (который как раз и может делаться в событии AfterScroll, но, к сожалению, не только в нем). Если бы добавление и редактирование происходило в отдельных компонентах ввода а запись в таблицу БД после того как введенные данные проверены, проблемы можно было бы избежать. |
#3
|
|||
|
|||
![]() Цитата:
Большое спасибо Вам!! ![]() Но здесь опять же как СВОЕВРЕМЕННО передавать компонентам текущие значения ячеек грида и, таким образом, СВОЕВРЕМЕННО же обеспечить реагирование на некорректность введенной информации... вот вопрос. ![]() |
#4
|
|||
|
|||
![]() Наверное для начинающих это действительно проблемная тема, но более или менее знакомого с разработкой БД - добавление и редактирование в отдельных компонентах общее место.
Только так и делают. Насчет своевременности можно не беспокоится. Передавать компонентам значения из строк набора данных занятие простое. А проверка на корректность ввода делается перед тем как записывают данные, а запись эта осуществляется либо в процедуре события OnClick кнопки (назовем ее "Сохранить") или, если редактирование происходит в отдельной форме, в процедуре события OnClose формы. Это как правило. В прицепе учебный пример такого приложения, где добавление и редактирование осуществляется в другой форме. |
#5
|
|||
|
|||
![]() Цитата:
Спасибо, пример интересный! Однако мне нужно немного не это. Мне необходимо, чтобы данные вводились именно через таблицу и в таблице же при изменении одного из полей (Парк, Аквапарк или Зоопарк) динамически изменялось бы другое поле в таблице - т.е. другие данные загружались бы как в комбо в то поле (если парк - аттракционы, аквапарк - горки и т.д.). Как реализовать именно такое?... Может какое-то событие для этого можно организовать? |
#6
|
|||
|
|||
![]() А кто может подсказать мне как организовать Lookup поле для любого столбца DBGrid'a моей БД, например, сделать столбец maSupport Lookup'овским без использования PickList? Читал в разных источниках, как это делается, делаю все по инструкции, но поле не становится полем Combo, т.е. в нем по-прежнему нет выпадающего списка.
|
#7
|
|||
|
|||
![]() Vocabulary, спасибо за помощь! Вопрос решил несложным алгоритмом с добавлением дополнительной переменной. Проблема-то детская, эх, многое позабыл за столько лет.
Тема может быть закрыта. ![]() |