Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как обойти глюк в фильтрации... [D6, MSSQL]


Страницы:   1 2

Andrey__ ©   (2003-05-22 11:13:00) 

Подскажите как обойти глюк в фильтрации...

Есть компонент TADOQuery
устанавливаю свойство
Filter := "((Cod_UU = 13) and (God = 2003)) OR
((Cod_UU = 15) and (God = 2003))"; - все работает

устанавливаю свойство
Filter := "((Cod_UU = 13) OR (Cod_UU = 15)) and
(God = 2003)"; - ошибка при попытке установить свойство Filtered := True;

подскажите, что не так...


andrey__   (2003-05-23 15:42:00) [1]

но всетаки кто нибудь подскажите
то что, когда я пишу
Filter := "((Cod_UU = 13) and (God = 2003)) OR
((Cod_UU = 15) and (God = 2003))"; - все работает

устанавливаю свойство
Filter := "((Cod_UU = 13) OR (Cod_UU = 15)) and
(God = 2003)"; - не работает

это глюк или я что-то делаю не так.
(для меня воспользоватся свойством Filter оптимальный вариант).


andrey__   (2003-05-23 15:22:00) [2]

Соловьев спасибо помог.


Соловьев   (2003-05-22 16:02:00) [3]


> or (Cod_UU

or (DataSet.FieldByName("Cod_UU").AsInteger=qrList_UU_PCod_UU.AsInteger);


Соловьев   (2003-05-22 15:56:00) [4]

procedure TfmTabShag.qrSel30FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
var temp_bool: boolean;
i: integer;
begin
temp_bool := true;
for i := 1 to qrList_UU_P.RecordCount do
begin
if (qrList_UU_PCod_Pt.Value=varCod_Pt ) and
(qrList_UU_PCod_Vid_En.Value=varVid_En)
then
temp_bool := temp_bool or (Cod_UU = "+IntToStr(qrList_UU_PCod_UU.Value);
qrList_UU_P.Next;
end;
Accept:= temp_bool;
end;


andrey__   (2003-05-22 15:54:00) [5]

>ошибка вида Andrey__ (22.05.03 11:23)?

да


Соловьев   (2003-05-22 15:46:00) [6]


> не работает

ошибка вида Andrey__ (22.05.03 11:23)?


andrey__   (2003-05-22 15:43:00) [7]

>я не правильно выразился, посмотри то что ты присваиваешь.

то что я присваиваю имеет придлезительный вид:
qrSel30.Filtered := "(God = 2003) and (Мes = 5) and ((Cod_UU = 13) OR (Cod_UU = 115) OR (Cod_UU = 12))"; не работает

я эксперементировал если все OR заменить на AND все работает


Соловьев   (2003-05-22 15:27:00) [8]

я не правильно выразился, посмотри то что ты присваиваешь.


andrey__   (2003-05-22 15:22:00) [9]

>посмотри чему равна строка фильтра перед присваиванием.
посмотрел пустая ("") какая разница всеравно переприсваиваем.


Соловьев   (2003-05-22 15:11:00) [10]

посмотри чему равна строка фильтра перед присваиванием.


andrey__   (2003-05-22 15:10:00) [11]

>St_UU должно быть вида (1,3,6,7,11)
пытался ,результат тот же.


andrey__   (2003-05-22 15:08:00) [12]

извини забыл поставить скобки (новая версия).

Ести запрос qrList_UU_P у которого след. поля
Cod_Pt / Cod_UU / Vid_En

и ести запрос qrSel30 у которого след. поля
Num_Min / Cod_UU / God / Mes / Den /Znach


qrSel30.Filtered := False;
St_UU :="";

//по определенным varCod_Pt и varVid_En
for I := 1 to qrList_UU_P.RecordCount do
begin
if (qrList_UU_PCod_Pt.Value=varCod_Pt ) and
(qrList_UU_PCod_Vid_En.Value=varVid_En) then
St_UU := St_UU+"(Cod_UU = "+IntToStr(qrList_UU_PCod_UU.Value)
+") OR ";
qrList_UU_P.Next;
end;
//убиваю последнее OR
if St_UU <> "" then
St_UU := "("+Copy(St_UU,1,Length(St_UU) - 4)+")";

//определены: Rb_God, Rb_Mes, Rb_Den, Num_Min
qrSel30.Filter := "(God = "+IntToStr(Rb_God)+") AND ("+
"Mes = "+IntToStr(Rb_Mes)+") AND ("+
"Den = "+IntToStr(Rb_Den)+") AND ("+
"Num_Min = "+IntToStr(Num_Min)+") AND "+
St_UU;
qrSel30.Filtered := True; //выдает ошибку!


Соловьев   (2003-05-22 15:05:00) [13]



> "Cod_UU in "+St_UU;

St_UU должно быть вида (1,3,6,7,11)


andrey__   (2003-05-22 14:57:00) [14]

>как это получается?
>код?

Ести запрос qrList_UU_P у которого след. поля
Cod_Pt / Cod_UU / Vid_En

и ести запрос qrSel30 у которого след. поля
Num_Min / Cod_UU / God / Mes / Den /Znach


qrSel30.Filtered := False;
St_UU :="";

//по определенным varCod_Pt и varVid_En
for I := 1 to qrList_UU_P.RecordCount do
begin
if (qrList_UU_PCod_Pt.Value=varCod_Pt ) and
(qrList_UU_PCod_Vid_En.Value=varVid_En) then
St_UU := St_UU+"Cod_UU = "+IntToStr(qrList_UU_PCod_UU.Value)
+" OR ";
qrList_UU_P.Next;
end;
//убиваю последнее OR
if St_UU <> "" then
St_UU := Copy(St_UU,1,Length(St_UU) - 4);

//определены: Rb_God, Rb_Mes, Rb_Den, Num_Min
qrSel30.Filter := "God = "+IntToStr(Rb_God)+" AND "+
"Mes = "+IntToStr(Rb_Mes)+" AND "+
"Den = "+IntToStr(Rb_Den)+" AND "+
"Num_Min = "+IntToStr(Num_Min)+" AND "+
"Cod_UU in "+St_UU;
qrSel30.Filtered := True; //выдает ошибку!


Соловьев   (2003-05-22 14:30:00) [15]


> "((Cod_UU = 13) OR (Cod_UU = 15)) and (God = 2003)"
> потом
> "((Cod_UU = 13) OR (Cod_UU = 15)OR (Cod_UU = 124)) and (God
> = 2003)"
> потом
> "((Cod_UU = 13) OR (Cod_UU = 115)OR (Cod_UU = 12)) and (God
> = 2003) and (Мes = 5)"

как это получается?
код?


andrey__   (2003-05-22 14:28:00) [16]

>при создании и вычисляй.
была такая строка st:
"((Cod_UU = 13) OR (Cod_UU = 15)) and (God = 2003)"
потом
"((Cod_UU = 13) OR (Cod_UU = 15)OR (Cod_UU = 124)) and (God = 2003)"
потом
"((Cod_UU = 13) OR (Cod_UU = 115)OR (Cod_UU = 12)) and (God = 2003) and (Мes = 5)"

если можеш приведи маленикий пример типа:

function Logical(st : string):Boolean;
begin
...//по строке выдаем результат. Как?
end;


Соловьев   (2003-05-22 13:52:00) [17]


> Я могу создать строку

при создании и вычисляй.


andrey__   (2003-05-22 13:49:00) [18]

>всю строку можно увидеть?
нет т.к. заранее не известна( см. пред. ответ)

>А кто тебе мешает написать функцию которая будет выдавать логическое значение по типу Filter?

Я могу создать строку
"((DataSet["Cod_UU"]=13) or (DataSet["Cod_UU"]=15)) and
(DataSet["God"]=2003)"
или

"((Cod_UU = 13) OR (Cod_UU = 15)) and (God = 2003)"

и передать ее в процедуру, но как по это строке выполнить логическую операцию (вернуть True или False).


Соловьев   (2003-05-22 13:29:00) [19]


> А в Filter строку всегда можно изменить

А кто тебе мешает написать функцию которая будет выдавать логическое значение по типу Filter?


KoluChi   (2003-05-22 13:28:00) [20]


> andrey__ (22.05.03 11:42)
> Дело в том, что я написал упрощенный вариант. На самом деле
> у меня будет больше "OR" и "AND".

всю строку можно увидеть?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо