|
Вопрос # 258/ вопрос открыт / |
|
Как мона датасет сортировать по лукап-полям? По вычисляемым полям (желательно)?
 |
Вопрос задал: 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 (статус: 7-ой класс), 12 января 2007, 19:51 [#1]:
Создаёшь поле LookUp в редакторе полей TAdoTable например MyLookUpField и на AfterOpen пишешь:
AdoTable.Sort:='MyLookUpField ASC';
Удачи!!!
|
|
Knjazev (статус: 3-ий класс), 12 января 2007, 21:31 [#2]:
Alex Van Glukhman, а если TADOQuery - тогда как?
|
|
Knjazev (статус: 3-ий класс), 12 января 2007, 21:56 [#3]:
Да, и своё первое мнение проверьте на практике, Глюкмэн Я на клик кнопки проверить попробовал...
|
|
Alex Van Glukhman (статус: 7-ой класс), 12 января 2007, 22:49 [#4]:
Всё нормально работает. У Ado есть странность сие действо производится только при открытии датасета, а AdoQuery ручками через SQL запросик
|
|
Knjazev (статус: 3-ий класс), 13 января 2007, 00:32 [#5]:
Открытие датасета посмотрю... завтра. "а AdoQuery ручками через SQL запросик" - это как это, лукап-поле через запросик? Я его после запросика создаю, в редакторе полей
|
|
Knjazev (статус: 3-ий класс), 13 января 2007, 00:56 [#6]:
Хотя проверять ничего не буду, сдаётся мне, что вы, Глюкмэн, гоните.
|
|
Knjazev (статус: 3-ий класс), 13 января 2007, 11:50 [#7]:
Глюкмэн, вся беда в том, что нужен редактируемый запрос, а то, как вы рекомендуете сделать - получаем нередактируемый запрос и пропадает смысл в лукап-поле. 2 я не ставлю, потому что вы время на напечатку ответа потратили.
|
|
Alex Van Glukhman (статус: 7-ой класс), 13 января 2007, 12:49 [#8]:
Молодой человек - видимо Вы прочитали, мой ответ но в IDE ничего не попробовали сделать - Lookup поле работает, и Cell в DBGrid изменяет своё значение, а способ редактирования ложится на ваши плечи а не не delphi. Почитайте внимательно Help и на форумах например мастеров Delphi, там этому вопросу уделено очень много пространства.
|
|
Knjazev (статус: 3-ий класс), 13 января 2007, 13:29 [#9]:
Тема исчерпана
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|