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

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

Как отфильтровать компонент ADOTable по заданному фильтру.


Страницы:   1 2

jeka_t ©   (2004-02-04 18:30:00) 

Помогите кто знает.
У этого компонента нет свойства FilterOptions.
Что можно придумать я не знаю.


jeka_t   (2004-02-06 14:56:00) [1]

Теперь и догнал почему выгоден второй код.
Проверка строки только по длине подстроки а не всей строки как в POS.
Ещё раз спосибо за предложение. и за разяснение...


jeka_t   (2004-02-06 11:42:00) [2]


> sniknik

Я понял идею, только не могу понять, почему второй способ быстрее? (он же тоже должен проверять всю строчку на совпадении)
Если не трудно то прошу тебя разъяснить мне, как начинающему.
Заранее тебе благодарен.


sniknik   (2004-02-05 18:57:00) [3]

чем что угодно, POS это полный скан строки на несовпадении.

вообщето трудно судить, кода ты не показываеш, а значит и в ответ получаеш общие фразы. а тут пытаеш конкретику вызнать, могу только на предположениях.
допустим у тебя такой код, допушение построено на (используеш Pos, начало строки как выше > [4], желание CaseInsensitive), можно предположить такое


procedure TForm1.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept:= Pos("ВАС", UpperCase(DataSet.Fields[0].AsString)) = 1;
end;

похоже?
(можно предположить еще хуже но не буду ;о))

и этот код гораздо более медленный чем с copy от которого ты отказался [21] аналогичного этому

procedure TForm1.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept:= UpperCase(Copy(DataSet.Fields[0].AsString, 1, Length("ВАС"))) = "ВАС";
end;


jeka_t   (2004-02-05 17:56:00) [4]


> sniknik

Чем что?


sniknik   (2004-02-05 17:51:00) [5]

> Спасибо. Только Ваша идея воплотила мои мечты по фильтровке
> Токмо я не использовал Copy, но добавил POS.
ну хоть чтото удалось.
зря POS используеш, медленнее.


sniknik   (2004-02-05 17:49:00) [6]

ADODataSet1.Filter:= "st1 Like ""RP%""";
ADODataSet1.Filtered:= true;

st1 в таблице текстовое поле
2 записи в рекордсете price и summ
выполняю по кнопке вышеописанный код, остается одна запись с price, вывод работает. (по крайней мере с используемым мной и уже описанным еще выше провайдером)

а вот по этому
> Вот я проверил и нифига не пашет это Like.
никаких выводов сделать нельзя.


jeka_t   (2004-02-05 17:46:00) [7]


> Johnmen

Спасибо. Только Ваша идея воплотила мои мечты по фильтровке
Токмо я не использовал Copy, но добавил POS.
Ещё раз всем спасибо за участие и помощь в данном вопросе.


Anatoly Podgoretsky   (2004-02-05 17:44:00) [8]

jeka_t (05.02.04 16:51) [17]
Кто кричал, что не существует? И кто говорил, что работает, существует, но не обящано работать, от много зависит

jeka_t (05.02.04 17:30) [19]
Как?
Именно так - я тебя крою?


jeka_t   (2004-02-05 17:30:00) [9]

Вот я проверил и нифига не пашет это Like.
Короче, матом кроет меня за это.


sniknik   (2004-02-05 17:22:00) [10]

> Кто-то говорил что свойство FilterOptions существует.
и это легко проверить, исходники компонент и хелп в дельфи у меня такие же как у тебя.

> Но тут вдруг стало неподдерживатся.
может быть, но не обязательно неподдерживается, это так к сведению. (причем не вдруг стало а было и есть как было, надо проверять. а кому оно надо?)

> Отчего я могу верить что Like тоже существует для Jet 4.0?
а верить то зачем? порверка пару минут займет.


jeka_t   (2004-02-05 16:51:00) [11]


> sniknik

Кто-то говорил что свойство FilterOptions существует.
Но тут вдруг стало неподдерживатся.
Отчего я могу верить что Like тоже существует для Jet 4.0?


jeka_t   (2004-02-05 16:47:00) [12]

Как же можна проверить существование в Строке S подстроку PS?


sniknik   (2004-02-05 15:58:00) [13]

> Оператор Like здесь не существует...
серьезно?
для ADO - Access - jet - ADODataSet.Filter это замечательно работает.
для используемого тобой провайдера возможно и нет. (н оно все одно есть ;о))


jeka_t   (2004-02-05 15:34:00) [14]


> sniknik

Оператор Like здесь не существует...


sniknik   (2004-02-05 15:13:00) [15]

неправильно
это если свой компонент делать тогда так вынести можно только наследуясь от TADOTable а не фориы, а пока делай так
begin
ADOTable1.FilterOptions:= [foCaseInsensitive];
....

кстати если даже свойство есть то оно не обязательно поддерживается. %о)
похоже придется тебе все же через OnFilterRecord делать, или задавать фильтр по другому
вот так будет CaseInsensitive
Filter:= "Mark LIKE ""ВАС%""";


jeka_t   (2004-02-05 14:50:00) [16]

type
TADOTable = class(TForm)
published
property FilterOptions;
end;


Похоже? или я не правильно?


app   (2004-02-05 14:39:00) [17]

jeka_t (05.02.04 14:37) [10]
С помощью операции присвоения, учимся работать без мышки.


jeka_t   (2004-02-05 14:37:00) [18]

Токмо не понятно как же туда его то засунуть?


jeka_t   (2004-02-05 14:28:00) [19]


> sniknik

Вот спасибо. Это то что мне нужно было...
Я только не могу понять, почему в книгах этот момент не описываеться (в "помощи" тоже не нашёл), а если я не прав то пришу хоть название книги, где это есть.

> Anatoly Podgoretsky

Приношу свои извинения. Я HELP читал, но не отыскал...


sniknik   (2004-02-05 13:50:00) [20]

> Если ты не веришь, то проверь, а потом можешь утверждать и доказывать.
лутше ты еще раз посмотри.
если свойство не вынесено в published это не значит что его совсем нет.


Страницы:   1 2

Наверх

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