Для гарантии того, что каждый пользователь в окружении совместного доступа имел безопасную, точную копию рабочего окружения, а также для гарантии того, что многочисленные экземпляры формы могли работать независимо, Visual FoxPro предоставляет вам сессии данных (data session).

Сессия данных является представлением текущего динамического рабочего окружения. Вы можете думать о сессии данных, как о миниатюрном окружении данных, исполняемом внутри одной открытой сесии Visual FoxPro на одной машине. Каждая сессия данных содержит:

Концепция сессии данных легко понимаема, когжа вы представляете себе, что происходит, когда вы открываете одну и ту же форму одновременно на отдельных рабочих машинах в многопользовательском приложении. В этом случае, каждая рабочая машина запускает отдельную сессию Visual FoxPro, и поэтому имеет свой собственный набор рабочих областей: курсоры, представляющие открытые таблицы, индексы и отношения. Для получения более подробной информации об одновременном доступе к данным смотрите описания Обновление данных с использованием множества экземпляров формы и Блокировка данных.

Однако, если вы откроете множество экзепляров формы в одиночном проекте, на одной машине, внутри одной и той же сессии Visual FoxPro, формы будут совместно использовать сессию данных по умолчанию (Default data session), представляющую единое динамическое рабочее окружение. Каждый экземпляр формы, открытый в одной и той же сессии Visual FoxPro использует один и тот же набор рабочих областей и действие, производимое в одном экземпляре формы, которое перемещает указатель записи в рабочей области, автоматически отразится на других экзеплярах такой же формы.

Использование частных сессий данных (Private Data Sessions)

Если вам желателен больший контроль над множеством экземпляров формы, вы можете применять частные сессии данных. Когда ваша форма использует частную сессию данных, Visual FoxPro создает новую сессию данных для каждого экземпляра формы, набора форм или управляющего элемента панели инструментов, созданных вашим приложением. Каждоая частная сессия данных содержит:

  • Отдельную копию каждой таблицы, инедкса и отношения в окружении данных формы.

  • Неограниченный набор рабочих областей.

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

Число доступных сессий данных ограничивается лишь доступной системной памятью и дисковым пространством.

Вы можете применить частную сессию данных установкой свойства формы DataSession. Свойство DataSession имеет две установки:

  • 1 – Default data session (установка по умолчанию).

  • 2 – Private data session.

По умолчанию, свойство формы DataSession установлено в 1.

Для того, чтобы сделать доступной частную сессию данных

  • В дизайнере форм Form Designer установите свойство DataSession в значение 2 – Private data session.

    - или -

  • В коде установите свойство DataSession равным 2.

    Например, напечатайте:

      CopyCode imageСкопировать код
    frmFormName.DataSession = 2
    NoteЗамечание

    Вы можете установить свойство DataSession только в design time. Свойство DataSession в run time получает признак "только для чтения".

Когда форма использует частную сессию данных, каждый экземпляр формы, открытый на одной машине в одной и той же сессии Visual FoxPro, использует свой собственный набор окружения данных. Использование частной сессии данных аналогично запуску одной и то же формы одновременно на разных машинах.

Эквивалент множества сессий данных
EquivMultipleDataSessions screenshot foxpro

Идентификация сессий данных

Каждая частная сессия данных идентифицируется отдельно. Вы можете видеть содержание каждой сессии данных в окне Data Session. Вы, кроме того, можете изменить описание сессии данных с помощью команд в коде события Load.

Для того, чтобы увидеть идентификационный номер каждой сессии данных

  • Используйте свойство, присущее только окружению run-time - DataSessionID.

    Приведенный ниже пример отображает свойство DataSessionID формы с именем frmMyForm:

      CopyCode imageСкопировать код
    DO FORM frmMyForm
    ? frmMyForm.DataSessionID

Если вы активируете форму с помощью ключевого слова NAME, вы можете использовать имя формы для получения значения свойства DataSessionID так, как показано в приведенном ниже примере:

  CopyCode imageСкопировать код
DO FORM MyForm NAME one
? one.DataSessionID

Свойство DataSessionID разработано только для идентификации конкретной сессии данных. Избегайте изменения свойства DataSessionID экземпляра формы, так как элементы управления, привязанные к данным потеряют свои источники данных, когда вы изменяете DataSessionID.

Перепись автоматического присвоения частной сессии данных

Когда используется частная сессия данных для формы, изменения, которые вы сделали в данных на форме не представляются автоматически на другом экземпляре формы. Если вы желаете, чтобы все экземпляры формы обращались к одним и тем же данным и одновременно отображали изменения в общих данных, вы можете переписать автоматическое присвоение сессии данных.

Для переписи автоматического присвоения сессии данных

  • Установите команду SET DATASESSION в 1 или не указывайте значение.

Например, приведенный ниже пример кода разрешает командному окну (Command window) и окну Project Manager управлять сессией данных, установливаемой по умолчанию:

  CopyCode imageСкопировать код
SET DATASESSION TO 1

- или -

  CopyCode imageСкопировать код
SET DATASESSION TO

Смотрите также