Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.046 c
14-1109604649
AG.Smit
2005-02-28 18:30
2005.03.20
Проблема с мобилой Sony Ericsson T610


14-1109342839
Rouse_
2005-02-25 17:47
2005.03.20
Маленькое ММР


14-1109819056
Doxygen
2005-03-03 06:04
2005.03.20
Adobe против Microsoft


9-1103817250
Malefic
2004-12-23 18:54
2005.03.20
Подскажите плз где можно скачать шрифты (не графические)?


14-1109743450
Чеширский_Кот
2005-03-02 09:04
2005.03.20
Фальшь и неискренность