Вниз
Скачать: CL | DM;

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

← →
Чайник ©   (2009-01-11 18:07) [0]

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

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

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


← →
Медвежонок Пятачок ©   (2009-01-11 18:18) [1]

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


← →
Чайник ©   (2009-01-11 18:20) [2]


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


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


← →
Anatoly Podgoretsky ©   (2009-01-11 18:26) [3]

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

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


← →
Чайник ©   (2009-01-11 18:36) [4]


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


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

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


← →
asail   (2009-01-11 20:08) [5]

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


← →
asail   (2009-01-11 20:11) [6]


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

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


← →
Anatoly Podgoretsky ©   (2009-01-11 20:12) [7]

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

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


← →
Anatoly Podgoretsky ©   (2009-01-11 20:16) [8]

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

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


← →
Чайник ©   (2009-01-11 20:44) [9]

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


← →
Anatoly Podgoretsky ©   (2009-01-11 21:18) [10]

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

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


← →
Чайник ©   (2009-01-11 21:22) [11]


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


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


← →
sniknik ©   (2009-01-11 22:51) [12]

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


← →
sniknik ©   (2009-01-11 22:52) [13]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.007 c
2-1256906798
Aleks
2009-10-30 15:46
2009.12.20
Как очистить CheckBoxes при показе ListView?


15-1256014607
@!!ex
2009-10-20 08:56
2009.12.20
Как сделать движущуюся линию на Flash?


2-1257182783
STD
2009-11-02 20:26
2009.12.20
Выполнить в фоне


2-1257238572
Кедр
2009-11-03 11:56
2009.12.20
OpenOffice


2-1256913703
Serge
2009-10-30 17:41
2009.12.20
Предпросмотр и печать ListView




   Наверх