| 
| 
 | Вопрос # 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.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |