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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 180

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

Здравствуйте, эксперты.
Есть база данных аксеса. В ней есть поля с подстановкой данных из друго таблицы.
|key | genre |
|1 | фантастика |
|2 | ужас |
|3 | аниме |
|4 | документальный |
Я делаю сортировку главной таблицы по полю жанр, а сортировка происходит по полю key из вышеприведенной таблицы. Вопрос в том как сделать сортировку, главной таблицы по полю жанр, но чтобы данные брались не из поля key, а из поля genre дополнительной таблице.
Надеюсь вы меня поняли.

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

Вопрос задал: Aymenel (статус: 2-ой класс)
Вопрос отправлен: 29 ноября 2006, 23:56
Состояние вопроса: открыт, ответов: 1.

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

Здравствуйте, Федоров Роман Сергеевич!
Во-первых что такое дополнительная таблица? Судя по тому что здесь нарисовал, то описан справочник жанров, видимо 2 таблица содержит какие-то данные которые содержат в себе значение genre либо ссылку на него. Достаточно плохо описана задача, хотелось бы видеть и вторую таблицу и вариант конечной структуры.
Смею предположить, что 2 таблицы связаны каким то общим полем, если это так, то в Access построй вторичный индекс по этим связанным полям, а при обращении к таблице используй property AdoTable.Sort:='genre ASC, key ASC';
Другой вариант более гибкий вместо таблицы использовать в ADOQuery SQL запрос например такого типа:
Select A.Key, B.Genre From Sprav A, Dannije B
Where A.Genre = B.Genre
Order by B.Genre
Где Sprav - 1 таблица, Dannije - 2 таблица.
Удачи
Было бы неплохо увидеть исходник и структуру таблиц.

Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 30 ноября 2006, 00:54
Оценка за ответ: 5


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

Всего сообщений: 16; последнее сообщение — 30 ноября 2006, 18:38; участников в обсуждении: 2.
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 01:39 [#1]:

Структура tablemain:
key, name, genre(хранится ключ ссылка), sgenre(lookup поле по которому требуется выполнить сортировку)

структура tablegenre:
key(ключ на который ссылается главная таблица), tgenre(данные типа стринг).

Alex Van Glukhman напиши пожалуйста тоже, что писал выше, но с учетом этой структуры, а то я запутался.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 08:49 [#2]:

SELECT A.NAME, B.GENRE
FROM TABLEMAIN A, TABLEGENRE B
WHERE A.GENRE = B.TGENRE
ORDER BY B.GENRE
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 08:59 [#3]:

Первый вариант не катит!!!
Sorry не заметил 4 поле
SELECT A.KEY, A.NAME, B.GENRE, A.SGENRE
FROM TABLEMAIN A, TABLEGENRE B
WHERE A.GENRE = B.KEY
ORDER BY A.SGENRE
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 09:03 [#4]:

В строке Select вместо B.GENRE B.TGENRE
Если используются связанные таблицы, то выкладывай код
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 11:05 [#5]:

Говорит: Пapaмeтp A.SGENRE нe имeeт знaчeния пo yмoлчaнию.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 11:56 [#6]:

А как по нему выполнять сортировку если он по умолчанию не имеет значения, значит надо выполнять сортировку по полю B.GENRE?
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 12:20 [#7]:

Выложи ка ты лучше исходничек
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 15:58 [#8]:

Всю прорамму выкладывать нестал т.к очень большая. Вот ссылка на урезанную версию в которой есть все что нужно.
(файл удалён)
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:05 [#9]:

Создаём обработчик события AfterOpen таблицы tableMain и пишем там единственную строку
tableMain.Sort:='Genre';

Хотя я бы не стал заморачиваться связанными таблицами потому что данный вариант будет работать только для ADO соединений, а кинул бы на форму AdoQuery и в SQL.Text написал бы следующее:
Select B.Genre, A.Name, A.OName From TableMain A, TableGenre B Where B.Key=A.Genre Order By B.Genre;
И совет переименовать поле Key, т.к. в некоторых диалектах SQL это служебное слово
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 17:08 [#10]:

Тоесть ты советуешь убрать нафиг все связи и заменить их sql запросвми?
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 17:08 [#11]:

То есть ты советуешь убрать нафиг все связи и заменить их sql запросвми?
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 17:18 [#12]:

Ни тотни друго пособе неработают.
При ппользовании SQL запроса получчем ошибку (Пapaмeтp B.Genre нe имeeт знaчeния пo yмoлчaнию.), что это значит и как от нее избавиться.
А можно исходник :)
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:35 [#13]:

У меня твой исходник с изменённым кодом великолепно работает.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:37 [#14]:

Попробуй этот SQL запрос запустить в среде Access в запросах
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:38 [#15]:

Свяжись со мной по асе 165711772
Aymenel

Aymenel (статус: 2-ой класс), 30 ноября 2006, 18:38 [#16]:

Всем спасибо, ответ получен.
отдельная благодарность группе экспертов в единственном лице Alex Van Glukhman.

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

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