powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вложенные IIF
6 сообщений из 6, страница 1 из 1
Вложенные IIF
    #32541263
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select ;
IIF(rpt_it2bal.what='O',; && исходящие остатки
IIF(cursor_peport_rules.valuta='I', cursor_balance.out_db_ost+cursor_balance.out_kr_ost,;
IIF(cursor_peport_rules.valuta='R', cursor_balance.out_db_o_r+cursor_balance.out_kr_o_r,;
IIF(cursor_peport_rules.valuta='V', cursor_balance.out_db_o_v+cursor_balance.out_kr_o_v,0))),;
IIF(cursor_peport_rules.what='I',; && входящие остатки
IIF(cursor_peport_rules.valuta='I', cursor_balance.in_db_ost+cursor_balance.in_kr_ost,;
IIF(cursor_peport_rules.valuta='R', cursor_balance.in_db_o_r+cursor_balance.in_kr_o_r,;
IIF(cursor_peport_rules.valuta='V', cursor_balance.in_db_o_v+cursor_balance.in_kr_o_v,0))),;
IIF(cursor_peport_rules.what='B',; && обороты
IIF(cursor_peport_rules.valuta='I', cursor_balance.db_oborot+cursor_balance.kr_oborot,;
IIF(cursor_peport_rules.valuta='R', cursor_balance.db_obor_r+cursor_balance.kr_obor_r,;
IIF(cursor_peport_rules.valuta='V', cursor_balance.db_obor_v+cursor_balance.kr_obor_v,0))),;
0))) as сумма;
from ...

VFP 7 вываливается с сообщением "Слишком сложное выражение SQL." Как жить?
...
Рейтинг: 0 / 0
Вложенные IIF
    #32541318
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь следующее:

-) Убедись, что перед каждым знаком переноса команды (точка с запятой) стоит пробел. Точнее, пробел нужен в тех местах, где необходимо выделить какое-либо ключевое слово. Например, в твоем примере перед ключевым словом "FROM" нет пробела. Это будет воспринято как ошибка.

-) Убедись, что полная длина полученного SQL-выражения не превышает 8,192 символа

-) В самую последнюю очередь можно поиграться настройкой SYS(3055). Но это крайний случай. По возможности, лучше ее не трогать.
...
Рейтинг: 0 / 0
Вложенные IIF
    #32541353
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri
> VFP 7 вываливается с сообщением "Слишком сложное выражение SQL." Как жить?

Я считаю, что необходимо упростить выражение. Например, разбить его на три запроса: вычисления исходящих остатков, входящих остатков и оборотов, а затем четвертым просто объединить их.
Может быть это будет немного длинее, зато логичнее и легче будет искать ошибки :-)
...
Рейтинг: 0 / 0
Вложенные IIF
    #32541635
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.

Нет, не получиться - это не вычисление остатков - а нечто другое - union тут не поможет. Переписать можно - но уж больно некрасивый код получается...

ВладимирМ
, что перед каждым знаком переноса команды

Вообще-то, это runtime ошибка

не превышает 8,192 символа

Не превышает

SYS(3055).
Игрался, но судя по всему он не для этого...
...
Рейтинг: 0 / 0
Вложенные IIF
    #32541670
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а комментарии после точки с запятой давно ли разрешены?

select ;
bla-bla-bla ; && исходящие остатки
from ttt

Это во-первых.
А во-вторых, почему бы не сделать

select pr.x, pr.y ;
from cursor_peport_rules as pr

Короче будет ;-)

В-третьих, udf в select'ах нормально работают:

select my_udf(rpt_it2bal.what,cursor_peport_rules.valuta ;
,cursor_balance.out_db_ost, cursor_balance.out_kr_ost ;
,cursor_balance.out_db_o_r+cursor_balance.out_kr_o_r ;
,cursor_balance.out_db_o_v+cursor_balance.out_kr_o_v ;
) from ...

********
function my_udf
lparameters pwhat, pval, pdost, pkost, pdor, pkor, pdov, pkov
local lnout
do case
case pwhat ='O'
do case
case pval = 'I'
lnout = pdost+pkost
......
return lnout
...
Рейтинг: 0 / 0
Вложенные IIF
    #32542109
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, это runtime ошибка
Хочешь сказать, что на этапе отладки такой запрос выполняется без проблем? Может просто разные версии файлов при отладке и в Run-Time?

Вообще-то, твое условие можно упростить. Например, для rpt_it2bal.what='O' и cursor_peport_rules.what='I' порядок расчета одинаков. Значит, их можно объединить в один IIF()

IIF( rpt_it2bal.what='O' OR cursor_peport_rules.what='I', ..., ... )
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вложенные IIF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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