![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый поиск по базе Paradox [D7, Paradox]
pvv © (2003-08-26 13:21:00)
Есть база парадоксовская, в ней поле Brus.
В этом поле только русские названия. Пытаюсь организовать по этому полю быстрый поиск. Пользуюсь методом Locate. Работает на ура, но только в том случае если я соблюдаю регистр названия.
Например: в базе "Пример" = вводим "Пример", находит, а если введем "пример", то не находит. Подразумеваю, что косяк с преобразованием регистров. Делаю так:
T.Locate("Brus", Edit1.Text, [loCaseInsensitive, loPartialKey]);
Тот же косяк и с фильтром.
Не подскажут ли мастера, как решить такую задачку, или может я криво где написал.
За любые предложения спасибо.
pvv (2003-08-29 01:11:00) [1]
> MsGuns © (28.08.03 17:24) [13]
> Ничего себе - идея ! Код готовый
С при великими извенениями к
> Sandman25 © (28.08.03 15:19) [11]
Просто огромное спасибо!
Но еще не успел попробовать. У мени ночь только что закончилась :)
Sandman25 (2003-08-28 18:06:00) [2]
[13] MsGuns © (28.08.03 17:24)
Может, он имел в виду, что там еще можно кое-какую оптимизацию произвести, например вынести SearchFor := AnsiUpperCase(FilterEd.Text); LengthFor := Length(SearchFor) из процедуры в какой-нибудь btSearchClick, чтобы не рассчитывать слишком часто.
А вообще согласен, код готовый :)
MsGuns (2003-08-28 17:24:00) [3]
Ничего себе - идея ! Код готовый.
pvv (2003-08-28 16:59:00) [4]
> Sandman25 © (28.08.03 15:19) [11]
Спасибо за идею попробую так сделать.
Sandman25 (2003-08-28 15:19:00) [5]
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
SearchFor, SearchIn: string;
Index, LengthFor: integer;
begin
SearchFor := AnsiUpperCase(FilterEd.Text);
LengthFor := Length(SearchFor);
SearchIn := AnsiUpperCase(DataSet.FieldByName("Brus").AsString);
Accept := False;
if Length(SearchIn) >= LengthFor then
begin
for Index := 1 to LengthFor do
if SearchIn[Index] <> SearchFor[Index] then
exit;
Accept := True;
end;
end;
pvv (2003-08-28 13:38:00) [6]
> Переведите. В смысле регистро-независимый или по части текста
> ?
> Или и то и другое ? Или дядька в Киеве ?
И регистро независимый фильтр и по части одновременно.
Если я поступаю неправильно перейдя на примерно похожую тему, то могу задать отдельный вопрос
pvv (2003-08-28 13:35:00) [7]
Если не затруднит.
Можно полностью код, при условии что текст вводится в FilterEd, а поле Brus. Не поимите меня неправильно, но почасти БД я пока еще не очень, я пробовал эксперементировать с фильтром, наткнулся тока на ошибки и зависания.
И еще, upper для руских буковок канает.
PS: Вводить буду не только один символ.
MsGuns (2003-08-28 13:32:00) [8]
>pvv © (28.08.03 13:24) [5]
>А вот по поводу фильтра никто не подскажет?
Есть способ сделать фильтр регистро низевисимым?
Тобишь по букве "к" выбрал бы "как" и "Кто".
Переведите. В смысле регистро-независимый или по части текста ?
Или и то и другое ? Или дядька в Киеве ?
>Sandman25 © (28.08.03 13:25) [6]
>Sandman25 © (28.08.03 13:26) [7]
Так базар вроде идет о поиске, а не о выборке
Sandman25 (2003-08-28 13:26:00) [9]
или ... like upper("к%")
Sandman25 (2003-08-28 13:25:00) [10]
... where upper(field) like "K%"
pvv (2003-08-28 13:24:00) [11]
А вот по поводу фильтра никто не подскажет?
Есть способ сделать фильтр регистро низевисимым?
Тобишь по букве " к" выбрал бы " как" и " Кто".
pvv (2003-08-28 13:20:00) [12]
Спасибо за советы.
Я розобрался.
В базе поставил Language=PDox ansi cirilic
И будто все так и было. Все ище, все работает.
Dred2k (2003-08-26 15:04:00) [13]
> SPIRIT © (26.08.03 14:50) [2]
Мда, это что-то новенькое. И вечный Locate, покой нам только снится...
> pvv © (26.08.03 13:21)
Тут дело в некорректности таблиц сортировки для кирилицы в BDE. Подробно я сам это не копал, пользуюсь подправленными модулями кодировок (сделаны для поддержки Paradox4 for DOS в BDE). Вот с ними ищет без особых проблем.
SPIRIT (2003-08-26 14:50:00) [14]
T.Locate("Brus", Edit1.Text, [loPartialKey]);
T.Locate("Brus", Edit1.Text, [loCaseInsensitive]);
корректно писать вот так
Lvitaliy (2003-08-26 13:37:00) [15]
не помню кажется это то. нужно обязательно индекс поэтому полю Table1.FindKey