Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / LocalView's помогите (to Igor Korolyov or anybody) / 9 сообщений из 9, страница 1 из 1
29.12.2004, 11:33
    #32849208
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Igor Korolyov (из темы: <почему 'LocalView_а' - а не 'LocalView'>)
Hi help123!
К слову - использовать такие "многоуровневые" представления нужно с ОЧЕНЬ
большой осторожностью, и лишь ПОЛНОСТЬЮ понимая ограничения и особенности
такого использования. Иначе будет больше проблем, чем пользы.

Приветствую Вас.
А еще хотелось бы знать из практики - какие есть особенности использования вот таких вот вложеных представлений до трех уровней . Просто уже подошел к написанию отчета в проэкте, а он достаточно сложный, и как не мудрил, а вот без таких вот вложенных представлений не обойтись (по крайней мере пока).
И вот еще столкнулся с проблемами:
- 1) при Requery одного из представлений вылетает ошибка: View definition has been changed , у меня там есть поле где используется переменная ?v_reck6: SUM(IIF(Mparent.receiverk=?v_reck6,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec6tn
- 2) задолбали эти переменные в полях в LV (у меня их там 6 штук). Ну везде в DE формы стоит NoDataOnLoad = .T., а запросы на переменные все равно вылетают перед запуском формы.
Вот от этого и становится грусно

PS:создал новую тему, сори, не пинайте сильно.......
...
Рейтинг: 0 / 0
29.12.2004, 13:35
    #32849589
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
...
...
Рейтинг: 0 / 0
29.12.2004, 16:52
    #32850248
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Продолжаю сам с собой.........
мой LocalView:
- mparent.sellerk
- SUM(IIF(Mparent.receiverk=?v_reck1,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec1tn
- SUM(IIF(Mparent.receiverk=?v_reck2,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec2tn
- SUM(IIF(Mparent.receiverk=?v_reck3,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec3tn
- SUM(IIF(Mparent.receiverk=?v_reck4,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec4tn
- SUM(IIF(Mparent.receiverk=?v_reck5,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec5tn
- SUM(IIF(Mparent.receiverk=?v_reck6,IIF(Mparent.dakt={},Mchild.netto4k,Mchild.clear),0)) AS rec6tn
filter: mparent.dsend >= date()-day(date())+1
mparent.dsend <= gomonth(date(),1)-day(gomonth(date(),1))
group by: mparent.sellerk
при этом поле Mparent.receiverk (код ролучателя) у меня в таблице - Character длиной 10 символов. а переменные v_reck1,2,3,4,5,6 могут быть разной длины.
Может это влияет на ошибку.
Люди.... откликнитесь....
...
Рейтинг: 0 / 0
29.12.2004, 17:06
    #32850288
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Может поможет вот такая информация: убрал все переменные и временно написал вместо их один сужествующий код получателя - '9991'.
РАБОТАЕТ.... тоесть может дело в переменных...
(в списке параметров LV эти параметры-переменные были обьявлены)
...
Рейтинг: 0 / 0
29.12.2004, 22:00
    #32850629
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Да не надрывайся ты так, Игорь выходит в Internet в основном по вечерам, а на данный сайт заглядывает раз в 2...3 дня, так что если хочешь его дождаться, то не суетись, и запаcись терпением. У него еще и работа есть ;)

=========
Твоя проблема заключается в том, что размерность поля в команде Select-SQL в FoxPro определяется по первой записи. Например, возьмем выражение:

IIF(...,MyTab.MyField,0)

Если по условию в первой записи получится значение 0, то данное поле получит рамерность N(1). Вне зависимости от того, какие значения будут в других записях.

Ну, и соответсвенно, если в первой записи получится значение MyTab.MyField, то в результирующей выборке будет размерность поля MyField.

Как следствие, после перезапроса может поменяться размерность поля. Отсюда и сообщение об ошибке.

Уровнять размерность полей можно 2 способами

1) Указываешь в нулевом значении столько нулей, какова нужная размерность

IIF(...,MyTab.MyField,000000000)

2) Делаешь вычисляемое выражение

IIF(..., MyTab.MyField, MyTab.MyField-MyTab.MyField)

Разница даст 0, но размерность будет взята из размерности полей, участвующих в выражении

===========
У тебя переменные прописаны в свойствах Local View?

Если делал View через дезайнер, то в режиме модификации View пункт меню Query->View Parameters. Там надо просто указать имя и тип параметра.

Если делал View "ручками", то это свойство
DBSetProp("MyView","VIEW","ParameterList","v_reck1,'C' ")

===========
Теперь, какие проблемы с LocalView созданными на базе других LocalView.

По сути, Local View - это оычный Select-SQL результат которого записывается в курсор. Т.е. если отвлечся от Local View, то по сути ты делаешь примерно следующее:

Код: plaintext
1.
2.
SELECT ... FROM MyTab INTO CURSOR View1 NOFILTER WHERE ...
SELECT ... FROM View1 INTO CURSOR View2 NOFILTER WHERE ...
SELECT ... FROM View2 INTO CURSOR View3 NOFILTER WHERE ...

Таким образом, чтобы получить View3 необходимо предварительно получить View2, а чтобы получить View2 надо предварительно получить View1.

Иерархия вызовов. Причем принципиально важен порядок вызовов.

Я как-то не проверял, как в этом случае будет работать Requery("View3"), но подозреваю, что автоматического обновления View1 и View2 может и не произойти. Тогда принципиально важным будет вызывать Requery() в определенной последовательности.

Собственно, наверно, именно это и происходит. Ты делаешь, вероятно, сначала Requery('View3'), но для его переоткрытия необходимо сделать Requery('View2'), а переменные для View2 еще не определены. Вот и идет перезапрос этих переменных. Но здесь я не уверен. Просто не проверял.

Ну, и есть шанс "зациклится" с вызовами, хотя на этот предмет тоже не проверял.
...
Рейтинг: 0 / 0
31.12.2004, 10:23
    #32852372
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Спасибо большое за советы.....
Вроди все делаю правильно но параметр перед запуском формы все равно
запрашивает....
Если будет у кого-то время, то посмотрите пример, который я выложил ..
(там форма problems, в DE этой формы находится LV у которого установлено NoDataOnLoad=.T. - но параметр v_rec1 (charecter) все равно запрашивается перед запуском формы)
...
Рейтинг: 0 / 0
31.12.2004, 13:00
    #32852511
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Похоже проблема в самом View. Использование настройки NoDataOnLoad=.T. эквивалентно команде

USE MyView NODATA

Так вот, с вычисляемым выражением это не помогает. Срабатывает только в том случае, если параметр использован на закладке Filter, что вобщем-то логично. Поскольку открыть-то сам View необходимо, чтобы вычислить размерность полей. А для этого необходимо знать параметр!

У тебя единственный выход: исключить View из DataEnvironment и открывать его вручную. Либо в методе LOAD-формы, либо в методе INIT-формы.

Код: plaintext
1.
2.
3.
4.
IF USED("MyView")
	LOCAL v_reck1
	v_reck1 = 'aaa'
	USE MyView IN  0 
ENDIF
...
Рейтинг: 0 / 0
31.12.2004, 19:14
    #32852666
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Hi ВладимирМ!

Спасибо за поддержку :)

> У него еще и работа есть ;)

У него ещё и новый год на носу. Ик!

[Sorry, skipped]

Блин, тока отправил в старой ветке, а оказывается ты всё по полочкам уже и
разложил :) Ну да ничего: много - не мало :)

> Если делал View "ручками", то это свойство
> DBSetProp("MyView","VIEW","ParameterList","v_reck1,'C' ")

Кстати никогда не пользовался этим "свойством" - ибо никогда не позволяю
фоксу самому свой диалог ввода параметров показывать - тока через заранее
созданные переменные... Ну это ещё отчасти и потому что повсеместно
использую конструкцию с макро-пармером - а её ввести САМ фокс в этом
"автоматическом" диалоге отчего-то не можёт.

[Sorry, skipped]

> Иерархия вызовов. Причем принципиально важен порядок вызовов.

Абсолютно точно!

> Я как-то не проверял, как в этом случае будет работать Requery("View3"),
> но подозреваю, что автоматического обновления View1 и View2 может и не
> произойти.

Именно так плохо всё и будет :(

> Тогда принципиально важным будет вызывать Requery() в определенной
> последовательности.

Вот вот. А плюс к тому и моё замечание по тому как фокс изначально
открывает
курсоры размещённые в DE.

Если же ещё и вспомнить о том как непросто ОБНОВЛЯТЬ такие конструкции - ибо
TableUpdate лишь пропихнёт данные из буфера View3 в буфер View2 - а оттуда
ещё ой как далеко до базовой таблицы %( Потому и не стоит себе жизнь
усложнять...

C наступающим!!!

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
04.01.2005, 11:23
    #32853518
help123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LocalView's помогите (to Igor Korolyov or anybody)
Спасибо всем за неоценимую информацию.
Действительно проще всего будет сделать все это запросами вручную.
ВСЕХ С НОВЫМ ГОДОМ
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / LocalView's помогите (to Igor Korolyov or anybody) / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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