Помогите С Onfilterrecord. Работает, Но Немного Криво :)

Тема в разделе "Delphi - Базы данных", создана пользователем Fexys, 22 янв 2012.

  1. Fexys

    Fexys New Member

    Регистрация:
    22 янв 2012
    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток.
    Описание: Сделано представление в SQL Server выведено в DBGrid с сортировкой по названию (в IndexFieldNames). Написал фильтр который вроде более оптимальный (т.к. AdoTable и вывод DBGrid находятся на разных формах).

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код фильтра в TVDor"</div></div><div class="sp-body"><div class="sp-content">
    Код (Delphi):
    procedure TDM.TVDorFilterRecord(DataSet: TDataSet; var Accept: Boolean);
    var
    j,s,n,g,r,k : string; //для значения поля
    begin
    //получаем столько начальных букв из поля Жанр, сколько букв имеется в переменной j:
    r := Copy(DataSet['Rej'], 1, Length(Rej));
    j := Copy(DataSet['Janr'], 1, Length(Janr));
    s := Copy(DataSet['Str'], 1, Length(Str));
    n := Copy(DataSet['NazvRus'],1,Length(Nazv));
    g := Copy(DataSet['God'], 1, Length(God));
    //делаем проверку на совпадение значений
    Accept := (g = God) and (s = Str) and (j = Janr) and (r = Rej) and (n = Nazv);
    end;
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">""</div></div><div class="sp-body"><div class="sp-content">
    Код (Delphi):
    procedure TForm12.Edit1Change(Sender: TObject);  // Представление Фильмы
    begin
    if Edit1.Text <> '' then begin
    DM.TVDor.Filtered:= False;
    Rej := Edit1.Text;
    DM.TVDor.Filtered:= True;
    end
    else DM.TVDor.Filtered:= False;
    end;
    // и т.д. на 5 Edit ов
    Проблема: Фильтрация проводится. Но почему-то не действует DM.TVDor.Filtered:= False;. Если точнее..
    После 1-ой фильтрации данные в Edit1-5 не чистятся (Refresh\Cancel\CancelUpdate.. и просто стиранием). Т.е. ввожу год - 2011, жанр - драма, далее стираю год переписываю жанр на комедию ничего не выводит из-за того, что год остался в буфере 2011.

    А и за одно подскажите пожалуйста, как сделать, чтоб окно представления обновлялось(отменялся фильтр\сорт и добавлялись данные, которые в основном окне добавляются).

    P.s. Метод тыка не помогает, Google тож молчит строго не судите, в делфи ковырялся давно и поверхностно.
     

    Вложения:

    • 123.png
      123.png
      Размер файла:
      227,9 КБ
      Просмотров:
      18
    • Безымянный.png
      Безымянный.png
      Размер файла:
      19,2 КБ
      Просмотров:
      15
  2. V88

    V88 Well-Known Member

    Регистрация:
    22 окт 2008
    Сообщения:
    51
    Симпатии:
    0
    При DM.TVDor.Filtered:= False надо обнулять переменную и, желательно бы при проверки на пустое значение Edit обрезать пробелы ф-ей Trim():
    Код (Delphi):
    procedure TForm12.Edit1Change(Sender: TObject);  // Представление Фильмы
    begin
    if Trim(Edit1.Text) <> '' then begin
    DM.TVDor.Filtered:= False;
    Rej := Edit1.Text;
    DM.TVDor.Filtered:= True;
    end
    else begin
    DM.TVDor.Filtered:= False;
    Rej := '';
    end;
    end;
    // и т.д. на 5 Edit ов
     
Загрузка...

Поделиться этой страницей