Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ребята, утопаю !!!! ClientDataSet и фильтрация / 7 сообщений из 7, страница 1 из 1
30.07.2003, 06:27
    #32221651
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
есть ClientDataSet и необходимо делать фильтрацию по частичному соответствию в полях

задаю в четырех TEdit подстроку для фильтра
eClientCode
eByProjCode
eByNameFind
eSite

затем окончательная кнопка - на ней висит

procedure TfLocalProjects.actSearchExecute(Sender: TObject);
begin
with dsProjects.DataSet do
begin
Filtered := False;
Filtered := True;
end;

работает только по одному полю

а надо чтоб работала комбинация тоже


procedure TfLocalProjects.cdsProjectsFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin


// куски фильтрации по одному полю

With GroupBox4 do begin

If (rbClient.Checked)
and (rbProjCode.Checked =False)
and (rbName.Checked =False)
and (rbSite.Checked =False)
then
Accept := Pos(LowerCase(eClientCode.text), LowerCase(dsProjects.Dataset.fieldbyname('ClientCode').asstring))>0;


If (rbProjCode.Checked)
and (rbClient.Checked =False)
and (rbName.Checked =False)
and (rbSite.Checked =False)
then
Accept := Pos(LowerCase(eByProjCode.text), LowerCase(dsProjects.Dataset.fieldbyname('ProjOrder').asstring))>0;

If (rbClient.Checked=False)
and (rbProjCode.Checked =False)
and (rbName.Checked)
and (rbSite.Checked =False)
then
Accept := Pos(LowerCase(eByNameFind.text), LowerCase(dsProjects.Dataset.fieldbyname('title').asstring))>0 ;

If (rbClient.Checked =False)
and (rbProjCode.Checked =False)
and (rbName.Checked =False)
and (rbSite.Checked)
then
Accept := Pos(LowerCase(eSite.text), LowerCase(dsProjects.Dataset.fieldbyname('Region').asstring))>0 ;


//а тут хотелось чтоб совместный сработал - но не судьба
If (rbClient.Checked)
and (rbProjCode.Checked)
and (rbName.Checked=False)
and (rbSite.Checked= False)
then Accept :=((Pos(LowerCase(eClientCode.text), LowerCase(dsProjects.Dataset.fieldbyname('ClientCode').asstring))>0) and (Pos(LowerCase(eByProjCode.text), LowerCase(dsProjects.Dataset.fieldbyname('ProjOrder').asstring))> 0));

// и так далее я уже не привожу все остальные комбинации
// хотя бы добиться чтоб такой вариант сработал



end;
...
Рейтинг: 0 / 0
30.07.2003, 08:04
    #32221677
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
Что происходит то, я не понял? Фильтрует неправильно или не фильтрует?
Почему не пишешь так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
procedure TfLocalProjects.cdsProjectsFilterRecord(DataSet: TDataSet; 
var Accept: Boolean); 
begin 
With GroupBox4 do begin 
Accept:=true;
If rbClient.Checked
then 
Accept := Accept and (Pos(LowerCase(eClientCode.text),
   LowerCase(dsProjects.Dataset.fieldbyname('ClientCode').asstring))> 0 ); 

If rbProjCode.Checked
then 
Accept := Accept and (Pos(LowerCase(eByProjCode.text),
   LowerCase(dsProjects.Dataset.fieldbyname('ProjOrder').asstring))> 0 ); 

If rbName.Checked
then 
Accept := Accept and (Pos(LowerCase(eByNameFind.text),
   LowerCase(dsProjects.Dataset.fieldbyname('title').asstring))> 0 ) ; 

If rbSite.Checked
then 
Accept := Accept and (Pos(LowerCase(eSite.text),
   LowerCase(dsProjects.Dataset.fieldbyname('Region').asstring))> 0 ) ; 

end;
?
Можно ещё код сократить (спроси меня как), но пусть сначала этот заработает...
...
Рейтинг: 0 / 0
30.07.2003, 09:20
    #32221719
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
окей буду пробовать спасибо
----------------

у меня работают только первые 4 куска взаимоисключающие

если введен клиент, то фильтр только по нему должен быть
если введен кодпроекта, то фильтр только по нему должен быть
если введен имя проекта, то фильтр только по нему должен быть
если введен регион, то фильтр только по нему должен быть

а последний кусок я в качестве примера привел как хотелось бы чтоб работало
он не работает почему-то
(а о таком вариант как accept=accept and (.....) я даже не думал)

если введен и клиент и код проекта

а затем сочетания разные (все комбинации, их немного)

в общем все варианты такие
1
2
3
4

1,2
1,3
1,4

2,3
2,4
3,4

1,2,3
1,2,4
1,3,4

2,3,4

1,2,3,4 максимальный фильтр
...
Рейтинг: 0 / 0
30.07.2003, 10:02
    #32221767
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
Так ты и не написал, что не работает. Не фильтрует вообще или фильтрует неправильно? Или вообще ошибку даёт?
...
Рейтинг: 0 / 0
30.07.2003, 10:18
    #32221794
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
дык я ж пишу

"у меня работают только первые 4 куска взаимоисключающие "

а последний кусок когда два TEdita заполнены и использоваться должны оба

"а последний кусок я в качестве примера привел как хотелось бы чтоб работало не работает почему-то "

не работает
...
Рейтинг: 0 / 0
30.07.2003, 10:45
    #32221841
m_kus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
моя твоя не понимай...
Я понял, что у тебя не работает фильтр сразу по двум полям. Но не понял что происходит . В чём выражается, что он не работает . Как это проявляется... Почему ты утверждаешь, что первые четыре куска работает, а пятый - нет? Должны же быть какие-то внешние признаки... Фильтр накладывается неправильно, совсем не накладывается или выдаётся сообщение об ошибке... Не знаю, как ещё спросить...
Мой код попробовал?
...
Рейтинг: 0 / 0
30.07.2003, 21:30
    #32223065
Alexander2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ребята, утопаю !!!! ClientDataSet и фильтрация
оказывается все у меня работает

просто я в качестве флагов использовал RadioButtons статус

а они взаимосисключающие, если сидят в groupbox

убрал их нафиг и просто проверяю

If (eClient.Text <> '')
and (eProject.Text = '')
and (eName.Text <> '')
and (eSite.Text = '')
then Accept:=
(Pos(.....) > 0) and (Pos()>0);
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ребята, утопаю !!!! ClientDataSet и фильтрация / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]