Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
14.07.2008, 14:21
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
подскажите пожалуйста тонкости поведения Create View: согласно нелпу сохраняет почти все. пробую так: назначил буферизацию по таблице append blank recno()=-1 create view my_file что-то поделал SET VIEW TO my_file а recno() = 1 а не -1 - буферизация отменилась. create view / SET VIEW TO - всегда отменяет буферизацию ? или както можно её сохранить? если всетаки нельзя использовать create view / SET VIEW TO вместе с буфферизацией, то как реализовать сохранение и восстановление среды (состояние таблиц)? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.07.2008, 14:38
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
для 8-й и 9-й версий используйте курсорадаптер ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.07.2008, 14:51
|
|||
---|---|---|---|
Create View |
|||
#18+
В HELP по Команда CREATE VIEW написано, что она сохраняет следующие настройки среды окружения VFP9 Create View Все файлы таблиц, индексов, альтернативные файлы и файлы формата, открытые на данный момент во всех рабочих областях Все поля, включенные в список SET FIELDS Все отношения, установленные между открытыми таблицами Все фильтры, действующие для открытых таблиц Установки DEFAULT и PATH Установка файла процедуры Текущий файл справки Текущий файл ресурсов Статус SET SKIP Статус строки состояния (ON или OFF) Вообще-то, идея сохранения среды окружения (CREATE VIEW / SET VIEW) заключалась в том, что в FP2.x было ограниченное количество одновременно открытых рабочих областей. Поэтому была настоятельная необходимость закрывать не использующиеся в данный момент рабочие области, чтобы высвобоить место. Но спустя некоторое время, надо было вернуться к "забытому" состоянию. В Visual FoxPro такой проблемы нет. Есть другая потребность - разделить "среды" работы разных форм. Для этой цели используется Private DataSession. Так что, строго говоря, нет необходимости сохранять/восстанавливать среду данных. Просто каждая форма работает как бы в своем "сеансе данных" практически не влияя на работу других форм. Впрочем, можно использовать класс DataEnvironment или Session для настройки нужной среды данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.07.2008, 14:59
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
вместо буфферизации курсорадаптер ? в моем случае многовато переделывать а так чтобы буфферизацию оставить и сохранение/восстановление работало? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.07.2008, 15:26
|
|||
---|---|---|---|
Create View |
|||
#18+
АлексейОвместо буфферизации курсорадаптер ? в моем случае многовато переделывать а так чтобы буфферизацию оставить и сохранение/восстановление работало? Ну, напиши класс-обертку над твоим Create View / SET View в котором через AUSED() получаешь список открытых таблиц и сканиря их через CursorGetProp() получаешь факт буферизации. Сохраняешь эту информацию в глобальном массиве (или в свойствах класса-обертки) и при восстановлении среды выполняешь обратные действия через CursorSetProp() Если приложение закрывается и нужен именно сброс в файл, то сделай либо ручное сохранение/восстановление содержимого масива в текстовый файл, либо в специальную служебную таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.07.2008, 15:36
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
пожалуй мне больше нравится класс обертка над: АлексейО create view my_file что-то поделал SET VIEW TO my_file который зделает это в privateSession. изучаю эту возможность ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.07.2008, 14:40
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
поллучилось совсем несложно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.09.2008, 16:31
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
все хорошо работало пока я не продолжил чуть чуть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
при выполнение set view to Run_object получаю диалоговое окно "Open Table" укажу или не укажу какуюто таблиц - выполнение продолжается и вообщемто результат достигается, но иключить этот диалог неудается с чем может быть связан вывод этого диалога? как бы заглянуть внуть команды и узнать какую вдруг таблицу её потребовалось? c xtv 'nj ... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.09.2008, 16:51
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
я еще раз советую использовать курсорадаптер вот пример абстрактного метода подъема Када для объекта с недефолтной датасессией Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
22.09.2008, 18:05
|
|||
---|---|---|---|
Create View |
|||
#18+
АлексейОпри выполнение set view to Run_object получаю диалоговое окно "Open Table" укажу или не укажу какуюто таблиц - выполнение продолжается и вообщемто результат достигается, но иключить этот диалог неудается с чем может быть связан вывод этого диалога? как бы заглянуть внуть команды и узнать какую вдруг таблицу её потребовалось? c xtv 'nj Для начала, можешь попробовать открыть файл Run_object.VUE любым низкоуровневым редактором. FAR, Norton Commander, Disco-Commander и т.п. Можно даже блокнотом или напрямую в Foxpro Код: plaintext
Имена таблиц там написаны прямо, без какого-либо шифрования. Иногда, открытие диалога Open Table сопровождается указанием имени того файла, который надо найти. Либо в заголовоке диалога, либо в окне имени выбранного файла. Можно еще попробовать сделать настройку Код: plaintext
И отлавливать сообщение об ошибке. Но, не уверен, что для SET VIEW эта настройка поддерживается. По крайней мере в HELP нет упоминания. А вообще-то, поскольку Вы занимаетесь "антиквариатом", то придется искать собственные способы, чтобы справляться с самыми разными глюками, которые снова и снова будут появляться. По большому счету, Вы зря тратите время. Просто нет никакого смысла в том, что Вы делаете. Можете хотя бы самому себе объяснить зачем? Какую задачу Вы хотите решить, при помощи сохранения среды окружения? Нельзя ли эту же самую задачу решить другими способами? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 08:32
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
ВладимирМ Можете хотя бы самому себе объяснить зачем? Какую задачу Вы хотите решить, при помощи сохранения среды окружения? Нельзя ли эту же самую задачу решить другими способами? сам себе я это объясняю так: то что я делаю, я называю "ядро корпоративной системы", которое решает основные задачи разработки и учета ПО, управления данными, пользователями и пр. я не единственный программист в отделе и другие занимаются более прикладными задачами (красивое слово - прикладной логикой) и их разработки исполняются из этого ядра. а они слабо представляют организацию ядра (да им это и не надо) и постоянно портят что-то. кроме того ядро содержит уже множество функций облегчающих прикладную разработку и этим функциям необходимо неиспорченное окружение ядра. грубо говоря: при запуске неродного програмного кода из ядра мне надо востановить сохранить и восстановить по возврату свое окружение. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 09:52
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
автор я называю "ядро корпоративной системы" если это ядро построено на вью, то это ядро уже очень устарело по неск.причинам: 1. вынуждены хранить в фоксовой БД 3. ряд неудобств при работе 2. отсутствует ряд возможностей предложите рефакторинг Вашего ядра и сделайте по-человечьи на курсорадаптерах ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 10:52
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
12345зайчик если это ядро построено на вью, то это ядро уже очень устарело по неск.причинам: 1. вынуждены хранить в фоксовой БД нет такой необходимости - вьюшки строятся из описаний таблиц и прикладных объектов 12345зайчик 3. ряд неудобств при работе а каких? 12345зайчик 2. отсутствует ряд возможностей перечислите пожалуйста 12345зайчик предложите рефакторинг Вашего ядра и сделайте по-человечьи на курсорадаптерах любая программа устаревает. о подобном "рефакторинге" я и сам думаю, и не только по этой причине - но ... как часто бывает: "и нести тяжело и бросить жалко". ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 10:59
|
|||
---|---|---|---|
Create View |
|||
#18+
АлексейОгрубо говоря: при запуске неродного програмного кода из ядра мне надо востановить сохранить и восстановить по возврату свое окружение. Почему не сделать это "ядро" напрямую? В лоб. Прямыми командами открытия и настройки нужных таблиц. Ну, так прямо и писать Код: plaintext 1. 2. 3. 4. 5.
По мере необходимости, модифицировать процедуру загрузки "ядра". В этом случае, процесс формирования и загрузки "ядра" будет управляемым, нагядным и очевидным. В используемом Вами варианте, Вам надо сначала вручную настроить ядро, потом только формировать файл VUE. И есть риск чего-то не заметить. Еще раз напомню о классе DataEnvironment. Можно просто "накидать" в него нужные таблицы, настроить связи и режим буферизации, а потом просто в нужной DataSession создавать экземпляр этого класса. Правда, "накидывать" придется через дополнительные классы Cursor или CursorAdapter. Если лень возится с классом DataEnvironment, можно сделать невидимую форму. В ее DataEnvironment настроить нужное окружение, а потом просто запускать эту форму. Если установить AutoClose = .F., то после закрытия этой формы настроенная среда окружения останется "как есть". Зачем Вы используете явно устаревший и слабо-контролируемый инструмент, когда есть более простые, наглядные и лучше управляемые способы? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 11:13
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
авторперечислите пожалуйста например из самых важных: преобразование типов данных - курсорсхема, автоматически обновляемые поля, отсутствие событийности остальное Вы можете найти в хелпе авторнет такой необходимости - вьюшки строятся из описаний таблиц и прикладных объектов Вы обрекли себ на тяжелый динамический взлет ООП разработка с использованием предсохраненных видоизменных КАДов позволяет делать это намного проще ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 12:50
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
12345зайчикавтоматически обновляемые поля, да... действительно... это важно. Вы "обильно удобрили мое зерно сомнений" :-) даже не знаю что и делать... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 13:11
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
авторда... действительно... это важно. если это из серии плоского юмора, то скажу, что да, это важно возложить на КАД функции по автоматическому обновлению ряда полей в курсоре после апдейта и не заниматься этим самостоятельно, дергая селектами сервер другое дело, что для Вас абсолютно непонятна событийность обновления записей КАДом ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 13:15
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
ВладимирМПочему не сделать это "ядро" напрямую? В лоб. потому, что возможны варианты вызовов ядровых функций из прикладных программ которые вызваны из других прикладных программ. т.е. мне надо не только сохранить ядровое окружение но и то окружение что настроили себе каждая из этих прикладных форм или программ. ВладимирМЗачем Вы используете явно устаревший и слабо-контролируемый инструмент, когда есть более простые, наглядные и лучше управляемые способы? видите ли, так сложилась трудовая биография, что, после продолжительного опыта FPD 2 долгое время только сопровождал старые задачи и осуществлял общее администрирование. и действительно отстал. вот теперь пытаюсь наверстать и порой не нахожу требуемые мне новые решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 13:15
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
автордаже не знаю что и делать делайте то, что Вам угодно. Вам просто сообщают каждый раз, после Ваших вопросов о способах, которыми Ваши- же проблемы решаются более оптимальными способами ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 13:19
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
12345зайчикесли это из серии плоского юмора, я вполне серьезно. Извините, если обидел Вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 14:03
|
|||
---|---|---|---|
Create View |
|||
#18+
АлексейО ВладимирМПочему не сделать это "ядро" напрямую? В лоб. потому, что возможны варианты вызовов ядровых функций из прикладных программ которые вызваны из других прикладных программ. т.е. мне надо не только сохранить ядровое окружение но и то окружение что настроили себе каждая из этих прикладных форм или программ. Возможно, я что-то не понимаю. Как правило, логика работы примерно такая - Настройка среды окружения - Выполнение действий в этом окружении - Восстановление среды окружения в состояние до настройки - Настройка среды окружения - Выполнение действий в этом окружении - Восстановление среды окружения в состояние до настройки По-умолчанию, это стандартная логика работы DataEnvironment формы. Т.е. форма (вызываемая по DO FORM) настраивает среду перед своим открытием и, по возможности, приводит ее в исходное состояние перед своим закрытием. Ничего специально вообще делать не надо. Если форма открывается в Private DataSession (это свойство формы), то одна форма вообще никак не влияет на среду окружения другой формы. Предположим, Вам надо настроить среду окружения не для формы, а для выполнения неких программных действий. На языке программирования "действия" - это процедуры и методы. Так какая разница, как именно я настрою среду окружения командой set view to или вызовом процедуры DO MySet.prg? Почему для Вас одна команда настолько сильно отличается от, тоже одной команды, но которая внутри себя выполняет несколько команд? Только потому, что последовательность команд "зашифрованная" в set view была создана разработчиками FoxPro, а процедуру надо писать самому? Чем принципиально SET VIEW отличается от DO MyProg.prg ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 14:24
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
ВладимирМ Как правило, логика работы примерно такая - Настройка среды окружения - Выполнение действий в этом окружении - Восстановление среды окружения в состояние до настройки - Настройка среды окружения - Выполнение действий в этом окружении - Восстановление среды окружения в состояние до настройки а если так: - Настройка среды окружения 0 - Выполнение действий в окружении 0, том числе { - Настройка среды окружения 1, как 0 + еще что-то - Выполнение действий в окружении 1, при этом возможно закрытие части среды - Восстановление среды окружения 1 - продолжение выпрлнения действий в окружение 1 } - Восстановление среды окружения 0 - продолжение работы ядра в окружении 0 ВладимирМЧем принципиально SET VIEW отличается от DO MyProg.prg ? create/SET VIEW сохранить и восстановит любой набор открытых баз/таблиц, а DO MyProg.prg только тот набор что я прописал ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.09.2008, 16:25
|
|||
---|---|---|---|
Create View |
|||
#18+
Один из принципов программирования вообще и ООП в частности - это принцип "черного ящика". Объект (процедура) "не знает" какие есть настройки во-вне этого объекта, но и внешние объекты "не знают" какие есть настройки внутри этого объекта. Другими словами, выполняя настройку среды окружения, ВСЕГДА желательно исходить из предположения, что не было выполнени НИКАКИХ настроек во вне. Как минимум, следует убедится в наличие или отсутствии этих настроек. Это значит, что в общем случае, процедура настройки среды окружения выглядит примерно так: Если не открыта таблица 1, то открываем ее. Если уже открыта, то пропускаем процедуру открытия Выполняем настройки таблицы 1 (фильтры, индексы, связи, буферизация) Таблица 2 Таблица 3 ... Ваш пример - это расчет на "честное слово". Это работает, если ты сам, один, разрабатываешь приложение. Точно знаешь, что вот эта настройка будет обязательно, а вот это надо настроить. Или же есть "некто", кто следит за разработкой различных модулей приложения и увязывает их в единое целое. Менеджер проекта. С другой стороны, а кто мешает писать процедуры настройки среды окружения, исходя из предположения, что часть уже настроена раньше? Кстати, с формами (DO FORM) работать пробовал? Не смотрел, что происходит со средой окружения, если в DataEnvironment включены таблицы? АлексейОcreate/SET VIEW сохранить и восстановит любой набор открытых баз/таблиц, а DO MyProg.prg только тот набор что я прописал А откуда появился этот самый набор открытых баз/таблиц? Разве не ты сам его открыл? Ну, или разработчик соответствующего модуля? Разница только в способе, но не в сути. Вообще, прежде чем спрашивать, попробуйте "примерить" ситуацию, ну, хотя бы на процедурое программирование (оно проще в понимании). Разве нельзя сделать все то, что Вы описываете процедурами? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.09.2008, 10:22
|
|||
---|---|---|---|
|
|||
Create View |
|||
#18+
ВладимирМООП - это принцип "черного ящика". Объект (процедура) "не знает" какие есть настройки во-вне этого объекта, но и внешние объекты "не знают" какие есть настройки внутри этого объекта. вот - вот. прикладной программист не знает окружения ядра, а я не знаю что он там наделает с окружением. Другими словами на каждом этапе вложенных вызовов я должен обеспечить НЕ МЕНЬШУЮ (ядровая + еще то что потребовалось прикладнику) среду. ВладимирМВаш пример - это расчет на "честное слово". Это работает, если ты сам, один, разрабатываешь приложение. Точно знаешь, что вот эта настройка будет обязательно, а вот это надо настроить. если бы так, дак и вопроса бы небыло - сам уж и открыл и закрыл, то что надо. ВладимирМ Кстати, с формами (DO FORM) работать пробовал? Не смотрел, что происходит со средой окружения, если в DataEnvironment включены таблицы? да работал. и DataEnvironment НАРАШИВАЕТ среду если не установлено privateDataSession, и ЗАМЕЩАЕТ если установлено. и вот представим что прикладная форма открывает необходимые таблицы не в DataEnvironment а командой use и может тем самым закрыть ранее отрытое и ядро не знает что там открывается ВладимирМ Вообще, прежде чем спрашивать... поверьте, прежде чем спросить я все это сделал. ВладимирМ Разве нельзя сделать все то, что Вы описываете процедурами? конечно можно, но вроде есть спец командочка близкая к целевой - так хотелось ей воспользоватся. пожалуй мы действительно в чем то не поняли друг друга. но в любом случае огромное СПАСИБО вам ВладимирМ и 12345вышелзайчикпогулять . мой вывод: напишу процедурку/объектик который выполнит сохранение текуще среда и восстановление (вместо create/set view) использование курсор адаптера пока отложу, но не надолго, до появление отдельной задачки где можно будет его опробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&tablet=1&tid=1587252]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
96ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 214ms |
0 / 0 |