| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Программа на языке PAL, или скрипт, состоит из последовательностей команд. Настоящая глава описывает структуру скриптов и команд. Она содержит следующие разделы:
Настоящая глава содержит лишь общий синтаксис и структуру команд PAL. Специфический синтаксис и использование каждой команды описаны в справочнике команд в главе 20. Программа на языке PAL, или скрипт, состоит из последовательностей команд. Вы можете объединить ряд скриптов, выполняющих различные задачи для создания полной прикладной системы баз данных - автономной программы, с помощью которой пользователи могут вводить, просматривать, изменять данные и составлять отчеты. Команды являются программнными примитивами, определяющими, что необходимо выполнить системе Paradox. Когда вы разрабатываете скрипты, важно помнить, что выполняет их именно система Paradox, а не компилятор PAL. Вам следует рассматривать PAL в качестве автоматизированного пользователя системы Paradox, управляемого вами. Этот автоматизированный пользователь управляет действиями реального пользователя вашей прикладной системы, скрывая те части системы Paradox, в которых нет необходимости. Скрипты PAL - просто текстовые файлы в кодировке ASCII с расширением .SC. По соображдениям удобства и эффективности часто используются методы вст роенной записи скриптов системы Paradox, ее редактор скриптов, а также Personal Programmer. Детально способы создания и запуска скриптов описаны в главах 9 и 10. Если вы не используете ветвление или другие управляющие структуры, изменяющие последовательность выполнения команд, то скрипт выполняется послеовательно с начала до конца, например:
MENU {View} {Orders} После того, как выполнена последняя команда скрипта, он попросту заканчивается. Скрипты могут содержать команды запуска других скриптов, и уровень вложения, которого вы межете достичь таким способом практически неограничен. Например, приведенный ниже скрипт является правильным с точки зрения PAL, хотя все, что он делает - это лишь запуск другого скрипта: PLAY "Script2" Cкрипт, вызвавший другой скрипт, временно приостанавливается, пока происходит выполнение вызванного скрипта. И вызванный скрипт, в свою очередь, может быть приостановлен, если внутри его содержатся команды вызова других скриптов. Когда заканчивается выполнение вложенного скрипта, управление передается скрипту, вызвавшему его, и он начинает исполняться с той точки, где был приостановлен. Когда заканчивается выполнение первоначального скрипта, управление передается системе Paradox (вы можете изменить этот порядок, как описано в главе 4). Опытные программисты могут спросить, чем же скрипты PAL отличаются от обычных программ. В самом деле они похожи во многих аспектах:
Например, приведенные ниже два скрипта выполняются в точности одинаково, но один из них гораздо более удобочитаем, чем дру гой: IF ISTABLE("Choices")
IF ISTABLE("Choices") = TRUE THEN DELETE "Choices" ELSE ? "Choices doesn't exist" ENDIF Скрипты PAL позволяют вам управлять информацией, видимой польздователю. Как вы увидите в главе 13, скрипты обычно скрывают дествия, происходящие в рабочей области системы Paradox, давая возможность пользователю работать со специальным экраном, называемым канвой PAL. PAL включает полный набор средств для создания канвы:
В вашем распоряжении находится достаточное количество инструментальных средств и функций, многие из которых знакомы вам, если вы программировали ранее. Скрипты PAL имеют свободную структуру. За небольшим количеством исключений, вы можете помещать в одной строке столько команд, сколько хотите, разделяя их по меньшей мере одним пробелом. Вы можете также разделять команду на две или несколько строк, при этом разделять ключевые слова, имена, величины данных запрещается. Длина каждой строки скрипта PAL может быть не более 132 символов. Правильное разделение на строки
IF Неправильное разделение на строки
IF My 4 ; разделена величина THEN DoSomeProc ; разделены имя процедуры () ; и список ее параметров
END Для определенных команд, включая RETURN, STYLE, SETKEY, ?, ?? и TEXT существуют ограничения на состав текста, следующего за командой. Эти ограничения отражены в описании каждой команды в главе 20. Многие из методов записи скриптов системы Paradox (описано в главе 9) создают скрипты, содержащие несколько команд в одной строке. Для удобства чтения и редактирования мы рекомендуем помещать каждую команду в отдельной строке, используя выделение с помощью абзаца, чтобы показать, какие команды являются зависимыми от других (особенно в управляющих структурах типа IF ... THEN). Примеры этой книги иллюстрируют рекомендуемый нами стиль структурного программирования. Использование верхнего и нижнего регистра Вы можете свободно использовать регистры клавиатуры при написании команд. Ключевые слова могут быть записаны в верхнем или нижнем регистре, а также используя буквы обоих регистров. Например, PAL считает, что add, ADD, Add и даже aDd являются одной и той же командой. Это справедливо для имен таблиц, полей, переменных, массивов и процедур. Единственным случаем, где имеет значение регистр, является написание строковых величин. Например, строки "abc" и "ABC" не эквивалентны. Комментарии и пропуски строк Все символы, следующие за точкой с запятой (;), рассматриваются как комментарии и игнорируются PAL, если (;) не включена в строковую величину. Мы рекомендуем использовать комментарий для описания, что происходит по ходу действия программы, для указания на скрытые сообщения, переменные и процедуры, для того,чтобы обеспечить любой другой полезной информацией человека, читающего или редактирующего скрипт, или просто для напоминания о том, что же вы делали. Если вы начали строку с (;), то она вся рассматривается как комментарий. В комментариях, состоящих из нескольких строк, каждая строка должна начинаться с (;). Пустые строки не влияют на выполнение скриптов PAL. Вы можете использовать их без опасения для выделения комментариев и чтобы облегчить чтение скриптов. Нет необходимости начинать пустые строки с (;). Везде в примерах этого руководства мы свободно пользуемся комментариями. Советуем вам делать то же самое. Последовательность выполнения
В языке PAL отсутствуют команды начала и конца скрипта. После запуска скрипта его команды выполняются последовательно от начала до конца. Однако вы можете изменить последовательность выполнения скрипта, используя управляющие структуры. Работа скрипта заканчивается или если выполнены все его команды, или если очередная команда завершает выполнения скрипта (например, RETURN, QUIT или EXIT). Передача управления после окончания скрипта происходит в зависимости от того, как скрипт был запущен и как он завершился:
Например, если вы запустили скрипт: VIEW "orders" EDITKEY то таблица "orders" помещается в рабочей области, включается режим редактирования. После окончания скрипта Paradox остается в этом режиме. Как вы увидите в главе 9, скрипты могут быть запущены с помощью командной строки DOS, но после нормального их завершения пользователь остается в системе Paradox. Если вы хотите возвратиться из скрипта в DOS, используйте команду EXIT вместо QUIT. Действия команд PAL на объекты рабочей области системы Paradox обычно скрыты от пользователя до тех пор, пока скрипт не завершил работу. Это происходит потому, что рабочая область скрыта канвой PAL во время работы скрипта, и пользователи обычно видят результаты его работы, а не промежуточные шаги. Вы имеете возможность управлять тем, что видит пользователь, для этого существуют команды, высвечивающие меню (SHOWMENU), подсказки и сообщения (PROMPT, MESSAGE, RETURN, ? и ??), принимающие вводимую пользователем информацию (ACCEPT, WAIT), и даже показывающие все промежуточные шаги (ECHO) выполнения скрипта. Эти и другие похожие команды детально описаны в главе 13. Вложенные скрипты Если вы программируете сложные задачи, вы увидите, что более удобно и эффективно создавать ряд маленьких скриптов вместо одного большого. Вы можете запустить один скрипт из другого с помощью команды PLAY, причем запускаемый скрипт может также содержать команды PLAY для запуска других скриптов, и так далее. Это один из путей создания подпрограмм в прикладной системе. ( Другой путь - создание процедуры для каждой из задач.) Скрипты, запускаемые из других скриптов, не должны содержать команд QUIT и EXIT, если только вы не хотите завершить выполнение всех скриптов в этом месте. Обычно скрипты, используемые как подпрограммы не имеют завершающей команды или завершаются командой RETURN. Когда система Paradox встречает RETURN или выполняет пос леднюю строку скрипта, она возвращает управление вызывающему скрипту более высокого уровня. Если завершилось выполнение последнего скрипта, управление передается системе Paradox или DOS. Существуют три основных категории команд PAL:
Примеры команд каждой из трех категорий приведены на рис.2-1. На рисунке преставлен скрипт, позволяющий пользователю выбрать электронную таблицу типа Quattro, которая затем вносится в таблицу системы Paradox, сортируется по содержимому первого поля. Затем по этой таблице печатается отчет.
1 | SHOWFILES NOEXT ; высвечивается меню файлов *.WKQ
| "*.WKQ" | ; конкретизируется имя используе | ; мой таблицы
1 | WHILE ISTABLE(imptbl) ; если таблица существует
| @0,0 | {Quattro} ; вводится рабочая таблица из | ; Quattro в таблицу с новым
| SELECT wksht SELECT imptbl; именем
|
1- команды программирования; Рис 2-1. Типы команд PAL. Команды программирования PAL позволяют выполнять операции, невыполнимые внутри системы Paradox, такие как высвечивание пользовательского меню и циклы. Эти команды не могут быть записаны в скрипт из системы Paradox; вам следует пользоваться редактором скриптов системы Paradox или вашим собственным редактором для включения этих команд в скрипт, или использовать Personal Programmer для создания прикладных систем, содержащих эти команды. Они делятся на шесть типов:
Использование этих типов команд поробно описано в справочнике команд в главе 20. Управляющие структуры программы описаны в главе 4, а информация по использованию других типов команд содер жится в главах от 12 до 19. Команды программирования PAL содержат одно или более ключевых слов и, возможно, несколько параметров ( переменных величин или аргументов). Например, команда BEEP, результатом выполнения которой является звуковой сигнал, состоит из одного ключевого слова BEEP. Напротив, команда MESSAGE имеет список аргументов, разделенных запятыми, например: MESSAGE "The time is: ", TIME(), " o'clock " где MESSAGE - имя команды, "The time is: " - первый аргумент, TIME() - второй аргумент, " o'clock " - третий аргумент. Аргументы команд PAL называются выражениями и подробно описаны в главе 3. Взаимодействие с пользователем
Существует четыре типа команд PAL, позволяющих имитировать нажатие на клавиши при работе в режиме диалога с системой Paradox:
Примеры этих элементов представлены на рис.2-1,2-2,2-3. Хотя вы можете внести эти элементы непосредственно в скрипт, обычно легче записать их в процессе диалога с системой Paradox, используя встроенные средства записи скриптов. Чтобы это сделать, выберите из меню режим Scripts/BeginRecord или нажмите на клавишу {Alt}{F3} (см. главу 8). Выбор из меню Если обрабатываемая команда скрипта является именем режима из меню системы Paradox и к моменту ее обработки высвечено соответствующее меню, то система перейдет в указанный вами режим. Аналогично, если в области меню высвечивается посказка, а обрабатываемая команда скрипта является ответом на нее, заключенным в фигурные скобки, то этот ответ будет введен в систему Paradox. Например, на рис. 2-2 {Modify} и {Orders} соответствуют альтернативам из меню. В автоматически записанном скрипте опции из меню преставлены в виде слов, начинающихся с заглавной буквы, так же, как они выглядят в меню. Ответы на подсказки записываются в том виде, в каком они введены программистом. Регистр, в котором введены коман ды, не имеет значения. Хотя вы не можете использовать имена переменных в фигурных скобках, вы можете воспользоваться командой SELECT для достижения этого же результата. В главе 12 изложено подробное описание взаимодействия с пользователем. На рис. 2-2 представлен скрипт, сортирующий таблицу "orders" по календарным датам, причем заказы с самыми поздними датами записываются первыми. Если вы знаете систему Paradox, вы легко поймете, как работает этот скрипт. Первая его строка содержит альтернативы из меню, с помощью которых выводится сортировочная форма для таблицы "orders". В следующей строке четыре команды Down подводят курсор к полю календарных дат, а строка, заключенная в кавычки, вводит спецификацию сортировки. Затем команда Do_It! выполняет сортировку. В третьей строке - окончание скрипта. Оно не влияет на его работу.
{Modify} {Sort} {Orders} {Same} Специальные клавиши Упоминание в скрипте имен специальных клавиш или их комбинаций имитирует воздействие на систему Paradox с помощью этих клавиш, например на рис. 2-2 в скрипте употреблены названия специальных клавиш Down и Do_It!. Таблица 2-1 содержит имя каждой специальной клавиши, записываемое в скрипт. Регистр, в котором записано имя клавиши не имеет значения. Заметьте, что клавиша Do-It! {F2}, в имени которой содержится тире, в скрипт записывается в виде Do_It!. (Если вы запишете в скрипт Do-It!, PAL воспримет это как вычитание переменной It! из переменной Do.) Клавиши с длинными именами, состоящими из нескольких слов, например, Instant Script Play {Alt}{F3}, сокращаюся: InstantPlay. Хотя вы не можете использовать имя переменной для обозначения специальной клавиши, вы можете использовать ее в качестве параметра команды KEYPRESS, если к моменту исполнения команды значение переменной известно. Подробности смотрите в главе 12. Таблица 2-1. Специальные клавиши в скриптах. Клавиша Имя клавиши в скрипте Клавиатура управления курсором и специальные клавиши {Home} Home {End} End {PgUp} PgUp {PgDn} PgDn {Left} Left {Right} Right {Down} Down {Up} Up {Ins} Ins {Del} Del {BackSpace} BackSpace {Esc} Esc {Enter} Enter {Tab} Tab {Shift}{Tab} Reserve Tab Клавиши курсора с {Ctrl} {Ctrl}{Break} CtrlBreak {Ctrl}{Home} CtrlHome {Ctrl}{End} CtrlEnd {Ctrl}{Left} CtrlLeft {Ctrl}{Right} CtrlRight {Ctrl}{BackSpace} CtrlBackSpace {Ctrl}{PgUp} CtrlPgUp {Ctrl}{PgDn} CtrlPgDn Последовательности, содержащие {Ctrl} и {Alt} Cross Tab {Alt}{X} CrossTab Ditto {Ctrl}{D} Ditto DOS {Ctrl}{O} DOS DOSBig {Alt}{O} DOSBig Field View {Ctrl}{F} FieldView Key Lookup {Alt}{K} KeyLookup Lock Toggle {Alt}{L} LockKey Rotate {Ctrl}{R} Rotate Refresh {Alt}{R} Refresh Vertical Ruler Toggle{Ctrl}{V} VertRuler Report Delete Line {Ctrl}{Y} DeleteLine Zoom {Ctrl}{Z} Zoom Zoom Next {Alt}{Z} ZoomNext Функциональные клавиши Help {F1} Help Do-It! {F2} Do_It! Up Image {F3} UpImage Down Image {F4} DownImage Example {F5} Example Checkmark {F6} Check Form Toggle {F7} FormKey Clear Image {F8} ClearImage Edit {F9} EditKey Menu {F10} Menu Функциональные клавиши с {Alt} Instant Script Record {Alt}{F3} InstantRecord Instant Script Play {Alt}{F4} InstantPlay Field View {Alt}{F5} FieldView Check Plus {Alt}{F6} CheckPlus Instant Report {Alt}{F7} InstantReport Clear All {Alt}{F8} ClearAll Coedit {Alt}{F9} CoeditKey Функциональные клавиши с {Ctrl} Check Descending {Ctrl}{F6} Check Descending Graph Key {Ctrl}{F7} Graph Key Функциональные клавиши с {Shift} GroupBy {Shift}{F6} GroupBy Строки Текст, не входящий в меню, можно внести в скрипт, заключив его в кавычки. Это необходимо, когда нужно внести данные в таблицу, ввести текстовые спецификации формы или отчета, заполнить формы сортировки и во многих других случаях. Например на рис. 2-2 указана спецификация сортировки "1d". Заметьте разницу между видом ответа на подсказку меню, таким как {orders} и видом текстовых строк, не относящихся к меню, таких как "1d". Хотя в строках нельзя использовать имена переменных, вы можете внести их туда командой TYPEIN, изменяя информацию, выводимую во время выполнения скрипта. Подробности смотри в главе 12. Образцы запросов Для выполнения запросов в скрипте необхоимо его создать в системе Paradox, а затем выбрать из главного меню режим Scripts/QuerySave и записать его в скрипт. Формулировка запроса включается в скрипт между командами QUERY и ENDQUERY. На рис.2-3 показано соответствие между видом запроса на экране и его представлением в скрипте. После того, как вы запомнили запрос, внесите скрипт запроса в нужное место вашего скрипта, используя режим Read редактора скриптов или аналогичные команды ваших собственных редакторов. Или просто внесите в ваш скрипт команду PLAY, параметром которой является имя скрипта запроса. Заметьте, что команда QUERY только высвечивает формулировку запроса в рабочей области. Для выполнения запроса необходимы команды ENDQUERY и DO_IT!. В формулировках запроса можно использовать переменные со знаком "~" для динамической передачи данных запросу перед его выполнением. Подробности смотри в главе 14. Хотя это и возможно, мы вам категорически советуем не создавать запросов с помощью редактора скриптов. Во время создания запроса в режиме диалога с системой Paradox она обеспечивает структурированную поддержку ввода и изменения величин в используемых вами формах запросов. Она также проверяет допустимость запросов. Создание запросов с помощью редактора исключает средства контроля системы Paradox и может привести к тому, что правильно выглядящий запрос тем не менее будет выполняеться с ошибками. Дополнительная информация о записи скриптов запросов содержится в главе 9. Предположим, вы создаете запрос к таблицам "orders" и "customer", чтобы узнать покупателей, заказавших более одной единицы товара. Записанная в скрипте формулировка запроса похожа на то, что вы видите на экране, работая с системой Paradox. Отметьте следующие особенности:
Скрипт образца запроса представлен нап рис.2-3. QUERY ORDERS | Order # | Cust ID | Quant | Date | | CHECK | _1234 | CHECK >1 | CHECK | CUSTOMER | Cust ID | Last Name | City | | _1234 | CHECK | CHECK | ENDQUERY ORDERS------Order #----Cust ID-----Stock $---Quant-------Date---- | ^ | 1234 | | ^ >1 | ^ | | | | | | | CUSTOMER----Cust ID----Last Name--Init-------Strit-------City---- | 1234 | ^ | | | ^ | | | | | | | ^ - знак проверки поля. Рис. 2-3. Образец запроса и его скрипт. Сокращенные команды меню - это команды, выполняющие операции системы Paradox, аналогичные тем, которые выполняются системой после выбора из системных меню соответствующего режима. Например, используя: SORT "Orders" ON "Date" D можно рассортировать таблицу заказов так же, как это делается с помощью скрипта, приведенного на рис 2-2. Сокращенная команда меню SORT в точности эквивалентна слеующей последовательности действий: выбору режима Modify из главного меню, режима Sort из меню модификации, определению таблицы и заполнению формы сортировки. Вы можете проверить эту эквивалентность, создав два этих скрипта и запустив их. Сокращенные команды меню и соответствующие им режимы системы Paradox перечислены в таблице 2-2. Эти команды имеют такой же синтасис, как и команды программирования PAL, и так же, как и они, не могут быть записаны в скрипт в режиме диалога с системой Paradox. Однако их можно встретить в прикладных системах, создаваемых с помощью системы Personal Programmer. Для выполнения сокращенных команд меню требуется, чтобы в момент их выполнения система Paradox была в соответствующем режиме. Как вы знаете, режим системы высвечивается в верхнем правом углу экрана. Таблица 2-2. Сокращенные команды меню Сокращенные Режим Опции меню команды меню системы системы Paradox ----------------------------------------------------------------- ................ Хотя сокращенные команды меню не обеспечивают никаках преимуществ во время выполнения скрипта, использование их все же желательно, потому что:
VIEW tabname Это отличается от: Menu {View} {tabname} так как в последнем случае система Paradox будет считать, что "tabname" - это не имя переменной, а имя самой таблицы ( если такая существует). Аналогично, команда: SORT TABLE() ON FIELD() сортирует текущую таблицу рабочей области по величинам текущего поля - это невозможно сделать с помощью меню системы Paradox.
Menu {Tools} {Copy} {Table} {orders} {newords} приведет к копированию таблицы "orders" в таблицу "newords", если последняя не существует к моменту выполнения команд. Если таблица "newords" существует, система Paradox высветит меню:
Cancel Replace Таким образом, если в вашем скрипте не предусмотрена опция {Replace}, то вы получите ошибку скрипта. С другой стороны, команда : COPY "orders" "newords" автоматически обеспечивает подтверждение, если это необходимо и будет работать независимо от того, существует или нет таблица "newords". ( Если вы не хотите заменять уже существующую таблицу, можно использовать функцию ISTABLE для проверки перед тем, как выполнять команду COPY. Или вы можете попросить пользователя подтвердить замену, как это описано в главе 12.) Вследствие этих преимуществ в процессе отладки прикладной системы вы можете заменить некоторые последовательности опций меню, записанные вами в скрипт, на сокращенные команды меню. Так как они работают в точности аналогично соответствующим опциям меню, сокращенные команды могут быть использованы только в том контексте, в котором они имеют смысл. Например, ошибочным будет использование команды: VIEW "orders" если система Paradox находится в режиме редактирования, для которого опция {View} не является правильной. Ваша задача обеспечить при выполнении каждой команды соответствующий режим системы Paradox. Чтобы определить текущий режим системы, можно использовать функцию SYSMODE. Для создания собственных сокращенных команд меню можно использовать команды TYPEIN и SELECT. Подробности смотри в главе 12. [Назад][Содержание][Вперед] |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|