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

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

Метод Locate - проблема с апострофом в строке поиска


Чайник ©   (2009-01-11 18:07:00) 

Делаю локальную базу на основе TclientDataSet.
По ходу дела выполняю поиск:

IF not (DataBase.DataMedia.Locate('FileName', FileName, [loCaseInsensitive])) Then

Все хорошо до тех пор, пока в строке FileName не встретится апостроф (например: 02-Toto Cutugno - L'italiano.mp3).
Тут вылезает ошибка - "Filter expression incorrectly terminated"
Что делать?


sniknik   (2009-01-11 22:52:00) [1]

а да, D7 со всеми апдейтами. на всякий случай.


sniknik   (2009-01-11 22:51:00) [2]

> исчезновение проблем с кавычками/апострофами в строке поиска
из-за того, что наконец то начало получатся? теперь еще раз с 0 переделай с локейтом, и там тоже не будет... (у меня к примеру нет. проверил).


Чайник   (2009-01-11 21:22:00) [3]


> Anatoly Podgoretsky ©   (11.01.09 21:18) [10]
> > Чайник  (11.01.2009 20:44:09)  [9]
>
> FindKey работает только текущему индексу, Locate как угодно.
>


Это понятно, я имел в виду исчезновение проблем с кавычками/апострофами в строке поиска


Anatoly Podgoretsky   (2009-01-11 21:18:00) [4]

> Чайник  (11.01.2009 20:44:09)  [9]

FindKey работает только текущему индексу, Locate как угодно.


Чайник   (2009-01-11 20:44:00) [5]

Вот интересно: проиндексировал по FileName и вместо Locate использовал FindKey - все заработало. Чем же они внутри себя так отличаются?


Anatoly Podgoretsky   (2009-01-11 20:16:00) [6]

> asail  (11.01.2009 20:11:06)  [6]

Что значит правильно, в TClientDataset ни одно поле не проиндексировано. А если поле не проиндексировано, то и скорость одинакова, поскольку используется простой проход по таблице. А скорость прохода просто большая, что бы беспокоиться. Да и не может у него быть много записей, максимум миллион.


Anatoly Podgoretsky   (2009-01-11 20:12:00) [7]

> Чайник  (11.01.2009 18:36:04)  [4]

Быстрее будет, если проиндексировано по FileName, обычно не проиндексировано.


asail   (2009-01-11 20:11:00) [8]


> А если проиндексировать таблицe по FileName - скорость увеличится?

А сам как думаешь? Для Locate - да. Для "элементарного" прохода - нет... Но если "проходить" правильно - то да.


asail   (2009-01-11 20:08:00) [9]

Попробуй сначала в строке поиска заменить одинарную кавычку на ДВЕ одинарные кавычки, а затем пихай в Locate. Думаю, проканает...


Чайник   (2009-01-11 18:36:00) [10]


> Anatoly Podgoretsky ©   (11.01.09 18:26) [3]
> > Чайник  (11.01.2009 18:07:00)  [0]
>
> Замени Locate элементарнейшем проходом по таблице (Next)
> и сравнение со значением (If)


А что быстрее будет работать?
А если проиндексировать таблицe по FileName - скорость увеличится?

(В базе порядка 50000 записей)


Anatoly Podgoretsky   (2009-01-11 18:26:00) [11]

> Чайник  (11.01.2009 18:07:00)  [0]

Замени Locate элементарнейшем проходом по таблице (Next) и сравнение со значением (If)


Чайник   (2009-01-11 18:20:00) [12]


> Медвежонок Пятачок ©   (11.01.09 18:18) [1]
> маскировать выражение поиска


А нельзя ли для чайника чуть подробнее?


Медвежонок Пятачок   (2009-01-11 18:18:00) [13]

маскировать выражение поиска


Наверх

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