|
Вопрос # 180/ вопрос открыт / |
|
Здравствуйте, эксперты.
Есть база данных аксеса. В ней есть поля с подстановкой данных из друго таблицы.
|key | genre |
|1 | фантастика |
|2 | ужас |
|3 | аниме |
|4 | документальный |
Я делаю сортировку главной таблицы по полю жанр, а сортировка происходит по полю key из вышеприведенной таблицы. Вопрос в том как сделать сортировку, главной таблицы по полю жанр, но чтобы данные брались не из поля key, а из поля genre дополнительной таблице.
Надеюсь вы меня поняли.
 |
Вопрос задал: 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 (статус: 2-ой класс), 30 ноября 2006, 01:39 [#1]:
Структура tablemain:
key, name, genre(хранится ключ ссылка), sgenre(lookup поле по которому требуется выполнить сортировку)
структура tablegenre:
key(ключ на который ссылается главная таблица), tgenre(данные типа стринг).
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 (статус: 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 (статус: 7-ой класс), 30 ноября 2006, 09:03 [#4]:
В строке Select вместо B.GENRE B.TGENRE
Если используются связанные таблицы, то выкладывай код
|
|
Aymenel (статус: 2-ой класс), 30 ноября 2006, 11:05 [#5]:
Говорит: Пapaмeтp A.SGENRE нe имeeт знaчeния пo yмoлчaнию.
|
|
Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 11:56 [#6]:
А как по нему выполнять сортировку если он по умолчанию не имеет значения, значит надо выполнять сортировку по полю B.GENRE?
|
|
Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 12:20 [#7]:
Выложи ка ты лучше исходничек
|
|
Aymenel (статус: 2-ой класс), 30 ноября 2006, 15:58 [#8]:
Всю прорамму выкладывать нестал т.к очень большая. Вот ссылка на урезанную версию в которой есть все что нужно.
(файл удалён)
|
|
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 (статус: 2-ой класс), 30 ноября 2006, 17:08 [#10]:
Тоесть ты советуешь убрать нафиг все связи и заменить их sql запросвми?
|
|
Aymenel (статус: 2-ой класс), 30 ноября 2006, 17:08 [#11]:
То есть ты советуешь убрать нафиг все связи и заменить их sql запросвми?
|
|
Aymenel (статус: 2-ой класс), 30 ноября 2006, 17:18 [#12]:
Ни тотни друго пособе неработают.
При ппользовании SQL запроса получчем ошибку (Пapaмeтp B.Genre нe имeeт знaчeния пo yмoлчaнию.), что это значит и как от нее избавиться.
А можно исходник
|
|
Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:35 [#13]:
У меня твой исходник с изменённым кодом великолепно работает.
|
|
Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:37 [#14]:
Попробуй этот SQL запрос запустить в среде Access в запросах
|
|
Alex Van Glukhman (статус: 7-ой класс), 30 ноября 2006, 17:38 [#15]:
Свяжись со мной по асе 165711772
|
|
Aymenel (статус: 2-ой класс), 30 ноября 2006, 18:38 [#16]:
Всем спасибо, ответ получен.
отдельная благодарность группе экспертов в единственном лице Alex Van Glukhman.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|