![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как обойти глюк в фильтрации... [D6, MSSQL]
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".
всю строку можно увидеть?