Вы можете создавать формы, в которых можно легко переключаться между использованием локальных данных и данных, которая хранятся удаленно (например, на сервере баз данных). Это позволяет вам создать прототип приложения, используя локальные или тестовые данные, затем переключиться на удаленные или "живые" данные, без последующих изменений в ваших формах.

Например, если ваше приложение Visual FoxPro представляет собой "front end" для большой таблицы потребителей, хранящейся на сервере баз данных, вы можете создать локальный файл .dbf, который будет содержать небольшое, но представительное количество образцовых данных. Затем вы можете создать, протестировать и отладить ваши формы, основанные на этом небольшом количестве данных. Когда вы будете готовы распространять ваше приложение, вы просто свяжете ваши формы с большим набором данных.

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

Для создания формы, которая может переключаться между локальными и удаленными данными

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

  2. Создайте новую форму.

  3. Откройте Конструктор Data Environment формы и добавьте оба представления.

  4. Вызовите контекстное меню Data Environment Designer и выберите в нем Properties.

  5. В окне Properties(Visual FoxPro) установите свойство Alias Property для обоих курсоров в одно и то же имя.

  6. Установите свойство OpenViews либо в 1Local Only, либо в 2  Remote Only, в зависимости от представления, с которым вы желаете работать при запуске формы.

    NoteЗамечание

    Поскольку оба представления используют одно и тоже псевдоимя, не устанавливайте значение свойства в 0Local and Remote (по умолчанию).

  7. Введите в форму элементы управления и установите их свойства ControlSource в соответствующие поля представления. Поскольку оба представления имеют одно и то же псевдоимя, элементы управления будут одинаково работать обоими представлениями, и, разумеется с тем, которое будет активно при запуске формы.

После создания формы, вы можете переключится между представления изменением свойства OpenViews. ВЫ можете сделать в это в Data Environment формы, открытой в Конструкторе Form. Или, вместо этого, вы можете написать программный код и подключить его к событию, которое полезно в случае, когда вы переключаете представления в run time. Например, вы можете вложить приведенный ниже программный код в событие Activate формы:

 CopyCode imageСкопировать код
THISFORM.DataEnvironment.OpenViews = 2 && Использовать удаленное представление

Если вы создаете форму, которая может переключаться между локальными и удаленными представлениями, вы должны, кроме того, разработать код навигации для размещения обоих представлений, особенно в случае, когда вы разрабатываете форму с отношениями "один-ко-многим. Например, если ваша форма обращается к локальной таблице или представлению, вы можете использовать код, которые приведен ниже для командной кнопки Next для смещения указателя к следующей записи в курсоре:

 CopyCode imageСкопировать код
SKIP 1
THISFORM.Refresh()

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

Решением является использование параметризованного представления. Например, определение для представления, используемого для редактирования информации о потребителе может быть таким:

 CopyCode imageСкопировать код
SELECT * FROM CUSTOMERS WHERE ;
 CUSTOMERS.COMPANY_NAME = ?pCompanyName

При запуске формы, вы можете запросить пользователя выбрать имя потребителя, используя диалоговое окно, или позволить пользователю ввести имя потребителя в текстовом боксе. Код для командной кнопки Display должен тогда выглядет аналогично приведенному ниже:

 CopyCode imageСкопировать код
pCompanyName = THISFORM.txtCompanyName.Value
REQUERY("customer")
THISFORM.Refresh()

Для получения более подробной информации смотрите описание задачи Как: создать параметризованные представления.

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