powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отчет + Cursoradapters
10 сообщений из 10, страница 1 из 1
Отчет + Cursoradapters
    #33214510
Юра Д.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем хай !

С появлением cursoradapter'ов я уже хотел было обрадоваться -- реальная возможность работать из FoxPro в полноценной клиент-серверной технологии. Тем более, что на моём предприятии Oracle лицензионный и опыт работы с ним у меня конкретный. Начал разрабатывать методику работы с этими адаптерами. Многим известны проблемы, которые здесь возникают: неуменее cursoradapter'а растасовывать параметры при использовании ADO, незакрывающиеся shared подключения при использовании ODBC и т.п. (Изобилие таких "подводных камней", кстати, одна из причин, по которой IMHO многие ненавидят FoxPro, и я немного тоже)
Так вот, создал я свой класс на основе cursoradapter, а в нём всё недостающее прописал. Работает отлично: добавляю через Dataenvironment Builder необходимые cursoradapter'ы и рисую форму. Но не тут-то было!! Когда я перешел от создания форм к отчетам то просто офигел. В редакторе DataEnvironment к отчётам недоступна опция "Builder". Сам билдер мне как-то не особо нужен, но без него нет возможности добавить в этот dataenvironment мой класс! Что делать? Создана куча форм, но вся работа стала из-за очередного ляпа в FoxPro. Очевидно, что dataenvironment для формы ничем не отличается от оного для отчета, следовательно и билдер у них должен быть общий.
Может кто знает, как добавить в DE объект с помощью команды в command window, если это вообще возможно? Или может существует способ искусственно запустить builder для DE ?

p.s. FoxPro 9. В восьмом не проверял
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33214686
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dear Юра Д. ,

I understand, that my answer probably will dissapoint you.

Думаю, что DE в VFP 9.0 для отчетов еще немного сыроват.

Лично я пользуюсь старым проверенным способом - принимаю все данные на клиента, формирую временную таблицу и уже на ее основе получаю отчет.

Честно говоря не вижу никакой необходимости применения Cursor Adapetr для получения отчетов, другое дело когда необходимо обновлять данные...

P.S. Это всего лишь мое частное мнение, не претендующее на истину...
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33214696
Юра Д.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch
Лично я пользуюсь старым проверенным способом - принимаю все данные на коиента, формирую временную таблицу и уже на ее основе получаю отчет.

Согласен, но теряется удобство. Все-таки dataenvironment многое упрощает и избавляет от ручной работы, особенно когда отчетов много. Я и сам, как сторонник SQL, до появления cursoradapter'ов многие отчеты делал через предварительный SQL-запрос в Init'e. Но при этом во всех полях отчета необходимо по памяти заполнять Expression и т.д. А ведь CA можно использовать как замену таким "предварительным запросам". Просто хочется задействовать подручные средства по максимуму, а тут как будто просто забыли разлочить пункт "Builder" в меню.
Sergey Ch
Честно говоря не вижу никакой необходимости применения Cursor Adapetr для получения отчетов, другое дело когда необходимо обновлять данные...

Да, в отчетах CA используют свои возможности на 1%. Если не найду решения, то буду по-старинке через sqlexec ваять.
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33214824
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в использую окружение формы, из которой вызываю отчет ....

По мне, так это на много удобней.
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33214958
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юра Д. а тут как будто просто забыли разлочить пункт "Builder" в меню..
Если мне не изменяет память, то в VFP 9.0 Вы можете создать свой класс отчетов на основе стандартного, а там уже изменить DE, это вроде бы как должно работать... Но я пока не пробовал - как это мы уже тут обсуждали - жду SP1, уж больно странно 9 версия работает и в промышленном использовании я пока воздержусь...
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33214993
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует класс DataEnvironment. В него можно накидать нужное количество Cursor Adapter.

Далее указываешь класс DataEnvironment как источник данных для Report. В режиме дизайнера отчетов пункт главного меню Report - Properties - закладка DataEnvironment - переключатель Link to a DataEnvironment class - конпка Select
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33216599
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Юра!

> незакрывающиеся shared подключения при использовании ODBC

Это интересно - такого никогда не наблюдал - может быть это просто
неаккуратность при обращении с хэндлами? Расшаренное соединение закроется
если закроются ВСЕ staement handles порождённые от него. Т.е.
SQLDISCONNECT(xxx) на самом деле не соединение закрывает, а только
statement...

> Может кто знает, как добавить в DE объект с помощью команды в command
> window, если это вообще возможно? Или может существует способ искусственно
> запустить builder для DE ?

Фиг его знает, не пользуюсь я билдерами, да и от DE проку не вижу никакого.
Думаю что это невозможно - иначе пункт не блокировали бы. Впрочем к отчёту
можно прицепить свой DE описанный как класс - т.е. ты СНАЧАЛА полностью
описываешь DE, помещаешь туда все свои CAD или просто Cursor объекты (это
можно сделать целым рядом способов), а потом через меню Report и последующий
диалог Report Builder-а указываешь, что отчёт должен использовать именно
заданный класс DE.
Впрочем после того как ты ознакомишься с тем кодом, который реализует такое
"прицепление", сможешь делать это и вручную.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33217633
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Юра!

Кстати, раз уж речь зашла о "интеграции" этого DE с остальной частью Report
(использование в диалоге составления выражений или Drag'n'Drop из DE на лист
отчёта) - то приведенное мной и Владимиром решение не подойдёт - такой DE
лишь на этапе исполнения появляется - на этапе дизайна он будет пуст.
P.S. Для "лентяев" (особенно актуально если полей много, переименовывать их
в запросе нереально, а имена у них "говорящие" типа qpzrkstn :) ) советуют
сделать такой трюк - выполнить запрос, сохранить его в таблицу - потом её
поместить в DE и строить отчёт - ну и как завершающий штрих - убрать курсор
из DE. Ессно что лучше в выражениях использовать имена полей БЕЗ алиаса,
хотя алиас можно задать любой для Cursor в DE...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33224132
Юра Д.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
> незакрывающиеся shared подключения при использовании ODBC
Это интересно - такого никогда не наблюдал - может быть это просто
неаккуратность при обращении с хэндлами? Расшаренное соединение закроется
Раньше я работал с ораклом через RemoteViews. При открытии RV создаётся курсор. У этого курсора свойство SourceType равно 2, а свойство ConnectHandle содержит собственно handle нашего подключения. Так вот, в хелпе по этому поводу сказано: "The connection handle obtained for a view might close when the view closes." И действительно, открываем RV - наблюдаем в оракловском мониторе появление подключения закрываем - подключение исчезает. Короче, работает как надо. И с shared подключениями тоже тип-топ. Я рассчитывал, что с CA будет аналогично, НО! CA при открытии (точнее при CursorFill) создаёт курсор, но с SourceType равным 102. Такой курсор при закрытии не делает SQLDISCONNECT, хотя должен. Как будто в "деструкторе" :) сласса Cursor стоит что-то вроде
IF This.SourceType==2 Then {SQLDISCONNECT(This.ConnectHandle);}
А нужно IF INLIST(This.SourceType,2,102,202)... Сорри за нефокс
Или я что-то не так понимаю?
Так как достучаться до "деструктора" курсора мы не можем, то решаем проблему немного неправильным но подходящим путём: добавляем в класс CA в AfterCursorClose код: SQLDISCONNECT(THIS.DataSource). Но при этом уже нельзя пользоваться CursorDetach и т.п.
Или я опять неправильно понимаю? :)

Igor Korolyov
Впрочем к отчёту можно прицепить свой DE описанный как класс - т.е. ты СНАЧАЛА полностью описываешь DE, помещаешь туда все свои CAD или просто Cursor объекты
Блин, а этот способ все советуют, хотя я его испробовал сразу, после того как заметил проблему, описанную в самом начале. Странно, но не работает :-\
Пишет какую-то непонятную ошибку типа "Dataenvironment couldn't be linked for some reason". У кого-нибудь реально это работает?
Igor Korolyov
Posted via ActualForum NNTP Server 1.2
А что это за зверь такой? Может он позволяет "форумить" в оффлайне? Актуально для меня.
...
Рейтинг: 0 / 0
Отчет + Cursoradapters
    #33224198
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Юра!

> Или я что-то не так понимаю?

Видимо так - ты же НЕ ожидаешь что CAD сам установит коннекцию - тогда
почему ты ожидаешь что он её закроет? Он и не должон IMHO - просто CAD
построитель прописывает кой какой код - но это НЕ есть нативное поведение
класса. В принципе я построителем сейчас не пользуюсь - он заточен на обход
всяких "особенностей" DE, а реально полезного делает мало - я и DE не
использую - IMHO это весьма нетехнологично. Впрочем ознакомится с
рассуждениями по данной теме лучше всего воспользовавшись поиском по
forum.foxclub.ru.

> Но при этом уже нельзя пользоваться CursorDetach и т.п.

А про это я не понял. Курсор вообще не имеет отнощения к соединению. Если
очень захотеть, то можно и у RV принудительно закрыть соединение, не
закрывая его самого. C CAD же как я понимаю можно не только закрыть
соединение, но и ПОТОМ снова его открыть, и заставить CAD внести изменения
из курсора обратно в базу.

> Пишет какую-то непонятную ошибку типа "Dataenvironment couldn't be linked
> for some reason".

Надо твой код смотреть, и его взаимодействие с кобом вставляемым при
"подключении"

>> Posted via ActualForum NNTP Server 1.2
> А что это за зверь такой? Может он позволяет "форумить" в оффлайне?
> Актуально для меня.

Да, это тутошний NNTP гейт - подробности настройки есть вроде в FAQ (не
фоксовом конечно :) ) или в разделе "о сайте" - я читаю через
OutlookExpress - именно в оффлайне :)

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отчет + Cursoradapters
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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