:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как проверить факт существования переменной памяти, поля таблицы, метода формы
Дата: 20.04.05 17:31:42 ОтветитьЦитировать

Вопрос

Как проверить факт существования переменной памяти, поля таблицы, метода формы и т.п. ?

Ответ

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

Как проверить факт существования переменной памяти

IF TYPE("m.MyVar") = "U"  
 	* Переменной памяти с именем MyVar - не существует  
  ENDIF


Как проверить факт существования поля таблицы (курсора, View)

Если таблица (курсор, View) уже открыта в текущей DataSession, то

IF TYPE("MyTableAlias.MyField") = "U"  
 	* Для таблицы, открытой с алиасом MyTableAlias   
 	* не существует поля с именем MyField  
  ENDIF

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

IF InDBC("MyTable.MyField","FIELD") = .F.  
 	* Для таблицы, включенной в контейнер базы данных под именем MyTable   
 	* не существует поля с именем MyField  
  ENDIF


Как проверить факт существования (использования, открытия) формы

IF TYPE("_VFP.Forms('MyForm')")="U"  
 	* Формы со свойством name = MyForm не существует (не открыта)  
  ENDIF

Обратите внимание, что здесь используется системная переменная _VFP. Использовать аналогичный синтаксис с системной переменной _SCREEN - не получиться. Коллекция _SCREEN.Forms() не принимает в качестве параметра символьные значения. Только числовые.

Кроме того, данный способ не сработает для форм, имеющих значение совйства ShowWindow = 2 - As Top-Level Form. В этом случае придется просто перебирать весь массив _SCREEN.Forms() или _VFP.Forms()

LOCAL lnI, loForm  
  loForm = NULL  
  FOR lnI=1 TO _SCREEN.FormCount  
  	loForm = _SCREEN.Forms(m.lnI)  
  	IF m.loForm.Name = "MyForm"  
 		* Нашли форму со свойством Name = "MyForm"  
  		EXIT  
  	ENDIF  
  	loForm = NULL  
  ENDFOR  
  IF IsNull(m.loForm) = .T.  
 	* Формы со свойством name = MyForm не существует (не открыта)  
  ENDIF

Как проверить факт существования метода, события или свойства в используемом объекте

IF TYPE("_VFP.Forms('MyForm')")="O" AND PEMStatus(_VFP.Forms('MyForm'),'MyMethod',5) = .T.  
 	* Открыта форма со свойством name = MyForm   
 	* и в этой форме существует метод, событие или свойство с именем MyMethod  
  ENDIF

Для форм, со свойством ShowWindow = 2 - As Top-Level Form данный способ не годится. Придется также перебирать все элементы массива _SCREEN.Forms() как и в предыдущем примере.

Замечание

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



Исправлено: Владимир Максимов, 30.12.06 14:35
Ratings: 0 negative/1 positive


Тема Просмотров Написано Написано
  Program 4983 Владимир Максимов 01.03.05 21:02
  Как определить директорию, из которой запущена программа 8530 Владимир Максимов 22.03.05 09:41
  Как проверить факт существования переменной памяти, поля таблицы, метода формы 11209 Владимир Максимов 20.04.05 17:31
  Как работать с ini-файлами 14041 Владимир Максимов 01.05.05 11:17
  Символьные поля, переменные памяти и константы 8128 Владимир Максимов 25.09.05 12:31
  Как работать с путями доступа и именами файлов, содержащих пробелы 6078 Владимир Максимов 22.02.06 21:00
  Как вывести приложение на передний план 15756 Владимир Максимов 04.03.07 13:17
  Как получить разницу двух дат в формате: лет, месяцев, дней 9002 Владимир Максимов 25.02.08 17:32


Извините, но у вас нет прав для того, чтобы писать в этом форуме.

On-line: 28 Simple777  and Guests: 27


© 2006 Fox Club 
Яндекс.Метрика