Главная страница
    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.52 MB
Время: 0.03 c
1-1109843862
e-mike
2005-03-03 12:57
2005.03.20
TExcelApplication - OLE error 800A03EC.


4-1107811582
Ipkis
2005-02-08 00:26
2005.03.20
как узнать когда же Юзер щелкнул по кнопке на ХТМЛ-страничке


9-1104128352
Макс
2004-12-27 09:19
2005.03.20
glscene dynamic collision.


14-1109318878
Voffka
2005-02-25 11:07
2005.03.20
Как прочитать картинку?


1-1109420614
Глеб
2005-02-26 15:23
2005.03.20
Использование тем Windows XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский