Juri Shutenko Personal Homepage. Visual FoxPro.

Часть 3.DataEnvironment, как встроенный объект формы - II.

В предыдущей части я показал принцип, как можно использовать встроенный в форму объект DataEnvironment для работы с одинаковыми базами данных, но с разными данными и хранящихся в разных каталогах.
 
Теперь углубимся в детали. В моих реальных приложениях, весь код, подобный приведенному для методов, ассоциированых с событием Load класса формы, хранится в пользовательских методах и процедурах, введенных в класс. К сожалению, код для именно такого случая нельзя разместить в диспетчерах, создаваемых на базе класса Custom и затем добавляемых в класс формы в качестве объекта, так как его инициализация происходит после события события Load формы и события Init объекта DataEnvironment. В таком случае в методе, ассоциированном с событием Load класса формы достаточно вызвать пользовательский метод или обратиться к пользовательской функции класса формы.
 
В предыдущей статье я написал "Но перед этим, независимо от установки свойства AutoOpenTables объекта DE, вызовем его метод CloseTables". Пришла пора объясниться. Дело в том, что свойство AutoOpenTables объекта DE можно использовать как флаг, в зависимости от значения которого мы либо будем перестраивать окружение, либо нет. С одной строны, это для особо ленивых, так как все можно сделать гораздо более элегантнее. С другой стороны - это удобно, так как установка значения этого свойства в False (.F.) заставит форму посмотреть - а с этим-ли окружением мне нужно работать? То есть, в простейшим случае код в методе, ассоциированном с событием Load класса формы можно видоизменить следующим образом:

If !This.DataEnvironment.AutoOpenTables
   If !This.udf_SetDE("DE1")
      =MESSAGEBOX(;
         "Something is going wrong in Danish Kingdom!"+chr(13)+;
         "Where is this ragged programmer Shutenko?",;
         16,;
         "Error occurs in application";
      )
      Return .F.
   Endif
Endif

и переместить весь приведенный ранее код, с добавлением обработки ошибок в пользовательскую функцию udf_SetDE() класса формы. Зачем? А вот зачем - до нажатия кнопочки:

и после:

Мы меняем окружение на лету!!! и весь-то код в методе, ассоциированном с событием Click кнопки заключен в одной строке:

This.Parent.udf_SetDE("DE3")
причем в данной тестовой форме, созданной на основе класса, было открыто 12 таблиц и два локальных представления. А на картинках показан textbox с привязкой к полю webprojects.localpath.
 
Впечатляет? Кто сказал, что это "нехороший" объект? Поднимите руку! Вы можете сделать все так же легко с обычным USE? Позвольте сильно посомневаться в этом.

Будет продолжено!

Селектор для быстрого перехода на сайты, связанные с Visual FoxPro.