обработка запроса в цикле
Модераторы: m0p3e, edward_K, Модераторы
обработка запроса в цикле
Подскажите пожалуйста где ошибка в отчёте
Есть следующий отчет:
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((klsisopl.sisopl == tarstav.sisopl)) AND
Tar.group= tarstav.codtar;
...
.begin j:=0 end.
.{while j<3
.begin
j:=j+1
Tar.group:=j
i:=Tar.GetFirst
end.
.{?INTERNAL; i=0
.{table 'Tar'
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
.}
То есть в цикле меняется условие фильтрации для представления Tar
Результат работы этого отчёта
Tar.group Tar.tarstav.codtar
1 1
2 1
3 1
Как видно условие фильтрации не применяется и всегда выводятся одни и те же данные (в примере Tar.tarstav.codtar всегда 1, хотя Tar.group изменяется)
Не могу понять что неправильно, кто знает подскажите
Есть следующий отчет:
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((klsisopl.sisopl == tarstav.sisopl)) AND
Tar.group= tarstav.codtar;
...
.begin j:=0 end.
.{while j<3
.begin
j:=j+1
Tar.group:=j
i:=Tar.GetFirst
end.
.{?INTERNAL; i=0
.{table 'Tar'
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
.}
То есть в цикле меняется условие фильтрации для представления Tar
Результат работы этого отчёта
Tar.group Tar.tarstav.codtar
1 1
2 1
3 1
Как видно условие фильтрации не применяется и всегда выводятся одни и те же данные (в примере Tar.tarstav.codtar всегда 1, хотя Tar.group изменяется)
Не могу понять что неправильно, кто знает подскажите
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Re: обработка запроса в цикле
Логическая таблица не верна
либо она должна выглядеть так, судя по вашему коду
либо
но в этом случае где цикл по класификатору?
либо она должна выглядеть так, судя по вашему коду
Код: Выделить всё
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((
group == tarstav.codtar (noindex) and
tarstav.sisopl == klsisopl.sisopl
));
Код: Выделить всё
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((
klsisopl.sisopl ==tarstav.sisopl and
group == tarstav.codtar
));
Жду выхода Вселенная 2.12!
для приведённого примера рабочий запрос выглядит следующим образом
вместо ... надо написать что-то типа Tar.group==GroupTar, но так писать нельзя
вопрос: как это правитьно записать?
раньше было group=tarstav.codtar, а теперь надо чтобы group было равно tarstav.codtar, но без последних двух цифр (это записано как integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar) )
но если написать
то компилятор обругает нехорошими словами
Код: Выделить всё
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar),
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE ((klsisopl.sisopl == tarstav.sisopl AND ...));
вопрос: как это правитьно записать?
раньше было group=tarstav.codtar, а теперь надо чтобы group было равно tarstav.codtar, но без последних двух цифр (это записано как integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar) )
но если написать
Код: Выделить всё
((klsisopl.sisopl == tarstav.sisopl and
(integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))==group)
));
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
убрать подцепку на группу
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
Код: Выделить всё
.{table 'Tar'
.{?INTERNAL; (integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))=group)
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
Жду выхода Вселенная 2.12!
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
убрать подцепку на группу
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
Код: Выделить всё
.{table 'Tar'
.{?INTERNAL; (integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))=group)
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
Жду выхода Вселенная 2.12!