Когда вы разрабатываете форму, основанную преимущественно на серверных данных, примите минималисткий подход для обеспечения наивысшей производительности. Определите требуемые данные и функциональные возможности и не торопитесь запрашивать их у сервера; пусть они будут по необходимости запрошены пользователем. Запрос данных с сервера требует времени для обработки и создает сетевую нагрузку. Для запроса меньшего числа данных в ваших формах:
-
Запрашивайте минимально необходимое количество записей. Например, используйте фильтр или запрос для ограничения размера набора записей. Убедитесь, что сервер может обрабатывать любые используемые вами ограничения.
-
Используйте минимально необходимое количество удаленных полей в представлениях, лежащих в основе форм.
-
Используйте меньше форм, для которых требуется обращение к удаленным представлениям, в вашем наборе фори. Когда вы открываете набор форм, все формы в наборе открываются и заполняются данными так, как это было определено при их разработке. Ограничив число форм в наборе форм, особенно тех, которые должны соединяться с сервером и извлекать удаленные данные, вы сократите время, необходимое для их загрузки форм.
-
Используйте минимально необходимое число элементов управления, которые обращаются к удаленным данным и с которыми они связаны. Каждый combobox, listbox и grid, связанный с удаленной таблицей или запросом, требует отдельного запроса на сервер при открытии формы. Избегайте элементов управления, использующих подсчет общих сумм или элементов управления класса listbox и combobox, которые имеют источник ресурсов с большим объемом данных.
-
Если пользователю необходимо сравнивать множественные наборы данных, примите решение хранить данные, возвращаемые сервером во временных локальных таблицах. Предоставьте пользователю форму, в котором он может использовать предварительно сохраненные данные или исполнить новый запрос.
Локальное хранение таблиц, используемых для поиска
Достаточно часто приложение содержит несколько форм, которые используют одни и те же удаленные таблицы. Если данные в таблице обновляются нечасто, вы можете повысить скорость загрузки форм и уменьшить нагрузку на сервер, используя приведенные ниже методики:
-
Храните таблицы, которые содержат данные неизменяемые по времени, и в то же время имеющие небольшой размер (такие, как имя и сокращения регионов или областей в вашей стране) в локальной базе данных приложения Visual FoxPro. Если таблица объединяется в запросах и представлениях с удаленными таблицами, вам необходимо иметь ее копию на сервере и избегать объединения локальных и удаленных данных.
-
Храните таблицы с редко изменяемыми данными (такими, как списки строений компании) как на сервере, так и в локальной базе данных приложения. Предоставьте пользователю способ перегрузки таблицы для случая, когда эти данные изменены.
-
Храните таблицы, данные в которых изменяются от случая к случаю, но не ежедневной основе (такие, как список работников в малой компании или департаменте) как на сервере, так и в локальной базе данных приложения. Ваше приложение должно автоматически обновлять локальную версию при каждом своем старте. Этот метод требует некоторого дополнительного времени при старте приложения, однако, поднимает скорость выборки, когда приложение уже запущено.
Отображение полей только по запросу
Отображайте поля, для которых требуется большое время для извлечения данных с сервера, такие, как поля Memo или General, только тогда, когда они реально необходимы. Вы можете использовать приведенные ниже методики:
-
Если ваша форма основана на представлении, разместите поля Memo или General вне экрана или на другой странице формы. Введите в форму метку, такую как "Нажмите клавишу <Page Down> для просмотра замечаний и картинок", которая будет информировать пользователя о том, как он сможет отобразить требуемую информацию. Установите свойство FetchMemo представления или курсора в False (.F.), для того, чтобы Visual FoxPro не извлекал поля Memo или General до тех пор, пока они не должны быть отображены на экране.
-
Установите значение свойства Visible в False (.F.) для элементов управления, связанных с полями Memo или General. Введите командую кнопку - переключатель, которая будет устанавливать это свойство в True (.T.), когда пользователю потребуется видеть содержимое этих элементов управления.
-
Отображайте наиболее значимые поля в основной форме и предоставьте пользователю кнопку с заголовком "Подробнее...", нажатие на которую откроет другую форму, содержащую оставшиеся или другие поля. В основу формы положите представление, которое имеет параметризацию по полю первичного ключа в основной форме.
Остаток статьи заменен полностью из-за приведенной в опечатки и возникающей в связи с этим путаницы.
Предположим, что у вас имеется набор форм, в которую включены две формы, а в DataEnvironment набора форм введены два представления customers_data и orders_data. Положим, что первая форма, базовая, с именем Form1, основана на представлении customers_data, чье предложение SQL SELECT включает в себя приведенный ниже код:
Скопировать код
SELECT customer_id, company_name, address, city, region, country FROM customers
Вторая форма, с именем Form2, основана на параметризованном представлении orders_data и ее свойство Visible установлено в .F.(False). Для курсора этого представления установим свойство NoDataOnLoad в .T. (True). Предложение SQL SELECT для представления orders_data включает в себя приведенный ниже код:
Скопировать код
SELECT orders.order_id, orders.order_date, orders.shipper_id, ; employee.emp_id, employee.last_name, employee.first_name ; FROM orders, employee ; WHERE orders.cust_id = ?THISFORM.txtCust_id ; AND orders.employee_id = employees.emp_id
Базовая форма включает в себя ряд элементов управления, среди которых имеется поле txtCust_id, связанное с полем customer_id представления customers_data, а также командная кнопка с заголовком "Подробнее", в чей процедурный код события Clicj мы должны вставить функцию приведенный ниже код:
Скопировать код
Requery("orders_data") Thisformset.Form2.Show
При нажатии на кнопку "Подробнее" в представление orders_data будет загружена информация и форма будет отображена пользователю для просмотра информации о заказах выбранного потребителя.