![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Принцип работы TDataset.Locate
pasha_golub © (2005-01-17 15:37:00)Как задумана работа Locate в Датасете?
Пример. Имеем два индекса: PK , Index1.
Датасет открыт по PK, юзер ищет по Index1.
Должно вернуть?
1. Строку с наименьшим PK удовлетворяющим критериям
2. Строку с наименьшим Index1 вне зависимости от PK
То есть работа будет выглядеть как:
1. Не меняя резалт сета пробегаем по нему и ищем
2. Создаем доп. резалт сет по Index1, в нем ищем, а потом синхронизируем c PK
Надеюсь понятно
pasha_golub (2005-01-18 16:10:00) [1]atruhin © (18.01.05 15:54) [9]
Тоже кстати верно...
Ega23 (2005-01-18 15:59:00) [2]Ты вот что... Посмотри DBTables.pas, может подойдёт.
atruhin (2005-01-18 15:54:00) [3]В датасете нет реализации Locate вообще. Она возложена целиком на потомков. Соответственно в каждом потомке разработчик волен реализовать ее как он считает нужным. В некоторых потомках есть возможность сортировки и работы Locate по методу половинного поиска. Там она может вернуть любое совпавшее значение
pasha_golub (2005-01-18 15:51:00) [4]Ega23 © (18.01.05 15:08) [7]
Шо самое интересное, ковырялся. Дык, вот это просто обертка над методом движка, который всю эту кухню обрабатывает. А движок ессно, БДЕ имеется ввиду, фиг... Кстати, если у кого вдруг есть BDE.pas, то я просто буду ЩЩаслив.
Ega23 (2005-01-18 15:08:00) [5]Паш, ну тут только в исходниках TDataSet ковыряться, другого не дано...
pasha_golub (2005-01-18 14:52:00) [6]Ega23 © (18.01.05 14:32) [5]
Как его проверить, если его реализовать надо? :)
А метод Locate, по крайней мере по моему опыту, работает с DataSet-ом как с обычным массивом. Т.е. первое вхождение - позиционирование на эту строку.
Во,во и я так думаю, но блин не хочется потом переделывать, блин..
Обычно я пользователю даю возможность самому Order By сформировать.
БЕз вопросов, юзерь и формирует.
Да, кстати, Locate сразу по нескольким полям работать может.
Та ты шо? ;0) До чего техника дошла.
Ega23 (2005-01-18 14:32:00) [7]Ну возьми и проверь.
Обычно я пользователю даю возможность самому Order By сформировать.
А метод Locate, по крайней мере по моему опыту, работает с DataSet-ом как с обычным массивом. Т.е. первое вхождение - позиционирование на эту строку.
Да, кстати, Locate сразу по нескольким полям работать может.
pasha_golub (2005-01-18 14:27:00) [8]Ну, люди, ну просветите же меня, пжлста. Надо реализовать эту штуку, боюсь чтобы не через зад... :(
pasha_golub (2005-01-17 15:52:00) [9]Ega23 © (17.01.05 15:40) [2]
З.Ы. Могу ошибаться.
Вот и я склоняюсь к этой мысли. Ведь если юзерь хотит по Index1, пущай и открывает резалт сет по нему. А так ведь он наверно хочет получить строку в зависимости от PK...
Ega23 (2005-01-17 15:40:00) [10]Имхо, должно вернуть первое совпадение значения по Index1. А как DataSet внутри отстортирован - смотри Order By.
З.Ы. Могу ошибаться.
pasha_golub (2005-01-17 15:38:00) [11]Упс, не в ту конфу... В Базы перенесите, плиз