WizAlx
@WizAlx

Фильтр ADOTable. Как отфильтровать целые числа?

Доброго времени суток, Хабрчане.

Прошу помочь в решении следующей проблемы.

Среда программирования Delphi 7. БД — MS SQL Server 2008 R2.

Имеется компонент ADOTable. Через него организована фильтрация таблицы свойством ADOTable.Filter.

Данные типа varchar фильтруются без проблем, но вот с целыми числами возникла загвоздка. При вводе цифры выводит сообщение «Не удается открыть фильтр».

Код фильтрации:

procedure TForm1.Filter;
var filtr,add:string;
begin
  Table.Filtered:=false;
  filtr:='';
  if length(IDed.Text)>0 then
    filtr:='id LIKE '+#39+IDed.Text+'%'+#39;

  if length(DeEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'descr LIKE '+#39+DeEd.Text+'%'+#39;
   end;

   if length(DLEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'deadline LIKE '+#39+DLEd.Text+'%'+#39;
   end;

   if length(DLEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'deadline LIKE '+#39+DLEd.Text+'%'+#39;
   end;

   if length(PEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'priorit LIKE '+#39+PEd.Text+'%'+#39;
   end;

   if length(GrEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'groupT LIKE '+#39+GrEd.Text+'%'+#39;
   end;

  if length(DendEd.Text)>0 then
   begin
    if length(filtr)>0 then
      add:=' AND '
    else add:='';
    filtr:=filtr+add+'dateEnd LIKE '+#39+DendEd.Text+'%'+#39;
   end;

   if length(filtr)>0 then
     begin
       Table.Filter:=filtr;
       Table.Filtered:=true;
     end;
end;



Процедура фильтрации запускается при вводе символов в Edit-ы.

Ну и кусочек формы с edit-ами.

13f7c2d04477.jpg


То есть не фильтрует по полям id и p. Все остальные поля varchar(50).

Заранее спасибо за помощь!
  • Вопрос задан
  • 5952 просмотра
Решения вопроса 1
WizAlx
@WizAlx Автор вопроса
Решение нашлось на свежем воздухе. Придя домой я быстренько начал проверять. И что вы думаете? Все работает!
Дело в том, что проблема заключалась не в типах данных, а в синтаксисе запроса на фильтрацию, а точнее в знаке "%".
Точно пока привести код программы не могу, но теперь хотя бы все понятно.
И да, почаще бывайте на свежем воздухе =)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы