powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объясните поведение зыкрытых view
6 сообщений из 6, страница 1 из 1
Объясните поведение зыкрытых view
    #33635902
332_john
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит порядок такой :
В классе приложения отрывается база

OPEN DATABASE (This.cDataBase) SHARED

никакие таблицы не используются и их view тоже

Далее запускается любая форма с private DE в loade которой делаем USE view таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...
 llIsUsedTabLists = USED(lcAlias)
 IF m.llIsUsedTabLists = .F.
   USE &lcAlias IN  0  SHARED
 ENDIF
 
SELECT (m.lcAlias)
...

Потом в каком-нибудь init объекта происходит вызов метода класса сохранения восстановления настроек объекта, в котором делается USE другого view
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
.........
  llIsUsedTabLists = USED("cfgview")
  IF m.llIsUsedTabLists = .F.
    USE cfgview IN  0  SHARED
  ENDIF
  ..........
........

  IF m.llIsUsedTabLists = .F.
    USE IN cfgview
  ENDIF

Далее закрываем форму в событии destroy
Код: plaintext
1.
2.
3.
4.
5.
6.
....
  llIsUsedTabLists = USED(ThisForm.Alias)
  IF m.llIsUsedTabLists = .T.
     USE IN (ThisForm.Alias)
 ENDIF
....

Теперь при вызове этой процедуры упаковки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
LOCAL laTables[ 1 ], ;
      i, j

CLOSE DATABASES ALL
OPEN DATABASE "DATA\register.dbc" EXCLUSIVE

CLOSE TABLES ALL

m.i =  1 
m.j = ADBOBJECTS(laTables, "Table")
DO WHILE m.i <= m.j
  IF !EMPTY(laTables[m.i])
    IF !USED(laTables[m.i])
      USE (laTables[m.i]) IN  0  EXCLUSIVE
      SELECT (laTables[m.i])
        PACK
    ENDIF
  ENDIF
  m.i = m.i +  1 
ENDDO

CLOSE TABLES ALL

Ругается на строчку USE (laTables[m.i]) IN 0 EXCLUSIVE
Файл уже используется
Но как же так aused(gg) в debugere показывает 0 до начала цикла

Где что открыто если я делаю close tables all
...
Рейтинг: 0 / 0
Объясните поведение зыкрытых view
    #33635910
332_john
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попутал немного private DataSession
...
Рейтинг: 0 / 0
Объясните поведение зыкрытых view
    #33636653
332_j0hn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вылечил так в момент закрытия view закрывал и таблицу

Код: plaintext
1.
2.
3.
4.
 IF m.llIsUsedTabLists = .F.
     USE IN cfgview
     USE IN environment
  ENDIF


Но мне все равно интересно почему fox говорил что файл используется если было принудительное
close tables all


Т.е получается что хоть в момент загрузки формы делается USE view

то в закрытии нужно еще делать use in исходной таблице?
...
Рейтинг: 0 / 0
Объясните поведение зыкрытых view
    #33636902
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все дело в том, что команды типа

CLOSE DATABASE
CLOSE TABLES

действуют в пределах ОДНОЙ (текущей) DataSession. На таблицы и базы данных, открытые в других DataSession они не распространяются. А у тебя форма работает именно в Private DataSession. Т.е. именно в другой сессии.

При этом, если в другой DataSession открыты таблицы какой-либо базы данных, то команда Close DataBase не закроет базу данных, а всего-лишь сделает ее не активной. Т.е. сработает как команда

SET DATABASE TO

В случае, если база данных уже открыта, команда

OPEN DATABASE MyBase

Не откроет ранее открытую базу данных, а просто сделает ее текущей. Т.е. сработает как команда

SET DATABASE TO MyBase

Опция EXCLUSIVE будет проигнорирована, поскольку переоткрытия контейнера базы данных не произойдет.


Любая команда Select-SQL (Local View, по сути, и есть команда Select-SQL) автоматически открывает таблицы-источники.

В принципе, чтобы не отслеживать самостоятельно открытие/закрытие таблиц достаточно просто включить их в DataEnvironment формы и оставить в значении по умолчанию свойства DataEnvironment

AutoOpen Tables = .T.
AutoOpen Close = .T.

Local View также можно включить в DataEnvironment. Для Private DataSession это будет означать, что таблицы автоматически откроются при открытии формы и также автоматически закроются при закрытии. Ничего специально отслеживать не надо.
...
Рейтинг: 0 / 0
Объясните поведение зыкрытых view
    #33637148
332_j0hn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сознательно ничего не помещаю в DE, здесь где-то читал что и не рекомендуется

лучше некоторые делать самостоятельно в соответствующих методах и событиях чтобы не полагаться на срабатывание
всяких auto

про DataSession понятно

Danke
Alles Gut
...
Рейтинг: 0 / 0
Объясните поведение зыкрытых view
    #33637171
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
332_j0hnЯ сознательно ничего не помещаю в DE, здесь где-то читал что и не рекомендуется

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


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