Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2014, 14:54
max_delphi max_delphi вне форума
Прохожий
 
Регистрация: 27.03.2014
Адрес: На Земле
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Проблема с динамическим обновлением PickList в DBGrid!

Здравствуйте, уважаемые форумчане и все любители Delphi!

Давно не программировал на Delphi 7 и в связи с этим позабыл многое из того, что делал раньше. Выручайте!

Моя проблема. Есть у меня таблица Main (в главной форме компонент MainDBGrid), куда помещаются данные ежедневного отчета (тема - аттракционы, зоопарк, аквапарк). Есть три таблицы Park, Waterpark и Zoo, соответственно.

В главной таблице есть два поля: Территориальность (maLocationOf)(комбобокс из трех записей, Парк, аквапарк и зоопарк) и Объект (maObject). Собственно проблема как раз с полем Объект. Мне необходимо в зависимости от того, какое значение стоит в поле Территориальность для ТЕКУЩЕЙ записи в DGBrid'e сформировать список значений из определенной таблицы в PickList (одной из трех) ТОЛЬКО для данной записи. Так если надо изменить значение поля Территориальность, например, выбрать не Парк, а Зоопарк, то при изменении в поле Объект соответственно сразу бы формировался новый PickList из другой таблицы (Zoo, соответственно).

Не пойму какое событие мне нужно. Пробовал и OnColEnter и OnEnter, OnCellClick в DBGrid и AfterScroll в ADOTable но результат двоякий. Работает криво, при переключении на другое поле список пропадает.

Lookup поля по-моему, так вот динамически формировать нельзя? или это как-то с помощью ADOQuery можно сделать?

Подскажите, как сделать точно и правильно, чтобы работало, как мне надо? Прикладываю программу в архиве и БД. Очень хотелось бы с этим разобраться.
Вложения
Тип файла: rar PARK.rar (345.4 Кбайт, 11 просмотров)
Ответить с цитированием
  #2  
Старый 28.03.2014, 05:45
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Беда вашего метода в том, что какое бы событие не использовалось (забыли еще про OnColExit - единственно возможное в этом случае событие), не поможет ничто.
Потому как при непосредственном редактировании в гриде этот прием работает не корректно.
Факт: ввели данные в новую строку. "Парк" в территориальности и "Тир" в колонке Объект, затем вновь перешли на эту строку, выбрали в локализации "Аквапарк" и перешли на другую строку. Вопрос что осталось в колонке "Объект"?
Правильно, нужен еще один геморрой для проверки правильности ввода (который как раз и может делаться в событии AfterScroll, но, к сожалению, не только в нем).
Если бы добавление и редактирование происходило в отдельных компонентах ввода а запись в таблицу БД после того как введенные данные проверены, проблемы можно было бы избежать.
Ответить с цитированием
  #3  
Старый 28.03.2014, 22:05
max_delphi max_delphi вне форума
Прохожий
 
Регистрация: 27.03.2014
Адрес: На Земле
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
Хорошо СПАСИБО!!!

Цитата:
Сообщение от Vocabulary
Беда вашего метода в том, что какое бы событие не использовалось (забыли еще про OnColExit - единственно возможное в этом случае событие), не поможет ничто.
Потому как при непосредственном редактировании в гриде этот прием работает не корректно.
Факт: ввели данные в новую строку. "Парк" в территориальности и "Тир" в колонке Объект, затем вновь перешли на эту строку, выбрали в локализации "Аквапарк" и перешли на другую строку. Вопрос что осталось в колонке "Объект"?
Правильно, нужен еще один геморрой для проверки правильности ввода (который как раз и может делаться в событии AfterScroll, но, к сожалению, не только в нем).
Если бы добавление и редактирование происходило в отдельных компонентах ввода а запись в таблицу БД после того как введенные данные проверены, проблемы можно было бы избежать.

Большое спасибо Вам!! Вы кажется натолкнули меня на до того не приходившую мне в голову мысль, что можно ведь передать значения ячеек грида отдельным компонентам и непосредственно до сохранения записи оперировать ими!

Но здесь опять же как СВОЕВРЕМЕННО передавать компонентам текущие значения ячеек грида и, таким образом, СВОЕВРЕМЕННО же обеспечить реагирование на некорректность введенной информации... вот вопрос.
Ответить с цитированием
  #4  
Старый 28.03.2014, 22:25
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Наверное для начинающих это действительно проблемная тема, но более или менее знакомого с разработкой БД - добавление и редактирование в отдельных компонентах общее место.
Только так и делают.
Насчет своевременности можно не беспокоится.
Передавать компонентам значения из строк набора данных занятие простое.
А проверка на корректность ввода делается перед тем как записывают данные, а запись эта осуществляется либо в процедуре события OnClick кнопки (назовем ее "Сохранить") или, если редактирование происходит в отдельной форме, в процедуре события OnClose формы. Это как правило.

В прицепе учебный пример такого приложения, где добавление и редактирование осуществляется в другой форме.
Вложения
Тип файла: zip example.zip (477.2 Кбайт, 19 просмотров)
Ответить с цитированием
  #5  
Старый 01.04.2014, 10:55
max_delphi max_delphi вне форума
Прохожий
 
Регистрация: 27.03.2014
Адрес: На Земле
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
Вопрос

Цитата:
Сообщение от Vocabulary
Наверное для начинающих это действительно проблемная тема, но более или менее знакомого с разработкой БД - добавление и редактирование в отдельных компонентах общее место.
Только так и делают.
Насчет своевременности можно не беспокоится.
Передавать компонентам значения из строк набора данных занятие простое.
А проверка на корректность ввода делается перед тем как записывают данные, а запись эта осуществляется либо в процедуре события OnClick кнопки (назовем ее "Сохранить") или, если редактирование происходит в отдельной форме, в процедуре события OnClose формы. Это как правило.

В прицепе учебный пример такого приложения, где добавление и редактирование осуществляется в другой форме.

Спасибо, пример интересный!

Однако мне нужно немного не это. Мне необходимо, чтобы данные вводились именно через таблицу и в таблице же при изменении одного из полей (Парк, Аквапарк или Зоопарк) динамически изменялось бы другое поле в таблице - т.е. другие данные загружались бы как в комбо в то поле (если парк - аттракционы, аквапарк - горки и т.д.).

Как реализовать именно такое?... Может какое-то событие для этого можно организовать?
Ответить с цитированием
  #6  
Старый 02.04.2014, 15:55
max_delphi max_delphi вне форума
Прохожий
 
Регистрация: 27.03.2014
Адрес: На Земле
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
Вопрос Lookup поля

А кто может подсказать мне как организовать Lookup поле для любого столбца DBGrid'a моей БД, например, сделать столбец maSupport Lookup'овским без использования PickList? Читал в разных источниках, как это делается, делаю все по инструкции, но поле не становится полем Combo, т.е. в нем по-прежнему нет выпадающего списка.
Ответить с цитированием
  #7  
Старый 03.04.2014, 12:36
max_delphi max_delphi вне форума
Прохожий
 
Регистрация: 27.03.2014
Адрес: На Земле
Сообщения: 21
Версия Delphi: Delphi XE5
Репутация: 10
Стрелка Спасибо!

Vocabulary, спасибо за помощь! Вопрос решил несложным алгоритмом с добавлением дополнительной переменной. Проблема-то детская, эх, многое позабыл за столько лет.

Тема может быть закрыта.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter