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

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

Быстрый поиск по базе 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


Наверх

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