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


Форумы  :: FAQ FoxPro

Как проверить факт существования переменной памяти, поля таблицы, метода формы
Дата: 20.04.05 18: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() как и в предыдущем примере.

Замечание

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



Исправлено 2 раз(а). Последнее : Владимир Максимов, 30.12.06 15:35
Ratings: 0 negative/1 positive


Тема Просмотров Написано Написано
  Program 5566 Владимир Максимов 01.03.05 22:02
  Как определить директорию, из которой запущена программа 9808 Владимир Максимов 22.03.05 10:41
  Как проверить факт существования переменной памяти, поля таблицы, метода формы 14046 Владимир Максимов 20.04.05 18:31
  Как работать с ini-файлами 15803 Владимир Максимов 01.05.05 12:17
  Символьные поля, переменные памяти и константы 9755 Владимир Максимов 25.09.05 13:31
  Как работать с путями доступа и именами файлов, содержащих пробелы 7904 Владимир Максимов 22.02.06 22:00
  Как вывести приложение на передний план 18073 Владимир Максимов 04.03.07 14:17
  Как получить разницу двух дат в формате: лет, месяцев, дней 10789 Владимир Максимов 25.02.08 18:32


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

On-line: 1 (Гостей: 1)

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