![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Метод 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]маскировать выражение поиска