Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 16:09   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию Фильтрация (delphi)

Добрый день!
Подскажите пожалуйста, как прописать фильтрацию, чтобы выводились записи по одному полю в значениях которых последний символ равен нулю?

одно поле должно быть пустым:
При активации формы пишу:
Table.Filter := '[xxx] = ''''';
другое поле должно заканчиваться на ноль
procedure TableFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := Table.FieldByName('zzz').AsString = '%0';
end;
программа зацикливается, что не правильно?

Последний раз редактировалось VadEr; 09.10.2009 в 16:57.
VadEr вне форума Ответить с цитированием
Старый 09.10.2009, 17:11   #2
DuM4uK
Пользователь
 
Регистрация: 29.09.2009
Сообщений: 32
По умолчанию

Тут я тебе посоветую проверять в цикле каждую запись на 0, если равна то выводить.
Другого варианта не вижу пока.
DuM4uK вне форума Ответить с цитированием
Старый 09.10.2009, 23:04   #3
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

если есть возможность использовать Query то там это реализуется проще, методом like ('%0')
Usov вне форума Ответить с цитированием
Старый 10.10.2009, 08:09   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Accept := Table.FieldByName('zzz').AsString = '%0';
так нельзя. Подстановочные знаки можно использовать только при запросе в конструкции LIKE
И программа не "зацикливается" - а просто ни одной записи, в которой написано %0 (именно в поле два символа первый символ - знак процента, второй символ - ноль) - НЕТ! поэтому и выдавать нечего.

я бы Вам рекомендовал прислушаться к совету Usov и в запросе отбирать нужные записи, это будет проще, нагляднее и намного эффективнее!

но, если же хочется это сделать через фильтрацию,то попробуй примерно такой код:
Код:
procedure TableFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var s : string;
begin
  s := Table.FieldByName('zzz').AsString;
  Accept :=  Copy(s, Length(s),1) =  '0';
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2009, 14:07   #5
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Спасибо помогло. Но возник вопрос по эффективности: где скорость работы будет выше - в sql или table? таблица содержит не одну тысячу записей
VadEr вне форума Ответить с цитированием
Старый 10.10.2009, 15:40   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Это зависит от разных условий...
Но, в подавляющем большинстве случаев - быстрее будет использовать запрос, т.к. запрос, конечно, будет выполнятся чуть дольше ( чем без условия LIKE ), но потом работа с полученным набором данных будет намного быстрее, чем с использованием функции TableFilterRecord...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi\MySql\Фильтрация. MaGWaY_minsk Помощь студентам 2 17.06.2009 11:01
Фильтрация в Delphi с помощью Combobox Веснушка_ната Помощь студентам 4 07.04.2009 02:36
Фильтрация Felonalex БД в Delphi 4 24.10.2008 20:09
Фильтрация в Delphi Лукманов Александр БД в Delphi 4 16.06.2008 15:30
Фильтрация Gorychev БД в Delphi 20 10.06.2008 23:30