Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Create View / 24 сообщений из 24, страница 1 из 1
14.07.2008, 14:21
    #35428737
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
подскажите пожалуйста тонкости поведения 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 вместе с буфферизацией, то как реализовать сохранение и восстановление среды (состояние таблиц)?
...
Рейтинг: 0 / 0
14.07.2008, 14:38
    #35428798
Create View
для 8-й и 9-й версий
используйте курсорадаптер
...
Рейтинг: 0 / 0
14.07.2008, 14:51
    #35428838
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
В 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 для настройки нужной среды данных.
...
Рейтинг: 0 / 0
14.07.2008, 14:59
    #35428866
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
вместо буфферизации курсорадаптер ?
в моем случае многовато переделывать
а так чтобы буфферизацию оставить и сохранение/восстановление работало?
...
Рейтинг: 0 / 0
14.07.2008, 15:26
    #35428964
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
АлексейОвместо буфферизации курсорадаптер ?
в моем случае многовато переделывать
а так чтобы буфферизацию оставить и сохранение/восстановление работало?
Ну, напиши класс-обертку над твоим Create View / SET View в котором через AUSED() получаешь список открытых таблиц и сканиря их через CursorGetProp() получаешь факт буферизации. Сохраняешь эту информацию в глобальном массиве (или в свойствах класса-обертки) и при восстановлении среды выполняешь обратные действия через CursorSetProp()

Если приложение закрывается и нужен именно сброс в файл, то сделай либо ручное сохранение/восстановление содержимого масива в текстовый файл, либо в специальную служебную таблицу.
...
Рейтинг: 0 / 0
14.07.2008, 15:36
    #35429001
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
пожалуй мне больше нравится класс обертка над:
АлексейО
create view my_file
что-то поделал
SET VIEW TO my_file

который зделает это в privateSession.
изучаю эту возможность
...
Рейтинг: 0 / 0
17.07.2008, 14:40
    #35436886
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
поллучилось совсем несложно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
LOCAL Run_object
Run_object = CREATEOBJECT("Run_object")
Run_object.do()
RETURN

DEFINE CLASS Run_object AS session
	DataSession =  2 

	PROCEDURE do
*                        что то тут поделал
	ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
22.09.2008, 16:31
    #35552532
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
все хорошо работало пока я не продолжил чуть чуть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	
LOCAL Run_object
create view Run_object
Run_object = CREATEOBJECT("Run_object")
Run_object.do(objects_kod, s_with)
erase Run_object.VUE
RETURN

DEFINE CLASS Run_object AS session
	DataSession =  2 

	PROCEDURE do
	set view to Run_object
* что-то тут поделал
	ENDPROC
ENDDEFINE
кроме создания приватной сессии пытаюсь восстановить в ней такоеже окружение как и в родетельской

при выполнение set view to Run_object
получаю диалоговое окно "Open Table"
укажу или не укажу какуюто таблиц - выполнение продолжается и вообщемто результат достигается, но иключить этот диалог неудается

с чем может быть связан вывод этого диалога?

как бы заглянуть внуть команды и узнать какую вдруг таблицу её потребовалось?
c xtv 'nj
...
Рейтинг: 0 / 0
22.09.2008, 16:51
    #35552601
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
я еще раз советую использовать курсорадаптер

вот пример абстрактного метода подъема Када для объекта с недефолтной датасессией

Код: 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.
lparameters toParentContainer, 		;   && объект, для которого создаем курсорадаптер
			;
			;	&& свойства, необходимые для подъема курсорадаптера
			tcSql_updateTableName, 	;  	&& таблица на сервере	
			tcCADkeyFieldList, 		;	&& ключь-линк в таблице
			tcCADupdatableFieldList,;	&& обновляемые поля в таблице  (список через запятую)
			tcCADcursorSchema, 		;	&& схема - преобразов-е типов  (список через зяпятую)
			tcWhere, 				;	&& условие в запросе (выражение после WHERE)
			tcSelectedFieldsList,   ;	&& поля в строке запроса (необяз-й параметр)
			tcGroupBy,				;	&& строка - список через запятую
			tcOrderBy,				;	&& строка - список через запятую
			tcSelectCmdADD,			;	&& добавчик к SelectCmd
			tcSelectCmd,			;   && если уж совсем нестандартный запрос
			tcAliasName,			;	&& имя алиаза
			tlLockCursorFill,		;	&& =.t. - не произойдет загрузка данных в курсор
			tcTimeStampFieldsList       && список полей TimeStamp

if vartype(toParentContainer)="O" and pemstatus( toParentContainer, "dataSessionId",  5 )
	set datasession to toParentContainer.dataSessionId
endif

return  CreateObject(   "cad",    				;
						tcSql_updateTableName, 	;
						tcCADkeyFieldList, 		;
						tcCADupdatableFieldList,;
						tcCADcursorSchema, 		;
						tcWhere, 				;
						tcSelectedFieldsList,   ;
						tcGroupBy,				;
						tcOrderBy,				;
						tcSelectCmdADD,			;
						tcSelectCmd,			;
						tcAliasName,			;
						tlLockCursorFill,		;
						tcTimeStampFieldsList	    )	
...
Рейтинг: 0 / 0
22.09.2008, 18:05
    #35552837
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
АлексейОпри выполнение set view to Run_object
получаю диалоговое окно "Open Table"
укажу или не укажу какуюто таблиц - выполнение продолжается и вообщемто результат достигается, но иключить этот диалог неудается

с чем может быть связан вывод этого диалога?

как бы заглянуть внуть команды и узнать какую вдруг таблицу её потребовалось?
c xtv 'nj
Для начала, можешь попробовать открыть файл Run_object.VUE любым низкоуровневым редактором. FAR, Norton Commander, Disco-Commander и т.п. Можно даже блокнотом или напрямую в Foxpro

Код: plaintext
MODIFY FILE Run_object.VUE

Имена таблиц там написаны прямо, без какого-либо шифрования.

Иногда, открытие диалога Open Table сопровождается указанием имени того файла, который надо найти. Либо в заголовоке диалога, либо в окне имени выбранного файла.

Можно еще попробовать сделать настройку

Код: plaintext
SET TABLEPROMPT OFF

И отлавливать сообщение об ошибке. Но, не уверен, что для SET VIEW эта настройка поддерживается. По крайней мере в HELP нет упоминания.

А вообще-то, поскольку Вы занимаетесь "антиквариатом", то придется искать собственные способы, чтобы справляться с самыми разными глюками, которые снова и снова будут появляться. По большому счету, Вы зря тратите время. Просто нет никакого смысла в том, что Вы делаете.

Можете хотя бы самому себе объяснить зачем? Какую задачу Вы хотите решить, при помощи сохранения среды окружения? Нельзя ли эту же самую задачу решить другими способами?
...
Рейтинг: 0 / 0
23.09.2008, 08:32
    #35553379
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
ВладимирМ
Можете хотя бы самому себе объяснить зачем? Какую задачу Вы хотите решить, при помощи сохранения среды окружения? Нельзя ли эту же самую задачу решить другими способами?

сам себе я это объясняю так:
то что я делаю, я называю "ядро корпоративной системы", которое решает основные задачи разработки и учета ПО, управления данными, пользователями и пр.
я не единственный программист в отделе и другие занимаются более прикладными задачами (красивое слово - прикладной логикой) и их разработки исполняются из этого ядра. а они слабо представляют организацию ядра (да им это и не надо) и постоянно портят что-то.
кроме того ядро содержит уже множество функций облегчающих прикладную разработку и этим функциям необходимо неиспорченное окружение ядра.

грубо говоря: при запуске неродного програмного кода из ядра мне надо востановить сохранить и восстановить по возврату свое окружение.
...
Рейтинг: 0 / 0
23.09.2008, 09:52
    #35553497
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
автор я называю "ядро корпоративной системы"

если это ядро построено на вью, то это ядро уже очень устарело
по неск.причинам:
1. вынуждены хранить в фоксовой БД
3. ряд неудобств при работе
2. отсутствует ряд возможностей

предложите рефакторинг Вашего ядра и сделайте по-человечьи на курсорадаптерах
...
Рейтинг: 0 / 0
23.09.2008, 10:52
    #35553687
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
12345зайчик
если это ядро построено на вью, то это ядро уже очень устарело
по неск.причинам:
1. вынуждены хранить в фоксовой БД
нет такой необходимости - вьюшки строятся из описаний таблиц и прикладных объектов
12345зайчик
3. ряд неудобств при работе
а каких?
12345зайчик
2. отсутствует ряд возможностей
перечислите пожалуйста
12345зайчик
предложите рефакторинг Вашего ядра и сделайте по-человечьи на курсорадаптерах
любая программа устаревает. о подобном "рефакторинге" я и сам думаю, и не только по этой причине - но ... как часто бывает: "и нести тяжело и бросить жалко".
...
Рейтинг: 0 / 0
23.09.2008, 10:59
    #35553708
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
АлексейОгрубо говоря: при запуске неродного програмного кода из ядра мне надо востановить сохранить и восстановить по возврату свое окружение.
Почему не сделать это "ядро" напрямую? В лоб. Прямыми командами открытия и настройки нужных таблиц. Ну, так прямо и писать

Код: plaintext
1.
2.
3.
4.
5.
CLOSE ALL
USE Table1 IN  0 
=CursorSetProp("buffering", 3 ,"Table1")
USE Table2 IN  0 
...

По мере необходимости, модифицировать процедуру загрузки "ядра". В этом случае, процесс формирования и загрузки "ядра" будет управляемым, нагядным и очевидным.

В используемом Вами варианте, Вам надо сначала вручную настроить ядро, потом только формировать файл VUE. И есть риск чего-то не заметить.


Еще раз напомню о классе DataEnvironment. Можно просто "накидать" в него нужные таблицы, настроить связи и режим буферизации, а потом просто в нужной DataSession создавать экземпляр этого класса. Правда, "накидывать" придется через дополнительные классы Cursor или CursorAdapter.

Если лень возится с классом DataEnvironment, можно сделать невидимую форму. В ее DataEnvironment настроить нужное окружение, а потом просто запускать эту форму. Если установить AutoClose = .F., то после закрытия этой формы настроенная среда окружения останется "как есть".

Зачем Вы используете явно устаревший и слабо-контролируемый инструмент, когда есть более простые, наглядные и лучше управляемые способы?
...
Рейтинг: 0 / 0
23.09.2008, 11:13
    #35553770
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
авторперечислите пожалуйста

например из самых важных:
преобразование типов данных - курсорсхема,
автоматически обновляемые поля,
отсутствие событийности

остальное Вы можете найти в хелпе

авторнет такой необходимости - вьюшки строятся из описаний таблиц и прикладных объектов
Вы обрекли себ на тяжелый динамический взлет

ООП разработка с использованием предсохраненных видоизменных КАДов
позволяет делать это намного проще
...
Рейтинг: 0 / 0
23.09.2008, 12:50
    #35554057
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
12345зайчикавтоматически обновляемые поля,

да... действительно... это важно.
Вы "обильно удобрили мое зерно сомнений" :-)
даже не знаю что и делать...
...
Рейтинг: 0 / 0
23.09.2008, 13:11
    #35554122
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
авторда... действительно... это важно.

если это из серии плоского юмора,
то скажу, что да, это
важно возложить на КАД функции по автоматическому
обновлению ряда полей в курсоре после апдейта
и не заниматься этим самостоятельно, дергая селектами сервер

другое дело, что для Вас абсолютно непонятна событийность
обновления записей КАДом
...
Рейтинг: 0 / 0
23.09.2008, 13:15
    #35554134
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
ВладимирМПочему не сделать это "ядро" напрямую? В лоб.
потому, что возможны варианты вызовов ядровых функций из прикладных программ которые вызваны из других прикладных программ. т.е. мне надо не только сохранить ядровое окружение но и то окружение что настроили себе каждая из этих прикладных форм или программ.

ВладимирМЗачем Вы используете явно устаревший и слабо-контролируемый инструмент, когда есть более простые, наглядные и лучше управляемые способы?
видите ли, так сложилась трудовая биография, что, после продолжительного опыта FPD 2 долгое время только сопровождал старые задачи и осуществлял общее администрирование. и действительно отстал. вот теперь пытаюсь наверстать и порой не нахожу требуемые мне новые решения.
...
Рейтинг: 0 / 0
23.09.2008, 13:15
    #35554135
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
автордаже не знаю что и делать

делайте то, что Вам угодно.
Вам просто сообщают каждый раз, после Ваших вопросов
о способах, которыми Ваши- же проблемы решаются
более оптимальными способами
...
Рейтинг: 0 / 0
23.09.2008, 13:19
    #35554148
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
12345зайчикесли это из серии плоского юмора,

я вполне серьезно. Извините, если обидел Вас.
...
Рейтинг: 0 / 0
23.09.2008, 14:03
    #35554324
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
АлексейО ВладимирМПочему не сделать это "ядро" напрямую? В лоб.
потому, что возможны варианты вызовов ядровых функций из прикладных программ которые вызваны из других прикладных программ. т.е. мне надо не только сохранить ядровое окружение но и то окружение что настроили себе каждая из этих прикладных форм или программ.

Возможно, я что-то не понимаю.

Как правило, логика работы примерно такая

- Настройка среды окружения
- Выполнение действий в этом окружении
- Восстановление среды окружения в состояние до настройки

- Настройка среды окружения
- Выполнение действий в этом окружении
- Восстановление среды окружения в состояние до настройки

По-умолчанию, это стандартная логика работы DataEnvironment формы. Т.е. форма (вызываемая по DO FORM) настраивает среду перед своим открытием и, по возможности, приводит ее в исходное состояние перед своим закрытием. Ничего специально вообще делать не надо.

Если форма открывается в Private DataSession (это свойство формы), то одна форма вообще никак не влияет на среду окружения другой формы.

Предположим, Вам надо настроить среду окружения не для формы, а для выполнения неких программных действий. На языке программирования "действия" - это процедуры и методы. Так какая разница, как именно я настрою среду окружения командой set view to или вызовом процедуры DO MySet.prg?

Почему для Вас одна команда настолько сильно отличается от, тоже одной команды, но которая внутри себя выполняет несколько команд? Только потому, что последовательность команд "зашифрованная" в set view была создана разработчиками FoxPro, а процедуру надо писать самому?

Чем принципиально SET VIEW отличается от DO MyProg.prg ?
...
Рейтинг: 0 / 0
23.09.2008, 14:24
    #35554414
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
ВладимирМ
Как правило, логика работы примерно такая

- Настройка среды окружения
- Выполнение действий в этом окружении
- Восстановление среды окружения в состояние до настройки

- Настройка среды окружения
- Выполнение действий в этом окружении
- Восстановление среды окружения в состояние до настройки

а если так:
- Настройка среды окружения 0
- Выполнение действий в окружении 0, том числе
{
- Настройка среды окружения 1, как 0 + еще что-то
- Выполнение действий в окружении 1, при этом возможно закрытие части среды
- Восстановление среды окружения 1
- продолжение выпрлнения действий в окружение 1
}
- Восстановление среды окружения 0
- продолжение работы ядра в окружении 0
ВладимирМЧем принципиально SET VIEW отличается от DO MyProg.prg ?
create/SET VIEW сохранить и восстановит любой набор открытых баз/таблиц, а DO MyProg.prg только тот набор что я прописал
...
Рейтинг: 0 / 0
23.09.2008, 16:25
    #35554852
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
Один из принципов программирования вообще и ООП в частности - это принцип "черного ящика". Объект (процедура) "не знает" какие есть настройки во-вне этого объекта, но и внешние объекты "не знают" какие есть настройки внутри этого объекта.

Другими словами, выполняя настройку среды окружения, ВСЕГДА желательно исходить из предположения, что не было выполнени НИКАКИХ настроек во вне. Как минимум, следует убедится в наличие или отсутствии этих настроек. Это значит, что в общем случае, процедура настройки среды окружения выглядит примерно так:

Если не открыта таблица 1, то открываем ее. Если уже открыта, то пропускаем процедуру открытия
Выполняем настройки таблицы 1 (фильтры, индексы, связи, буферизация)

Таблица 2

Таблица 3

...

Ваш пример - это расчет на "честное слово". Это работает, если ты сам, один, разрабатываешь приложение. Точно знаешь, что вот эта настройка будет обязательно, а вот это надо настроить. Или же есть "некто", кто следит за разработкой различных модулей приложения и увязывает их в единое целое. Менеджер проекта.

С другой стороны, а кто мешает писать процедуры настройки среды окружения, исходя из предположения, что часть уже настроена раньше?

Кстати, с формами (DO FORM) работать пробовал? Не смотрел, что происходит со средой окружения, если в DataEnvironment включены таблицы?

АлексейОcreate/SET VIEW сохранить и восстановит любой набор открытых баз/таблиц, а DO MyProg.prg только тот набор что я прописал
А откуда появился этот самый набор открытых баз/таблиц? Разве не ты сам его открыл? Ну, или разработчик соответствующего модуля?

Разница только в способе, но не в сути.


Вообще, прежде чем спрашивать, попробуйте "примерить" ситуацию, ну, хотя бы на процедурое программирование (оно проще в понимании). Разве нельзя сделать все то, что Вы описываете процедурами?
...
Рейтинг: 0 / 0
24.09.2008, 10:22
    #35555990
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Create View
ВладимирМООП - это принцип "черного ящика". Объект (процедура) "не знает" какие есть настройки во-вне этого объекта, но и внешние объекты "не знают" какие есть настройки внутри этого объекта.
вот - вот. прикладной программист не знает окружения ядра, а я не знаю что он там наделает с окружением.
Другими словами на каждом этапе вложенных вызовов я должен обеспечить НЕ МЕНЬШУЮ (ядровая + еще то что потребовалось прикладнику) среду.
ВладимирМВаш пример - это расчет на "честное слово". Это работает, если ты сам, один, разрабатываешь приложение. Точно знаешь, что вот эта настройка будет обязательно, а вот это надо настроить.
если бы так, дак и вопроса бы небыло - сам уж и открыл и закрыл, то что надо.
ВладимирМ
Кстати, с формами (DO FORM) работать пробовал? Не смотрел, что происходит со средой окружения, если в DataEnvironment включены таблицы?
да работал. и DataEnvironment НАРАШИВАЕТ среду если не установлено privateDataSession, и ЗАМЕЩАЕТ если установлено.
и вот представим что прикладная форма открывает необходимые таблицы не в DataEnvironment а командой use и может тем самым закрыть ранее отрытое и ядро не знает что там открывается
ВладимирМ
Вообще, прежде чем спрашивать...
поверьте, прежде чем спросить я все это сделал.
ВладимирМ
Разве нельзя сделать все то, что Вы описываете процедурами?
конечно можно, но вроде есть спец командочка близкая к целевой - так хотелось ей воспользоватся.
пожалуй мы действительно в чем то не поняли друг друга.
но в любом случае огромное СПАСИБО вам ВладимирМ и 12345вышелзайчикпогулять .

мой вывод:
напишу процедурку/объектик который выполнит сохранение текуще среда и восстановление (вместо create/set view)
использование курсор адаптера пока отложу, но не надолго, до появление отдельной задачки где можно будет его опробовать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Create View / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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