Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 258

/ вопрос открыт /

Как мона датасет сортировать по лукап-полям? По вычисляемым полям (желательно)?

Приложение:
  1.  


Knjazev Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Knjazev (статус: 3-ий класс)
Вопрос отправлен: 12 января 2007, 17:59
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Alex Van Glukhman

Здравствуйте, Ласковый 3лоумышленник!

Видимо придётся подробно осветить данный вопрос!

Начнём с TADOQuery и с теории - поля Lookup при открытии TDataSet содержат значение соответствующее ключу основной таблицы, т.е список раскрывается только в тот момент когда TDataSet находится в состоянии dsEdit. Простой прямой метод сортировки по полю Lookup невозможен ввиду того, что в наборе данных это поле драйвером dbGo не распознаётся. Отсюда возникает решение подмены данного поля полем fkData дублирующим значение текста поля Lookup по которому возможно произвести сортировку. В случае с TADOQuery привожу конкретный пример есть две таблицы Страны TableName:=Country c полями id - autoincrement и Name - String(100) и Регионы Regions соответственно поля id - autoincrement Region - String(100) и IDCOUNTRY - integer. соответственно первые поля ключи.
На форму кидаем TADOQuery и TADOTable к TADOTable подключаем таблицу стран а в SQL запросе ADOQuery пишем 'SELECT A.REGION, B.NAME, A.IDCOUNTRY FROM REGION A, COUNTRY B WHERE A.IDCOUNTRY=B.ID ORDER BY B.NAME' проверяем запрос работает. Далее в редакторе поле ADOQuery добавляем все существующие поля их должно быть 3 и выбираем добавить новое поле которое определяем как Lookup имя cnt key-idcountry, lookup dataset ADOTable, lookup key - id, result field - name. Готово далее набор данных от ADOQuery подключаем к TDBGrid в котором добавляем все Columns и далее скрываем либо удаляем колонку отражающую NAME. Всё готово и всё работает. Дальнейшая обработка записи, редактирования, удаления набора данных ложится на ручки программера теми же SQL запросами, но сортировка в данном случае выполняется железно. C таблицей объясню позднее

Удачи!

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 13 января 2007, 06:57


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 13 января 2007, 13:29; участников в обсуждении: 2.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 12 января 2007, 19:51 [#1]:

Создаёшь поле LookUp в редакторе полей TAdoTable например MyLookUpField и на AfterOpen пишешь:
AdoTable.Sort:='MyLookUpField ASC';
Удачи!!!
Knjazev

Knjazev (статус: 3-ий класс), 12 января 2007, 21:31 [#2]:

Alex Van Glukhman, а если TADOQuery - тогда как?
Knjazev

Knjazev (статус: 3-ий класс), 12 января 2007, 21:56 [#3]:

Да, и своё первое мнение проверьте на практике, Глюкмэн ;) Я на клик кнопки проверить попробовал...
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 12 января 2007, 22:49 [#4]:

Всё нормально работает. У Ado есть странность сие действо производится только при открытии датасета, а AdoQuery ручками через SQL запросик
Knjazev

Knjazev (статус: 3-ий класс), 13 января 2007, 00:32 [#5]:

Открытие датасета посмотрю... завтра. "а AdoQuery ручками через SQL запросик" - это как это, лукап-поле через запросик? Я его после запросика создаю, в редакторе полей :)
Knjazev

Knjazev (статус: 3-ий класс), 13 января 2007, 00:56 [#6]:

Хотя проверять ничего не буду, сдаётся мне, что вы, Глюкмэн, гоните.
Knjazev

Knjazev (статус: 3-ий класс), 13 января 2007, 11:50 [#7]:

Глюкмэн, вся беда в том, что нужен редактируемый запрос, а то, как вы рекомендуете сделать - получаем нередактируемый запрос и пропадает смысл в лукап-поле. 2 я не ставлю, потому что вы время на напечатку ответа потратили.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 13 января 2007, 12:49 [#8]:

Молодой человек - видимо Вы прочитали, мой ответ но в IDE ничего не попробовали сделать - Lookup поле работает, и Cell в DBGrid изменяет своё значение, а способ редактирования ложится на ваши плечи а не не delphi. Почитайте внимательно Help и на форумах например мастеров Delphi, там этому вопросу уделено очень много пространства.
Knjazev

Knjazev (статус: 3-ий класс), 13 января 2007, 13:29 [#9]:

Тема исчерпана

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.03 сек.