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

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

Locate в отфильтрованных данных


Страницы:   1 2 3

Лёша ©   (2009-04-29 10:10:00) 

Набор данных в TADOTable.
В начальном наборе запись присутствует. Locate её находит.
В отфильтрованном наборе запись отсутствует. Locate выдает эксепшин: "Record not found".
Анализ метода TCustomADODataSet.Locate показывает, что LocateRecord выполняется без учета фильтра, а потом вызывается Resync - там и ошибка.
Филитрую через OnFilterRecord.

Что делать, чтобы Locate выдавал False, а не raise?


Сергей М.   (2009-04-29 12:06:00) [41]


> Лёша   (29.04.09 11:56) [12]


Ну так и это не единственное решение !
Ведь и Locate и Resync - виртуальные методы, ничто не мешает в своем наследнике перекрыть тот или иной с целью изменения дифолтного их поведения у предка


Лёша   (2009-04-29 11:56:00) [42]

Сергей М. ©   (29.04.09 11:43) [11]

Я про это и написал.
Вместо того, чтобы открывать философскую дисскусию по дао справки, отсойности ADO, правильного значения слова "фильтр, можно было просто ответить:
Лёша   (29.04.09 11:13) [7]


Сергей М.   (2009-04-29 11:43:00) [43]


> Лёша

А что, настолько проблематично заключить локейт в try..exept для контроля над такой ситуацией ?


Лёша   (2009-04-29 11:28:00) [44]

После смены пользователем критериев отображаемых данных (фильтрации в обечеловеческом понимании, а не для DataSet). Курсор на записи должен остаться, если запись после фильтрации осталась. Или переместиться на первую. Что тут глупого?


Anatoly Podgoretsky   (2009-04-29 11:20:00) [45]


> что Locate в ADO не учитывает OnFilterRecord

Никто не учитывает, видимо ты плохо представляешь принципы работы OnFilterRecord и то что это не фильтр, Locate с фильтрованым набором работает правильно.


Anatoly Podgoretsky   (2009-04-29 11:18:00) [46]

Глупо совместно применять OnFilterRecord (и не называй это фильтром) и Locate одновременно, для перемещения на запись которая не должна быть показа.


Лёша   (2009-04-29 11:13:00) [47]

ADO досталось в наследство - выкинуть не могу. Фильтрую только локальные данные.

Можно было просто ответить, что Locate в ADO не учитывает OnFilterRecord, и его вызов надо душить в try exeption.


sniknik   (2009-04-29 10:55:00) [48]

вот тут про разницу в подходах писал, почитай.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1240848334&n=1


sniknik   (2009-04-29 10:54:00) [49]

> Проблеме в том, что св-во Filter использовать не могу.
фильтр вообще для отбора записей нежелательно использовать... он только для локального отбора в уже полученном рекордсете, но ни в коем случае не для данных из базы.


sniknik   (2009-04-29 10:50:00) [50]

> И что? Я знаю, что по справке все должно работать.
неправильно. не "все должно работать" а "все работает как должно (ударение на последний слог)".
т.е. все что происходит у тебя есть правильно, если не устраивает меняй методы.
(вот сколько раз повторять не использовать TADOTable ?)

> Я же прошу найти, где лыжи не едут.
это искать не надо, они всегда не едут в программе. программы в вопросах меняются а местоположение глюков неизменно...


Лёша   (2009-04-29 10:48:00) [51]

Если вместо OnFilterRecord использовать св-во Filter, все работает:
LocateRecord возвращает False.

Проблеме в том, что св-во Filter использовать не могу. У меня фильтрация с использованием внешних данных.


Лёша   (2009-04-29 10:37:00) [52]

Anatoly Podgoretsky ©   (29.04.09 10:17) [1]

И что? Я знаю, что по справке все должно работать.

Я же прошу найти, где лыжи не едут.


Anatoly Podgoretsky   (2009-04-29 10:17:00) [53]

> Лёша  (29.04.2009 10:10:00)  [0]

Справка говорит

> Locate returns true if it finds a matching row, and makes that row the current one. Otherwise Locate returns false.


Страницы:   1 2 3

Наверх

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