Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Принцип работы 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]

Упс, не в ту конфу... В Базы перенесите, плиз


Наверх

Титульная страница Поиск, карта сайта Написать письмо