Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
04.12.2010, 04:52
|
|||
---|---|---|---|
|
|||
Чудеса с view |
|||
#18+
Доброе время суток, всем! Быть может сталкивался кто-то с похожей проблемой: есть таблица А и лок.представление на основе т.А+т.В; приложение на основе главного окна Лисы; окна немодальные; при поочередном открытии форм (для просмотра) т.А и лок.вьюхе АВ и смене фокуса - никаких глюков, но если пробежаться по гриду в т.А, затем сменить фокус на окно лв.АВ и пробежаться по гриду, затем закрыть окно т.А, - в л.в.АБ теряется источник данных, т.е., получается при закрытии формы т.А закрывается вьюха для второй формы... Пробывал сделать следующее: в методе формы activate л.в.АВ Select вьюха - через Used(вьюха), но при этом (по известным причинам) меняются заголовки в гриде, а также активность подсвеченной строки грида. Но глюк, собственно, в том что такое поведение не всегда постоянно: т.е., иногда меняю активность окон, пробегаю по записям и никаких проблем. Чаще он возникает, если перемещать поочередно окна в основном окне приложения. И еще момент, в load глючной формы поставил DataSessionID=2 (эксперимента ради), выкинул (понятное дело) ошибку, но в дальнейшем как ни баловался с формами - все исключительно стабильно. VFP 9+sp2. Может трабла с SET настройками... Поделитесь своими соображениями, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.12.2010, 09:04
|
|||
---|---|---|---|
|
|||
Чудеса с view |
|||
#18+
еще деталь: каждая форма имеет свою Data Environment. В стартовом prg внес Open DataBase, - ошибок пока не наблюдаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.12.2010, 21:13
|
|||
---|---|---|---|
Чудеса с view |
|||
#18+
Проблема в данном случае в том, что Вы работаете в Default DataSession (DataEnvironment.DataSession = 1) со стандартными настройками DataEnvironment.AutoOpenTables = .T. и DataEnvironment.AutoCloseTables = .T. Смысл настройки AutoOpenTables заключается в том, чтобы при открытии формы проверить, открыты ли все те таблицы и View, которые указана в DataEnvironment формы. И если чего-то не хватает, открыть их. При этом, форма запоминает, что именно она открыла при старте. Соответственно, настройка AutoCloseTables проверяет список того, что было открыто при старте и закрывает все таблицы и View из этого списка, возвращая среду окружения в исходное состояние. Все замечательно, пока работа происходит с одной формой. Но вот если из одной формы вызывается другая, работающая с теми же самыми таблицами, то происходит следующее 1. Открывается первая форма. Она открывает таблицу A 2. Открывается вторая форма. Она "видит", что таблица A уже открыта и ничего не открывает Если сейчас закрыть вторую форму, то таблица A останется открытой, поскольку вторая форма "помнит", что эту таблицу она не открывала, значит, и закрывать не надо. Однако если закрыть первую форму, то она закроет таблицу A, поскольку именно она эту таблицу и открывала. Как следствие, вторая форма теряет источник данных. Просто потому, что таблицу A закрыли. Ее закрыла первая форма. Какие есть варианты решения проблемы? Ну, их довольно много. Зависит от личных предпочтений. Самый простой, тот, который Вы собственно и использовали. Открывать формы каждую в своей DataSession. Т.е. установить свойство DataEnvironment.DataSession = 2. Только надо помнить, что при использовании Private DataSession часть глобальных настроек "сбрасываются" в значение по умолчанию. Точнее, не сбрасываются, а просто не устанавливаются для новой сессии данных. Поэтому эти настройки надо будет устанавливать при открытии формы. Полный перечень этих настроек можно посмотреть в справке по команде SET DATASESSION TO. Кстати, обратите внимание, что настройка SET EXCLUSIVE имеет разное значение по умолчанию для Default и Private DataSession. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2010, 08:20
|
|||
---|---|---|---|
|
|||
Чудеса с view |
|||
#18+
[quot ВладимирМ] .....Но вот если из одной формы вызывается другая, работающая с теми же самыми таблицами, то происходит следующее..... Владимир, спасибо за развернутый ответ, но немного речь не о том - я не вызываю форму одну из другой - такие случаи мне известны и понятны.Сейчас формы открываются независимо друг от друга. Вобщем, второй день пока не наблюдаю никаких глюков после того как в главном модуле указал Open database. Но тем неменее, весьма признателен за участие. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.12.2010, 18:56
|
|||
---|---|---|---|
Чудеса с view |
|||
#18+
Ну, очевидно, что открытие таблицы или View должно автоматически привести к открытию контейнера базы данных (DBC) в которые эти таблицы или View включены. Правда, закрытие таблиц не вызовет такого же автоматического закрытия контейнера базы данных. Единственное, что приходит в голову, это то, что открытая база данных перестает быть активной (SET DATABASE TO), если ее открытие произошло "на автомате", при переключении между формами. Но, опять же, теоретически, это не должно вызвать никаких проблем с уже открытыми таблицами. Интересно было бы посмотреть, что возвращает Код: plaintext
при возникновении ошибки. Ну, и на всякий случай, а открыта ли вообще база данных в этот момент Код: plaintext
Впрочем, явное открытие базы данных в стартовой программе должно исключить подобную проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&mobile=1&tid=1584743]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 149ms |
0 / 0 |