![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка LokUp-полей [D5, IB5.x, IB6.x]
User_OKA © (2003-02-06 09:12:00)В общем, с самого начала.
Существют таблицы - справочники:
X (поля: ID, Sprav);
Y (поля: ID, Sprav);
Z (поля: ID, Sprav),
а также таблица A (поля: ID, ID_X, ID_Y, ID_Z).
Пользователю нужно представить все это в одной таблице, чтобы вместо кодов значений высветились сами значения.
Делаю запрос:
"SELECT A.ID, X.Sprav, Y.Sprav, Z.Sprav
FROM A A, X X, Y Y, Z Z
WHERE A.ID_X = X.ID AND A.ID_Y = Y.ID AND A.ID_Z = Z.ID"
Сортировку можно проводить по любому полю, но если в таблице A не заполнено какое-либо поле (имеется ввиду ID_X, ID_Y или ID_Z), то строка не попадает в итоговый запрос и пользователь ее не увидит.
Выход в использовании lookup - полей.
Но как провести по ним сортировку?
Пишу "ORDER BY A.ID_Y", но сами значения справочника для пользователя все равно остаются неотсортированными.
Что делать?
DarkGreen (2003-02-20 11:25:00) [1]Думаю можно, но для этого потребуется малость поработать.
Поизучай модуль FIBDataSet, там есть методы DoSort, DoSortEx, а так же процедуры Sort и FastSort, вот у FastSort есть Compare & Compare1 думается тебе сюда, переопределяй их и юзай.
Но я могу ошибаться
User_OKA (2003-02-20 10:06:00) [2]Кстати, в FIBPlus DoSort и DoSortEx не сортируют LookUp-поля!
Что делать-то?
User_OKA (2003-02-19 13:48:00) [3]to Johnmen
Огромное спасибо! Разберемся.
Johnmen (2003-02-19 10:57:00) [4]см. DoSort и DoSortEx, разобраться можно за полчаса...:)))
(сортировка локальная)
User_OKA (2003-02-19 10:00:00) [5]А как в версиях FIB 4.77 осуществляется сотировка по LookUp-полям?
User_OKA (2003-02-07 14:15:00) [6]Спасибо всем за ответы.
Буду копать!
Andriano (2003-02-07 13:28:00) [7]В FIB-ах с вер. 4.77 появилась локальная сортировка по LOOKUP-полям.
passm (2003-02-07 13:09:00) [8]User_OKA © (07.02.03 12:28)> ??? Если действовать по схеме , то сортировка происходит не по lookup полю, а по полю, возвращенному SELECT"ом в части GROUP BY.
Попродую подробнее.
SELECT T1.*, S1.NAME AS SPRAVKA_NAME
FROM TABLE T1
LEFT OUTER JOIN SPRAVKA1 S1 ON (T1.SPRAVKA1 = S1.ID)
ORDER BY SPRAVKA_NAME
Это запрос. Далее открываешь Fields Editor и добавляешь все поля (Add all Fields). Выбираешь поле SPRAVKA_NAME и указываешь:
FieldKind = fkLookup & LookupDataSet & KeyFields...
User_OKA (2003-02-07 12:28:00) [9]Не совсем понятен пункт 3.
Я делаю так:
1. Возвращаю селектом нужный НД со всеми полями
-> select * from A
2. Создаю TFIBDataSet-ы для каждого справочника
-> select * from A и т.д.
3. Создаю TField (FieldKind = fkLookup) для каждого справочника.
Только вот произвольную сортировку по любому полю сделать не получается. Не сортируются lookup, хоть тресни!
User_OKA (2003-02-07 12:27:00) [10]Не совсем понятен пункт 3.
Я делаю так:
1. Возвращаю селектом нужный НД со всеми полями
-> select * from A
2. Создаю TFIBDataSet-ы для каждого справочника
-> select * from A и т.д.
3. Создаю TField (FieldKind = fkLookup) для каждого справочника.
Только вот произвольную сортировку по любому полю сделать не получается. Не сортируются lookup, хоть тресни!
passm (2003-02-07 09:27:00) [11]User_OKA © (07.02.03 09:07)> Может All"у покажется неправильно, но в подобных случаях поступаю так:
1. Возвращаю селектом нужный НД со всеми полями (включая те, которые в дальнейшем собираюсь использовать как lookup).
2. Рядом еще запрос(ы) с нужными справочниками.
3. Редактирую поля в запросе (1) - преобразую поля возвращающие значения из справочников в lookup (указываю FieldKind = fkLookup...)
Вот и все. Минус подхода - получается двойной расчет lookup поля: на сервере и на клиенте. Но решается вопрос сортировки при клике на заголовок грида.
AlexSerp (2003-02-07 09:12:00) [12]А в TFIBDataSet нельзя получить НД с нужной сортировкой сразу.
Извини, но я с таким компонентом не работал.
В нем идет подключение к таблице напрямую или данные получаются запросом?
Если запросом, то кто мешает сделать сортировку в запросе?
Саня
ЗЫ. Пардон за мою бестолковость.
User_OKA (2003-02-07 09:07:00) [13]Да не в запросах дело. С запросами все понятно. ORDER BY и нет проблем.
Создается lookup-поле на клиенте. Проблема в том, можно ли отсортировать набор именно по этому поле. Под сортировкой я понимаю упорядочивание, в частности, для строковых полей по алфавиту.
Lookup-поле получаю в редакторе полей конкретного TFIBDataSet.
Соответственно под каждое такое поле бросаю на форму свой TFIBDataSet.
Или я много туману напустил? Вроде все понятно...
User_OKA (2003-02-07 09:06:00) [14]Да не в запросах дело. С запросами все понятно. ORDER BY и нет проблем.
Создается lookup-поле на клиенте. Проблема в том, можно ли отсортировать набор именно по этому поле. Под сортировкой я понимаю упорядочивание, в частности, для строковых полей по алфавиту.
Lookup-поле получаю в редакторе полей конкретного TFIBDataSet.
Соответственно под каждое такое поле бросаю на форму свой TFIBDataSet.
Или я много туману напустил? Вроде все понятно...
passm (2003-02-06 15:07:00) [15]AlexSerp © (06.02.03 14:57)> Нагляднее:
SELECT T1.*, T2.NAME AS NAME_T2
FROM TABLE1 AS T1
LEFT OUTER JOIN TABLE2 AS T2 ON (T1.FIELD_TABLE2 = T2.ID)
ORDER BY NAME_T2
AlexSerp (2003-02-06 14:57:00) [16]Как это ты не можешь написать В SQL-запросе я не могу записать "ORDER BY " + имя Lookup-поля. Это ж поле только на клиенте получается.?
Именно так и напиши. Или просто укажи в ORDER BY порядковый номер поля выборки.
Саня.
ЗЫ. Или ты что-то другое подразумеваешь под сортировкой?
User_OKA (2003-02-06 13:50:00) [17]Да вопрос, вообще-то, не про производительность...
И все записи я пользователю не выдаю.
Можно ли сделать сортировку по Lookup-полю?
В SQL-запросе я не могу записать "ORDER BY " + имя Lookup-поля. Это ж поле только на клиенте получается.
А сортировать, однако, надо.
Такая вот борьба по многим направлениям...
Johnmen (2003-02-06 12:58:00) [18]>User_OKA © (06.02.03 12:24)
>Может есть другие идеи?
Базовых идей может быть только две : как было сказано LEFT JOIN и лукапные поля... А борьба за производительность может идти по многим направлениям...:)
Val (2003-02-06 12:46:00) [19]>User_OKA © (06.02.03 09:33)
постройте view на основе запроса AlexSerp © (06.02.03 09:25)
и обращайтесь к нему в программе, урезая условиями, врядли пользователю нужны все записи.
User_OKA (2003-02-06 12:24:00) [20]Может есть другие идеи?
Хотя бы направление для поиска решений.