Создает определяемую пользователем процедуру в программном файле. Есть две версии синтаксиса.

PROCEDURE ProcedureName 
   [ LPARAMETERS parameter1 [ ,parameter2 ] ,... ]
      Commands 
   [ RETURN [ eExpression ] ]
[ENDPROC]
PROCEDURE ProcedureName( [ parameter1 [ AS para1type ][ ,parameter2 
[AS para2type ] ] ,...] ) [ AS returntype ]
      Commands 
   [ RETURN [ eExpression ] ]
[ENDPROC]

Параметры

PROCEDURE ProcedureName

Определяет начало пользовательской процедуры и задает имя процедуры. ProcedureName должен начаться с буквенного символа или символа подчеркивания и может содержать до 254 символов с любой комбинацией символов, чисел, и символов подчеркивания.
[ LPARAMETERS parameter1 [ , parameter2] ,... ] ]

Создает локальные переменные памяти или массивы в вызываемой программе, процедуре или пользовательской функции. Вы можете также использовать ключевое слово PARAMETERS вместо LPARAMETERS, чтобы принять скрытые от программы параметры. Вы можете передать максимум 26 параметров для процедуры. Для подробной информации, см. Команда LPARAMETERS и Команда PARAMETER.
( [ parameter1[ AS para1type][ , parameter2[ AS para2type] ],...] )

Связывает данные вызувающей программы с локальными переменными или массивами. Вы можете использовать AS para1type предложение, чтобы определить тип данных переменной.
Обратите внимание:
Включение параметров в круглых скобках (()) непосредственно после имени процедуры указывает, что параметры имеют локальную область действия в процедуре.

[ AS returntype]

Определяет тип данных возвращаемого значения. Вы можете использовать предложение AS, чтобы осуществить строгий контроль типов. Для подробной информации, см. Как: Строгий контроль типов Орудия для Класcв, Объекта и перемменнй кода.
Commands

Определяет команды Visual FoxPro, образующих процедур
[ RETURN [ eExpression] ]

Возвращает управление к вызывающей программе или к другой программе. eExpression выражение, возвращаемое в вызывающую программу.
Комментарии:
Вы можете включить команду RETURN где-нибудь в процедуру, чтобы возвратить управление к вызывающей программе или к другой программе и определить возвращенное процедурой значение. Если Вы не включаете команду RETURN, Визуальный FoxPro выполняет неявный RETURN автоматически, при завершении процедуры. Если опустить команду RETURN или выполнен неявный RETURN, вызывающей программе будет автоматически возвращено значение "истина" (.T.). Для подробной информации, см. Команда RETURN.

[ ENDPROC ]

Указывает на окончание структуры PROCEDURE.
Note:
ENDPROC ключевое слово является дополнительным, потому что функция завершает выполнение, когда сталкивается с другой командой PROCEDURE, командой FUNCTION или концом программного файла. Вы не можете включить нормальный выполнимый код программы после определяемых пользовательских процедур в программном файле. Только другие определяемые пользователем процедуры, функции, и определения класса могут следовать за первой командой PROCEDURE ИЛИ FUNCTION в файле.

Комментарии

По умолчанию, параметры передаются в процедуру по значения. Для информации о передаче переменных в пользовательскую функцию по ссылке, см.Команду SET UDFPARMS .

Когда вы пытаетесь выполнить процедуру с помощью команды DO ProcedureName, Visual FoxPro ищет заданную процедуру по следующем порядке:

  1. В программе, содержащей команду DO.

  2. В текущей базе данных.

  3. В файлах процедур, открытых по команде SET PROCEDURE.

    Для подробной информации, см. Команда SET PROCEDURE.

  4. В программах, принадлежащих цепочке выполняемых файлов.

    Visual FoxPro просматривает программные файлы, начиная с последней выполнявшейся программы и кончая первой выполнявшейся программой.

  5. В файлах автономных программ.

Если программный файл найден, Visual FoxPro выполняет эту программу. Если файла программы с нужным именем найти не удается, Visual FoxPro возвращает сообщение об ошибке.

Чтобы выполнять процедуру в определенном файле, включите предложение IN в команду DO.

Для информации об использовании команды PROCEDURE при создании классов, см.Команда DEFINE CLASS.

Пример

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

  Копировать код
DO MakeLogEntry WITH "Logged in", "jsmith"

PROCEDURE MakeLogEntry
 PARAMETERS message, username
 pnHandle = FOPEN("LOG2.TXT",2)     && Файл должен существовать!!!
 pnSize = FSEEK(pnHandle,0,2)           && Перемещаем указатель в конец файла
 logEntry = dtoc(date())+","+time()+","+username+","+message
 =FPUTS(pnHandle, logEntry)
 =FCLOSE(pnHandle)  && Закрываем файл
ENDPROC

Следующий пример показывает, как можно вызвать процедуру, чтобы возвратить значение.

  Копировать код
SET CENTURY ON
? longdate(({^1998-02-16}))  && Displays Monday, February 16, 1998

PROCEDURE longdate
 PARAMETER mdate
 RETURN CDOW(mdate) + ", " + MDY(mdate)
ENDPROC

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