powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ребята, утопаю !!!! ClientDataSet и фильтрация
7 сообщений из 7, страница 1 из 1
ребята, утопаю !!!! ClientDataSet и фильтрация
    #32221651
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть 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
ребята, утопаю !!!! ClientDataSet и фильтрация
    #32221677
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что происходит то, я не понял? Фильтрует неправильно или не фильтрует?
Почему не пишешь так:
Код: 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
ребята, утопаю !!!! ClientDataSet и фильтрация
    #32221719
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
окей буду пробовать спасибо
----------------

у меня работают только первые 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
ребята, утопаю !!!! ClientDataSet и фильтрация
    #32221767
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ты и не написал, что не работает. Не фильтрует вообще или фильтрует неправильно? Или вообще ошибку даёт?
...
Рейтинг: 0 / 0
ребята, утопаю !!!! ClientDataSet и фильтрация
    #32221794
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык я ж пишу

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

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

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

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

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

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

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

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


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