Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Сортировка связанного поля Найти похожие ветки
← →
Vadim (2005-02-20 22:39) [0]Есть две таблицы в Access. Работаю через ADO. В первой через Loocup смотрю поле из второй. Как отсортировать первую таблицу по полю из второй? Не запросом!
← →
Anatoly Podgoretsky © (2005-02-20 23:32) [1]ORDER BY Table1.LookupField
← →
Vadim (2005-02-20 23:38) [2]Это понятно, спасибо. НО надо НЕ запросом !!!
← →
Anatoly Podgoretsky © (2005-02-20 23:42) [3]Индекс на это поле. Только странно работать с акцесс не через запросы.
← →
Vadim (2005-02-20 23:50) [4]Есть на нем индекс :-((
И почему странно? Локальная база и несложная, много записей ...
Но это все философия.
В общем, создаю как полагается новое поле ... (D7) в первой таблице, связываю с полем со второй.
ADOTable1.Sort := "Родное поле"; сортирует нормально, а
ADOTable1.Sort := "Новое связанное поле"; кирдык!
← →
sniknik © (2005-02-21 00:50) [5]наверное разочарую тебя... но, ADOTable1 это не совсем table, если специально ничего не делал, это компанент под простой запрос вида select * from ADOTable1.TableName... т.е. запрос ты уже используеш гесмотря на нежелание.
потом, Sort это не индекс это сортировка рекордсета в памяти (временный индекс), кстати если оно у тебя работает, это признак того что рекордсет локальный, и в этом случае пофигу как таблицы связаны, рекордсет "цельный" и сортируется по любому болю, даже фиктивному...
другое дело, что твоя "философия" отличается от моей и под связанными полями ты чтото другое имееш ввиду.
вот что? судя по всему настроил связь мастер детайл и или береш поле из другой таблици (бред, у первой поле из второй прописывать) или поле по которому связь а оно используется самим обьеденинием мастер детайл.
← →
sniknik © (2005-02-21 00:53) [6]> используется самим обьеденинием мастер детайл.
имею ввиду что по нему самой связкой строится такой же временный индекс, и он используется, а собственной сортировкой по нему ты разрушаеш установленную связь.
← →
Vadim (2005-02-21 09:21) [7]Нет, мастер детайл я не настраивал. Это же "детский" пример из любой книги по БД. Постараюсь объяснить на примере. Есть таблица городов (Access). Она связана (один-ко-многим) с таблицей улиц, та так же с табл. домов и т.д. Показываем все это в гриде. Открываем табл. городов, создаем виртуальное поле и loocup-им его с табл. улиц и т.д. Все замечательно. Теперь хотим различную сортировку. По городам, все работает. Sort по виртуальному полю - нет. Вообще - это классический пример (упрощенный) реляционной БД - показать все в одном гриде. Вот только еще и отсортировать бы ...
← →
ЮЮ © (2005-02-21 09:34) [8]>Вообще - это классический пример (упрощенный) реляционной БД - показать все в одном гриде. Вот только еще и отсортировать бы ...
Только классическая реализация этого, ИМХО, следующая
SELECT *
FROM
Cities
LEFT JOIN Streets ON Streets.City = City.Id
LEFT JOIN Houses ON Houses.Street = Streets.Id
ORDER BY ...
и сортируй теперь как хочется
а ограничит ывборку поможет
WHERE
← →
Johnmen © (2005-02-21 09:40) [9]Любая сортировка набора данных предполагает наличие в нём поля, по которому сортируют. Отображаемые лукапным полем значения НЕ ЯВЛЯЮТСЯ значениями поля в составе НД.
← →
Vadim (2005-02-21 09:59) [10]
> Любая сортировка набора данных предполагает наличие в нём
> поля, по которому сортируют. Отображаемые лукапным полем
> значения НЕ ЯВЛЯЮТСЯ значениями поля в составе НД.
А как же тогда запрос? Он же сортирует.
> наверное разочарую тебя... но, ADOTable1 это не совсем table,
> если специально ничего не делал, это компанент под простой
> запрос вида select * from ADOTable1.TableName... т.е. запрос
> ты уже используеш гесмотря на нежелание.
По логике и ADOTable должен сортировать.
← →
Johnmen © (2005-02-21 10:07) [11]>А как же тогда запрос? Он же сортирует.
1. Я говорил про НД.
2. Кто такой "он", кто сортирует ???
3. В рез-те выполнения запроса НД получается отсортированным.
Но это не твой случай, т.к. запросами ты не пользуешься...:)
← →
Vadim (2005-02-21 10:20) [12]Не вижу смысла всю прогу под запрос переписывать. Проще поля переставить ... :-))
Это уже спортивный интерес, кстати в сети нашел несколько подобных вопросов, но без внятного ответа. Все скатывается к запросу и все. Полагаю, как обычно нужно только "достучаться".
← →
Sergey13 © (2005-02-21 10:22) [13]2[12] Vadim (21.02.05 10:20)
> Все скатывается к запросу и все.
Так может в этом и есть сермяжная правда? 8-)
← →
Vadim (2005-02-21 10:33) [14]Очень может быть :-))
Возможно в этом и проявляются ограничения ADOTable.
← →
sniknik © (2005-02-21 10:39) [15]> А как же тогда запрос? Он же сортирует.
сортируется рекордсет - образ таблици в памяти, для простого запроса, для непростого со связями это будет "составной" рекордсет, поля в котором присутствуют физически.
> Не вижу смысла всю прогу под запрос переписывать. Проще поля переставить ... :-))
поймеш, попозже, когда таблица немного "подрастет".
Johnmen © (21.02.05 10:07) [11]
> Но это не твой случай, т.к. запросами ты не пользуешься...:)
ну неявно то пользуется... достаточно подключится к MSSQL и посмотреть профайлером что идет на открытие таблици.
← →
Johnmen © (2005-02-21 10:42) [16]>sniknik © (21.02.05 10:39) [15]
Естественно. Но я не стал этого говорить, т.к. у автора и других проблем достаточно, с которыми он не может разобраться...
← →
sniknik © (2005-02-21 10:45) [17]Johnmen © (21.02.05 10:42) [16]
я бы тоже не вспомнил, только у него такое нежелание пользоваться запросами, совершенно необоснованое... хотел ее показать.
← →
Vadim (2005-02-21 10:54) [18]
> сортируется рекордсет - образ таблици в памяти, для простого
> запроса, для непростого со связями это будет "составной"
> рекордсет, поля в котором присутствуют физически.
> поймеш, попозже, когда таблица немного "подрастет".
Все это и ежу ясно. Весь вопрос в целесообразности: решить одну проблему сортировки, напр. добавить 2 поля - или все переписать заново, причем вылезут другие проблемы :-))
← →
Sergey13 © (2005-02-21 10:59) [19]2 [18] Vadim (21.02.05 10:54)
Подобные "временные меры" только усложняют неизбежную переделку в будущем.
(с) из личного опыта.
← →
Johnmen © (2005-02-21 11:02) [20]>Vadim (21.02.05 10:54) [18]
>Весь вопрос в целесообразности: решить одну проблему сортировки,
А нет таких проблем...
>напр. добавить 2 поля
Куда добавить ?
>- или все переписать заново, причем вылезут другие проблемы :-))
Какие именно проблемы ?
← →
Vadim (2005-02-21 16:30) [21]Вот вы зацепились за запросы :-(((
Создается впечатление, что научились шаблонным вариантам, и больше ничего не интересует!
Сказал же, ну нет с этим проблем! Сделал и запросом. Все нормально работает. Причем сортируется как в процессе запроса
> SELECT *
> FROM
> Cities
> LEFT JOIN Streets ON Streets.City = City.Id
> LEFT JOIN Houses ON Houses.Street = Streets.Id
> ORDER BY ...
Спасибо, а то не знал :-))) Так и методом ADOQuery1.Sort := , тоже работает.
Повторяюсь - это спортивный интерес!!!
Если же поле получаем путем создания нового (в т.ч. в ADOQuery) и лукапим его с другой таблицей, то не работает! Хоть Sort, хоть запрос!
Конечно проще нацарапать шаблоны из книг, заработало и фиг с ним! А если разобраться, глядишь и чего нового узнаешь.
← →
Sergey13 © (2005-02-21 16:38) [22]2[21] Vadim (21.02.05 16:30)
> Если же поле получаем путем создания нового (в т.ч. в ADOQuery) и лукапим его с другой таблицей
Ты считаешь, что этот путь - показатель позитивного и нестандартного мышления? 8-)
← →
Johnmen © (2005-02-21 16:39) [23]Если что-то не понятно в [9], то спрашивай...
← →
Vadim (2005-02-21 17:11) [24]
> Ты считаешь, что этот путь - показатель позитивного и нестандартного
> мышления?
Прикол? Разумеется только экперимент. Кстати, есть хорошая мысль "Delphi нельзя изучить, его можно исследовать". Это из этой области.
> Любая сортировка набора данных предполагает наличие в нём
> поля, по которому сортируют. Отображаемые лукапным полем
> значения НЕ ЯВЛЯЮТСЯ значениями поля в составе НД.
Такое поле (из второй табл.) не является физическим в составе табл. первой, это ясно. Все, что мы видим на экране, это "виртуальные" поля, называйте как хотите, в памяти, на жест. диске, хоть на седьмом небе. И в них д.б. возможна сортировка. Кстати, в сети лежит ряд алгоритмов (с кодом для Delphi) сортировки связанных полей. Разумеется рекордсет обладает такой возможностью. Весь вопрос в том, что пристегнутое поле по запросу сортируется без проблем, а созданное новое и лукапленное с другим не хочет. Согласно идеологии представления данных такая сортировка д.б.
← →
Sergey13 © (2005-02-21 17:19) [25]2 [24] Vadim (21.02.05 17:11)
> Согласно идеологии представления данных такая сортировка д.б.
Хотелось бы ознакомится с идеологией. Ссылки на основопрложников не дашь.
← →
Johnmen © (2005-02-21 17:23) [26]>Кстати, в сети лежит ряд алгоритмов (с кодом для Delphi)
>сортировки связанных полей. Разумеется рекордсет обладает такой
>возможностью.
Где можно почитать про эту возможность рекорсета ?
← →
Anatoly Podgoretsky © (2005-02-21 19:30) [27]Vadim (21.02.05 17:11) [24]
А согласно моей идеологии, нельзя сортировать, то чего нет, это поле по сути аналог OnGetText.
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.03 c