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

Fexys

New member
22.01.2012
3
0
#1
Доброго времени суток.
Описание: Сделано представление в 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">
Код:
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">
Код:
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 тож молчит строго не судите, в делфи ковырялся давно и поверхностно.
 

Вложения

V88

Well-known member
22.10.2008
51
0
#2
Проблема: Фильтрация проводится. Но почему-то не действует DM.TVDor.Filtered:= False;. Если точнее..
После 1-ой фильтрации данные в Edit1-5 не чистятся (Refresh\Cancel\CancelUpdate.. и просто стиранием). Т.е. ввожу год - 2011, жанр - драма, далее стираю год переписываю жанр на комедию ничего не выводит из-за того, что год остался в буфере 2011.
При DM.TVDor.Filtered:= False надо обнулять переменную и, желательно бы при проверки на пустое значение Edit обрезать пробелы ф-ей Trim():
Код:
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 ов