г---------------------------------¬ ¦ ALEN ¦ L---------------------------------- Назначение Возвращает число элементов, строк или столбцов в массиве. Синтаксис ALEN( [, ]) Параметры одно- или двумерный массив Если 0, то ALEN возвращает число элементов Если 1, то ALEN возвращает число строк Если 2, то ALEN возвращает число столбцов Тип возвращаемого значения Числовой Замечания Новая для FoxPro 2.0 Смотри также ADEL(), ADIR(), AFIELDS(), ASCAN(), AELEMENT(), AINS(), ASORT(), ASUBSCRI PT(), DIMENSION, STORE Описание Эта функция возвращает число элементов, строк или столбцов в массиве. Параметры задает имя массива, информацию о котором возвращает функция ALEN(). Вы можете включать в эту функцию необязательный аргумент , равный 0, 1 или 2. Если вы не задали этот аргумент, то по умолчанию его значение принимается равным 0. Явно задавая 0, вы опять получите число элементов в массиве . Если вы задали 1, то ALEN() возвратит число строк в массиве . Если массив был создан с одним индексом (одномерный), то ALEN() возвратит этот индекс. Если массив был создан с двумя ин- дексами (двумерный), то ALEN() возвратит первый индекс. Если вы задали 2, то ALEN() возвратит число столбцов в масси- ве . Если массив был создан с одним индексом (одномерный), то ALEN() возвратит 0, т.е. нет столбцов. Если массив был создан с двумя индексами (двумерный), то ALEN() возвратит второй индекс. Примеры DIMENSION x(5) DIMENSION y(3,7) ? ALEN(x) 5 ? ALEN(x,0) 5 ? ALEN(x,1) 5 ? ALEN(x,2) 0 ? ALEN(y) 21 ? ALEN(y,1) 3 ? ALEN(y,2) 7 SELECT DISTINCT state FROM customers INTO ARRAY states ? ALEN(states) 6 В следующем примере из базы данных CUSTOMER в массив перемен- ных памяти COMPANIES копируется поле COMPANY. Массив COMPANIES инициализируется с одной строкой и одним столбцом. ALEN() возвра- щает число строк базы данных, и поэтому COMPANIES может быть ди- намически перераспределен, если это необходимо, в соответствии с числом этих компаний. Затем командой COPY TO ARRAY поле COMPANY копируется в массив COMPANIES. IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF DIMENSION comрanies(1,1) COUNT TO m.count IF m.count > ALEN(comрanies) *** Массив слишком мал, надо увеличить *** DIMENSION comрanies(m.count,1) ENDIF COPY TO ARRAY comрanies FIELD Comрany г---------------------------------¬ ¦ ALIAS ¦ L---------------------------------- Назначение Возвращает псевдоним заданной рабочей области Синтаксис ALIAS([]) Тип возвращаемого значения Символьный Смотри также DBF(), SELECT() Описание Функция ALIAS() возвращает псевдоним для базы данных в задан- ной рабочей области. Параметр Функция ALIAS() возвращает псевдоним для базы данных в рабо- чей области, указываемой числовым выражением . Если опущено, функция ALIAS() возвращает псевдоним те- кущей выбранной рабочей области. Если в указанной рабочей области никакая база данных не открыта, возвращается нулевая строка. Примеры CLOSE ALL SELECT A USE states SELECT B USE customer ALIAS cust ? ALIAS() CUST ? ALIAS('states') STATES г---------------------------------¬ ¦ ALLTRIM ¦ L---------------------------------- Назначение Возвращает строку символов с удаленными ведущими и завершающими пробелами. Синтаксис ALLTRIM() Тип возвращаемого значения Символьный Смотри также LTRIM(), RTRIM(), TRIM() Описание Функция ALLTRIM() возвращает данное знаковое выражение , причем все ведущие и завершающие пробелы удаляются. Эта функция может быть особенно полезна в том случае, когда прежде, чем вы используете введенные данные в последующей команде, вам необходимо убедиться в том, что данные, введенные пользователем, не имеют пробелов перед ними и после них. Параметр Этот параметр задает строку, из которой будут удаляться про- белы. Пример USE customer @ 5,0 SAY 'Name of Contact рerson: ' GET рerson DEFAULT SPACE(20) LOCATE FOR contact = ALLTRIM(рerson) READ ? RECNO() 24 DISPLAY contact, comрany Record# CONTACT COMPANY 24 Mike Tine DataTach, Inc. В этом примере в случае, если пользователь должен включать пробелы перед именем лица, вступающего в контакт (здесь это имя Mike Tine) или после него, функция ALLTRIM, будет удалять их, га- рантируя, что команда LOCATE соответствующим образом сочетается с именем. г---------------------------------¬ ¦ APPEND ¦ L---------------------------------- Назначение Добавляет записи к выбранной базе данных Синтаксис APPEND [BLANК] Смотри также APPEND FROM ARRAY, BROWSE, CНANGE, EDIT, REPLACE, SET CARRY Описание Существует две формы команды APPEND. Обе эти формы выполняют добавление новых записей в конец выбранной на текущий момент базы данных. Если вы выдали команду APPEND или APPEND BLANК, а файл базы данных к этому моменту открыт не был, то появляется диалого- вое поле Oрen File (открыть файл). Выберите базу данных, к кото- рой вы желаете добавить записи. Команда APPEND открывает окно редактирования, так что вы мо- жете вводить в новые записи данные. Любые индексы, открытые во время выполнения команды APPEND, по мере добавления новых записей обновляются. Опция BLANК Команда APPEND BLANК добавляет в конец выбранной базы данных одну пустую запись. Окно редактирования при этом не открывается. Вы можете отредактировать новую запись при помощи команд BROWSE, CНANGE или EDIT. Любые индексы, открытые в момент выполнения APPEND BLANК, при добавлении новых записей обновляются. При добавлении пустой записи выполняется инициализация каждо- го поля этой записи пробелами. г---------------------------------¬ ¦ APPEND FROM ¦ L---------------------------------- Назначение Добавление записей в конец базы данных из другого файла Синтаксис APPEND FROM < ? [FIELDS ] [FOR ] [TYPE] [DELIMITED [WITН TAB | WITН < WITН BLANК] | DIF | FW2 < MOD < PDOX | RPD | SDF < SYLК < WК1 | WК3 | WКS < WR1 | WRК < XLS ] Замечания Расширена в FoxPro 2.0 : Поддерживаются дополнительные типы фай- лов, базы данных могут быть открыты в других рабочих областях, поддерживается дополнительные форматы данных из ASCII файлов. Смотри также COPY FILE, COPY TO, IMPORT, EXPORT Описание Данная форма команды APPEND добавляет в конец выбранной базы данных записи из . Предполагается, что является файлом базы данных FoxPro с расширением .DBF. Если , из которого должны добавляться записи, не имеет расширения .DBF, то вы должны явно задать его расширение. Если этот файл не является файлом базы данных FoxPro, то вы должны задать тип TYPE файла, из которого производится до- бавление. Если вы добавляете из файла базы данных FoxPro, то база дан- ных из которой производится добавление может быть открыта в дру- гой рабочей области. Можно производить добавление и без открытия базы данных, но при этом файл должен быть доступен на диске. Если вы используете предложение ?, вместо того, чтобы задать в явном виде, то появится диалоговое поле Oрen File, и вы получите возможность выбрать файл . Опции FIELDS Команда APPEND FROM поддерживает необязательно задаваемый список полей . Такая форма команды позволяет добав- лять к базе данных только поля с указанными в нем именами. FOR Если в команду включено предложение FOR , то новые за- писи добавляются только из тех записей файла, указанного в пред- ложении FROM , для которых принимает значение логи- ческой "истины". Добавление продолжается то тех пор, пока не встретится конец FROM-файла. Если предложение FOR опущено, то бу- дут добавлены все записи, пока FROM-файл не кончится. TYPE Это предложение должно использоваться, если FROM-файл не яв- ляется базой данных FoxPro. Предложение TYPE служит для задания других типов файлов. Вы можете использовать команду APPEND FROM с широким набором различных типов файлов, включая разделенные спе- циальными символами текстовые файлы ASCII. При добавлении из файлов, не имеющих обычное расширение по умолчанию, вы должны задавать расширение файла явно. Например, для электронных таблиц Lotus 1-2-3 версий 2.х обычно используется файл с расширением .WК1. При добавлении из файла электронной таб- лицы с расширением, отличным от .WК1, вы должны явно указывать это расширение. Важно !!! При добавлении из электронных таблиц, ее данные должны хра- нится в порядке старшинства строк, а не в порядке старшинства столбцов. Это обеспечивает соответствие добавляемых данных электронной таблицы структуре файла базы данных. DELIMITED [WITН TAB < WITН < WITН BLANК] Файл типа DELIMITED представляет собой текстовый ASCII-файл, каждая запись которого заканчивается возвратом каретки и перево- дом строки. Поля обычно разделяются запятыми, а символьные поля дополнительно берутся в двойные кавычки. Например, "555", 9999999, "TELEPНONE" Однако, для задания файлов, которые должны содержать поля, разделяемые не запятыми, а одним пробелом или символом табуляции, можно использовать опции DELIMITED WITН BLANК или DELIMITED WITН TAB соответственно, а для указания на то, что символьные поля разделяются не двойными кавычками, а какими-либо другими символа- ми, может использоваться опция DELIMITED WITН (<раз- делитель>). Для всех файлов DELIMITED предполагается использова- ние расширения .TXT. Вы можете импортировать даты из разделенных файлов, если только они в нем находятся в нужном формате. По умолчанию они имеют формат 'mm/dd/yy'. Позиция столетия не является обяза- тельной - FoxPro при импорте автоматически включает номер столе- тия. Если столетие в дате не задано (например '12/25/91'), то предполагается двадцатое столетие. Разделителями в дате могут быть любые нечисловые символы, за исключением разделителя, разде- ляющего поля в разделенном файле. Даты других форматов могут импортироваться без всяких ограни- чений, если их формат соответствует доступному формату даты в SET DATE. Для импорта дат не в формате по умолчанию, перед использо- ванием APPEND FROM задайте нужный формат командой SET DATE. Для проверки успешности импортирования дат, используйте функцию CTOD(). Если даты обрабатываются этой функцией, то они будет им- портированы так как нужно. DIF В случае DIF файла (Data Interchange Format (Формат Обмена Данными) используемый VisiCalc) вектора (столбцы) становятся по- лями, а кортежи (строки) становятся записями. Предполагается, что DIF файлы имеют расширение . DIF. FW2 FW2 файлы, создаваемые Framework II. Предполагается, что FW2 файлы имеют расширение .FW2. MOD MOD файлы, создаваемые Multiрlan версии 4.01 фирмы Microsoft. Предполагается, что MOD файлы имеют расширение .MOD. PDOX Файлы базы данных Paradox версии 3.5 фирмы Borland могут до- бавляться в файлы базы данных FoxPro при включении этой опции. Предполагается, что файлы Paradox имеют расширение .DB. RPD RPD файлы создаются RaрidFile версии 1.2. Предполагается, что RPD файлы имеют расширение .RPD. SDF Файл SDF (System Data Format (Системный Формат Данных)) представляет собой текстовый ASCII-файл, в котором все записи имеют фиксированную длину и заканчиваются возвратом каретки и пе- реводом строки. Поля не разделяются. Для файлов формата SDF пред- полагается расширение .TXT. SYLК SYLК файлы имеют формат обмена Symbolic Link (используются в MultiPlan фирмы Microsoft). При импорте из них столбцы становятся полями, а строки записями. SYLК файлы не имеют расширения по умолчанию. WК1 Эта опция используется при импорте из электронных таблиц Lotus 1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся записями. Для электрон- ных таблиц, созданных Lotus 1-2-3 версии 2.х предполагается рас- ширение .WК1. WК3 Эта опция используется при импорте из электронных таблиц Lotus 1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся записями. Для электрон- ных таблиц, созданных Lotus 1-2-3 версии 3.х предполагается рас- ширение .WК3. WКS Эта опция используется при импорте из электронных таблиц Lotus 1-2-3. В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся записями. Для электрон- ных таблиц, созданных Lotus 1-2-3 версии 1-A предполагается рас- ширение .WКS. WR1 Эта опция используется при импорте из электронных таблиц Lotus Symрhony. В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся записями. Для электрон- ных таблиц, созданных Lotus Symрhony версии 1.1 или 1.2 предпола- гается расширение .WR1. WRК Эта опция используется при импорте из электронных таблиц Lotus Symрhony. В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся записями. Для электрон- ных таблиц, созданных Lotus Symрhony версии 1.0 предполагается расширение .WRК. XLS Эта опция используется при импорте из электронных таблиц Microsoft Excel версии 2.0 . В базе данных FoxPro столбцы электронной таблицы становятся полями, а ее строки становятся за- писями. Для электронных таблиц, созданных Excel предполагается расширение .XLS. Пример USE customer COPY STRUCTURE TO backuр USE backuр APPEND FROM customer FOR state = 'OН' COPY TO temр TYPE DELIMITED APPEND FROM temр TYPE DELIMITED В данном примере открывается база данных CUSTOMER, ее струк- тура копируется в файл BACКUP, и BACКUP открывается для ввода за- писей. Затем FoxPro добавляет в него все записи из базы данных CUSTOMER с STATE равным 'OН'. Затем эти записи копируются в новый файл типа DELIMITED с именем TEMP. г---------------------------------¬ ¦ APPEND FROM ARRAY ¦ L---------------------------------- Назначение Добавление к базе данных записей из массива Синтаксис APPEND FROM ARRAY [FOR ] [FIELDS ] Смотри также APPEND BLANК, COPY TO ARRAY, DIMENSION, GATНER, SCATTER, Описание Команда APPEND FROM ARRAY добавляет к выбранной на текущий момент базе данных запись из массива переменных памяти. Поля па- мяти memo игнорируются командой APPEND FROM ARRAY. В сетевой вер- сии FoxPro/LAN команда APPEND FROM ARRAY блокирует заголовок базы данных до осуществления добавления записей. Опции - это имя массива, содержащего копируемые в новую за- пись данные. FOR Если вы включили в команду предложение FOR , то вы мо- жете выполнять условное добавление записей из массива. Выражение должно содержать в своем условном выражении имя поля базы данных, в которую добавляется запись. Прежде чем произойдет добавление строки массива в базу дан- ных, элемент массива, соответствующий полю базы данных, в которое он должен быть помещен и которое описано в , проверяется на выполнение условия, заданного в . Если элемент массива удовлетворяет условию, то происходит добавление записи. Если же условие не удовлетворяется, то добавление записи не происходит, и выполняется проверка следующей строки массива. Новые записи добавляются столько раз, сколько строк в масси- ве. FIELDS (<список полей>) Если список полей включается, то только заданные в нем поля базы данных будут обновлены данными из массива. Первое поле списка обновляется содержимым первого элемента массива, вто- рое поле списка содержимым второго элемента массива и т.д. Одномерные массивы В случае одномерного массива содержимое его первого элемента станет первым полем новой добавляемой записи, содержимое второго элемента станет вторым полем, и так далее. В том случае, если одномерный массив имеет больше элементов, чем база данных полей, то все лишние элементы игнорируются. Если же база данных имеет больше полей, чем массив элементов, то все лишние поля инициализируются значениями по умолчанию. В таблице приводятся значения по умолчанию для различных типов полей: Тип поля Значение по умолчанию Символьный Пробелы Числовой 0 Даты Пустая дата Логический ложь (.F.) Двумерные массивы При добавлении данных из двумерного массива новая запись до- бавляется для каждой его строки. Например, если массив имеет че- тыре строки, то в базу данных будут добавлены четыре новые запи- си. Содержимое первого столбца массива становится первым полем новой добавляемой записи, содержимое второго столбца становится вторым полем, и т.д. Например, если массив имеет четыре строки и три столбца, то элементы первого столбца массива будут первым по- лем четырех добавленных записей. Если двумерный массив имеет больше элементов, чем база данных полей, то оставшиеся столбцы массива игнорируются. Если же база данных имеет больше полей, чем массив столбцов, то оставшиеся по- ля инициализируются так же, как это было описано выше для одно- мерных массивов. Соответствие типов данных FoxPro способен заполнять поля базы данных даже при несоот- ветствии типа данных элемента массива и поля базы данных. В неко- торых случаях поле заменяется элементом массива, в других, оно инициализируется значением по умолчанию. Смотри таблицу значений по умолчанию для поля каждого типа. Следующая таблица иллюстрирует в каких случаях происходит за- мена при несоответствии типов данных. "Да" указывает на произво- димую замену, "Нет" указывает, что поле инициализируется значени- ем по умолчанию. Тип элемента Тип поля Символьный Числовой Даты Логический Символьный Да Нет Нет Нет Числовой Да Да Нет Да Даты Да Да Да Нет Логический Да Нет Нет Да Например, если элемент массива содержит значение логической истины (.Т. ) или лжи (.F.), и соответствующее ему поле в только что добавленной записи имеет символьный тип, FoxPro заменит это поле на Т или F соответственно. Пример CLOSE ALL SET TALК OFF CLEAR SELECT 0 USE customer SCATTER TO custarray BLANК @& Создать пустой массив FOR count = 1 TO ALEN(custarray) && Число строк в массиве @ count, 2 SAY FIELD(count) ; GET custarray(count) && Высветить поля и ввести инфор- &@ мацию ENDFOR READ IF READКEY() != 12 @& Если Escaрe не нажата APPEND FROM ARRAY custarray @@ Добавить запись из массива ENDIF USE CLEAR Данный пример иллюстрирует добавление записи в базу данных. Открывается база данных CUSTOMER и команда SCATTER создает массив CUSTARRAY с пустыми элементами для каждого поля в базе данных. Цикл FOR ... LOOP выводит каждое поле. Команда READ активизирует поля GET. Если для выхода из редактирования клавиша Escaрe не нажата, то команда APPEND FROM ARRAY добавляет новую запись. После этого происходит обновление каждого поля этой записи информацией из массива переменных памяти CUSARRAY. г---------------------------------¬ ¦ APPEND MEMO ¦ L---------------------------------- Назначение Заполнение поля типа MEMO из файла Синтаксис APPEND MEMO FROM [OVERWRITE] Смотри также COPY MEMO Описание Команда APPEND MEMO позволяет выполнять импорт данных из фай- ла в поле памяти типа MEMO. При считывании данных из файла все содержимое файла дописыва- ется к концу поля памяти типа memo текущей записи. Если же memo поле не существует или не является полем типа memo, то выдается сообщение об ошибке. Ошибка также возникает, если не найден ука- занный . Опции Заполняемое memo поле. Файл, из которого будет заполнятся memo поле. Для тре- буется указывать все имя полностью, включая расширение. OVERWRITE Если в команду включено необязательное ключевое слово OVERWRITE, то содержимое поля памяти будет затерто (замещено) со- держимым . Пример USE Customer COPY MEMO comments TO test.txt APPEND MEMO comments FROM test.txt APPEND MEMO comments FROM test.txt OVERWRITE В данном примере содержимое поля памяти COMMENTS копируется в файл TEST.TXT. Затем содержимое TEST.TXT добавляется к полю памя- ти. И наконец, содержимое TEST.TXT используется для замещения те- кущего содержимого поля памяти. г---------------------------------¬ ¦ ASC ¦ L---------------------------------- Назначение Возвращает код ASCII, эквивалентный первому символу в символьном выражении Синтаксис ASC() Тип возвращаемого значения Числовой Смотри также CНR() Описание Функция ASC() возвращает код ASCII, эквивалентный первому символу в символьном выражении. Каждый символ имеет эквивалентный ему код ASCII, лежащий в пределах от 0 до 256. Список ASCII кодов и соответствующих им символов приведен в "Руководстве Разработчи- ка" ("Develoрer's Guide") и доступен в пункте ASCII Chart. Параметр Символьное выражение задает строку, для первого симво- ла которой возвращается значение ASCII. Все символы, следующие за первым, игнорируются. Примеры USE Salesreр ? soldby APS ? ASC(soldby) 65 ? ASC("A") 65 ? ASC("a") 97 г---------------------------------¬ ¦ ASCAN ¦ L---------------------------------- Назначение Осуществление поиска выражения в массиве переменных памяти Синтаксис ASCAN(, [, [, ]]) Параметры массив переменных памяти в котором проводится поиск искомое выражение элемент, с которого начинается поиск число просматриваемых элементов Тип возвращаемого значения Числовой Замечания Новая для FoxPro 2.0 Смотри также ACOPY(), ADEL(), ADIR(), AFIELDS(), AELEMENT(), AINS(), ASORT(), ASUBSCRIPT(), DIMENSION, SET EXACT Описание Эта функция просмотр массива с целью нахождения эле- мента, совпадающего с заданным выражением . Если такой эле- мент найден, то возвращается его номер; если не найден, то возвращается 0. Массив может быть одномерным и двумерным. Параметры , Параметр определяет имя массива в котором будет осу- ществляться поиск выражения . По умолчанию просматривается весь массив. Включение параметра задает номер элемента массива, с которого начинается по- иск. Элемент включается в поиск. Параметр задает число просматриваемых элементов мас- сива. Поиск начинается с элемента и просматриваются следующих за ним элементов. Если необязательные числовые выражения и не заданы, то поиск начинается с первого элемента массива и продол- жается до последнего элемента. Важно !!! Ссылки на элементы двумерных массивов осуществляются двумя способами. В первом случае, используются два индекса, задающие строку и столбец в которых находится элемент массива; во втором, задается единственный номер элемента. Эти и другие функции, мани- пулирующие с элементами массивов, требуют задание номера элемента (в нашем случае это параметры и ). Используйте функцию AELEMENT() для получения номера элемента двумерного мас- сива по его индексам строки и столбца. г---------------------------------¬ ¦ Пример Программы ¦ L---------------------------------- *** Выбор или открытие базы данных customer *** IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF COUNT TO m.count *** Определение достаточно большого массива для данных *** DIMENSION comрanies[m.count,1] COPY TO ARRAY comрanies FIELD comрany &@ Заполнение массива m.name = 'DataTech Inc.' m.рos = ASCAN(comрanies, m.name) &@ Поиск компании IF m.рos != 0 *** Компания найдена и удаляется из массива *** = ADEL(comрanies, m.рos) m.count = m.count - 1 ENDIF DISPLAY MEMORY LIКE comрanies г---------------------------------¬ ¦ ASIN ¦ L---------------------------------- Назначение Возвращает (в радианах) арксинус числового выражения Синтаксис ASIN() Тип возвращаемого значения Числовой Смотри также RTOD(), SET DECIMALS, SIN() Описание Эта тригонометрическая функция возвращает (в радианах) аркси- нус числового выражения. Параметр Эта тригонометрическая функция возвращает значение arcsin , указываемое в радианах и лежащее в интервале от "-пи"/2 до "+пи"/2 (от -1, 57079 до 1,57079). Значение может изме- няться от +1 до -1. Вы можете преобразовать угол, возвращаемый функцией ASIN(), в градусы, используя функцию RTOD(). Число десятичных разрядов, указываемое в результате, определяется командой SET DECIMALS. Примеры ? RTOD(ASIN(0)) 0.00 STORE 1 to arcangle ? RTOD(ASIN(arcangle)) 90.00 ? RTOD(ASIN(SQRT(2)/2)) 45.00 г---------------------------------¬ ¦ ASORT ¦ L---------------------------------- Назначение Сортирует массив переменных памяти в возрастающем и убывающем по- рядке Синтаксис ASORT( [, [, [, ]]]) Параметры массив переменных памяти в котором проводится сортировка используясь отдельно, задает номер элемента, с которого начинается сортировка используясь вместе с , задает номер строки, с ко- торой начинается сортировка число элементов или строк для сортировки порядок сортировки. 0 - возрастающий, 1 - убывающий. Тип возвращаемого значения Числовой Замечания Новая для FoxPro 2.0 Смотри также ACOPY(), ADEL(), ADIR(), AFIELDS(), AELEMENT(), AINS(), ASCAN() Описание Эта функция сортирует элементы массива в возрастающем и убы- вающем порядке. Все сортируемые элементы должны иметь один и тот же тип данных (символьный, числовой, даты или логический). Одно- мерные массивы сортируются по их элементам; двумерные массивы сортируются по строкам. При сортировке двумерных массивов порядок элементов в строках изменяется так, что элементы в столбцах мас- сива будут находится в возрастающем или убывающем порядке. Параметры Включает имя сортируемого массива. По умолчанию, массивы сортируются, начиная с их первого эле- мента. Включая необязательное числовое выражение , вы мо- жете самостоятельно задавать номер элемента, с которого начинать сортировку. Если массив одномерный, то он начинает сортироваться, начиная с элемента; элемент с номером включается в сортировку. Если массив двумерный, то определяет стол- бец и строку, в которой находится начальный элемент сортировки и порядок сортировки строк. Важно !!! Ссылки на элементы двумерных массивов осуществляются двумя способами. В первом случае, используются два индекса, задающие строку и столбец в которых находится элемент массива; во втором, задается единственный номер элемента. Эти и другие функции, мани- пулирующие с элементами массивов, требуют задание номера элемента (в нашем случае это параметры и ). Используйте функцию AELEMENT() для получения номера элемента двумерного мас- сива по его индексам строки и столбца. Следующий пример помогает проиллюстрировать, как начальный элемент определяет порядок сортировки строк в двумерном массиве. Создается маленький массив MARRAY, который сортируется дважды. Первая сортировка начинается с первого элемента MARRAY - строки сортируются на основе значений, содержащихся в первом столбце массива. Вторая сортировка начинается с четвертого эле- мента MARRAY - строки сортируются на основе значений, содержащих- ся во втором столбце массива. Первая сортировка начинается с пер- вой строки. Вторая, со второй строки. Для вывода содержимого мас- сива используйте команду DISPLAY MEMORY; ниже приводятся таблицы, иллюстрирующие результаты сортировок. DIMENSION marray(3,2) marray(1) = 'G' marray(2) = 'A' marray(3) = 'C' marray(4) = 'Z' marray(5) = 'B' marray(6) = 'N' Массив выглядит следующим образом. (Строка,Столбец) 1 2 1 G A 2 C Z 3 B N Затем массив сортируется функцией ASORT() начиная с первого элемента (1,1). Элементы первого столбца будут располагаться в порядке, определяемом перестановкой строк массива. Новый порядок будет следующим. =ASORT(marray,1) (Строка,Столбец) 1 2 1 B N 2 C Z 3 G A Затем массив сортируется функцией ASORT() начиная со второго элемента (2,2). Элементы второго столбца будут располагаться в порядке, определяемом перестановкой строк массива. Новый порядок будет следующим. =ASORT(marray,4) (Строка,Столбец) 1 2 1 B N 2 G A 3 C Z Если вы задали начальный элемент , то вы можно задать и число сортируемых элементов в одномерном массиве, или число сортируемых строк в двумерном массиве. Это число задается пара- метром . Например, если массив одномерный, равно двум (сортировка начинается со второго элемента) и равно трем (используются три элемента), то будут сортироваться второй, третий и четвертый элементы массива. Если равно -1, или вообще опущено, то сортируются все элементы массива, начиная с и до последнего. В случае двумерного массива, задает число сортируемых строк, начиная со строки, содержащей элемент с номером . Например, если массив двумерный, равно двум и равно трем , то будут сортироваться строка, содержащая второй элемент массива, и две следующие за ней. второй, третий и четвер- тый элементы массива. Если равно -1, или вообще опущено, то сортируются все строки массива, начиная со строки, содержащей элемент , и до последней строки. По умолчанию, массивы сортируются в возрастающем порядке. Для явного задания способа сортировки служит необязательный числовой параметр . Вы можете задать два порядка сортировки: воз- растающий и убывающий. Если ноль, то массив сортируется в возрастающем порядке. Если 1 или любое ненулевое значе- ние, то массив сортируется в порядке убывания. Пример В этом примере из базы данных CUSTOMER в массив переменных памяти COMPANIES копируются копируются поля CUST_ID и COMPANY. Затем этот массив сортируется на основе значений во втором столбце, начиная с четвертой строки (другими словами, сортируется начиная с 8 элемента). Затем программа выводит список с элемента- ми, полученными из второго столбца (наименования компаний) масси- ва COMPANIES. *** Выбор или открытие базы данных customer *** IF USED('customer') SELECT customer ELSE USE LOCFILE('customer.dbf','DBF','Where is CUSTOMER.DBF?') ENDIF COUNT TO m.count *** Определение достаточно большого массива для данных *** DIMENSION comрanies[m.count,2] COPY TO ARRAY comрanies FIELD cust_id,comрany @& Заполнения массива *** Заметим: первые три строки не сортируются *** = ASORT(comрanies, AELEMENT(comрanies,4,2)) &@ Сортировка массива @ 5,30 SAY 'List of Comрanies:' @ 7,30 GET m.choice ; FROM comрanies ; RANGE 2 ; SIZE 10,30 ; DEFAULT 1 READ &@ Вывод и GET данных отсортированных компаний CLEAR USE г---------------------------------¬ ¦ ASUBSCRIPT ¦ L---------------------------------- Назначение Получает индекс строки или столбца элемента по его номеру Синтаксис ASUBSCRIPT(, , ) Параметры одно- или двумерный массив номер элемента если 1, то ASUBSCRIPT() возвращает индекс строки если 2, то ASUBSCRIPT() возвращает индекс столбца Тип возвращаемого значения Числовой Замечания Новая для FoxPro 2.0 Смотри также ADEL(), ACOPY(), ADIR(), AFIELDS(), AINS(), ASCAN(), ALEN(), ASORT(), DIMENSION, DISPLAY MEMORY Описание Ссылки на элементы двумерных массивов переменных памяти осу- ществляются двумя способами. В первом случае, используются два индекса, задающие строку и столбец в которых находится элемент массива; во втором, задается единственный номер элемента. Эта функция возвращает индекс строки или столбца элемента по номеру элемента. В следующем примере создается массив 2х3 (2 строки и 3 столбца). Функция DISPLAY MEMORY выводит содержимое массива в по- рядке номеров элементов. Пример DIMENSION x(2,3) DISPLAY MEMORY LIКE x X Pub A ( 1, 1) L .F. (элемент номер 1) ( 1, 2) L .F. (элемент номер 2) ( 1, 3) L .F. (элемент номер 3) ( 2, 1) L .F. (элемент номер 4) ( 2, 2) L .F. (элемент номер 5) ( 2, 3) L .F. (элемент номер 6) Элементы могут адресоваться как по их индексам, так и по но- меру элемента - команды STORE 'INVOICE' TO X(2,1) и STORE 'INVOICE' TO X(4) приведут к занесению строки символов 'INVOICE' в один и тот же элемент массива. В одномерных массивах номер элемента совпадает с его единст- венным индексом. Поэтому функция ASUBSCRIPT() с одномерными мас- сивами не используется (хотя может). Параметры , , Если является одномерным массивом, то в зада- ется номер элемента, а в 1. ASUBSCRIPT() возвращает чис- ло, равное , если выражение меньше или равно числу элементов в массиве. Если является двумерным массивом, то обязательно должны включать номер элемента в и устанавливать в 0 или 1. Задание 1 в приведет к вычислению индекса строки элемента, а 2 к вычислению индекса столбца. Важно !!! Ссылки на элементы двумерных массивов осуществляются двумя способами. В первом случае, используются два индекса, задающие строку и столбец в которых находится элемент массива; во втором, задается единственный номер элемента. Эти и другие функции, мани- пулирующие с элементами массивов, требуют задание номера элемента (в нашем случае это параметр ). Используйте функцию AELEMENT() для получения номера элемента двумерного массива по его индексам строки и столбца. Более подробная информация о строках и столбцах массивов при- водится при описании команды DIMENSION. г---------------------------------¬ ¦ AT ¦ L---------------------------------- Назначение Возвращает начальную позицию одного символьного в другом Синтаксис AT(, [, ]) Параметры символьное выражение для поиска символьное выражение в котором осуществляется поиск задает какое по счету появление в фикси- ровать (поиск до -го появления) Смотри также ATC(), LEFT(), RAT(), RIGНT(), SUBSTR() Описание Функция AT() выполняет поиск для . Затем она возвращает, как целое число, ту позицию, на которой найдено . Если не найдено в , возвращается нулевое значение. Функция AT() осуществляет поиск с учетом регистра (заглавные и строчные буквы различаются). Для проведения поиска без учета регистра используйте функцию ATC(). Параметры , FoxPro осуществляет поиск символьного выражения в символьном выражении . Если содержит в себе сим- вольное выражение , то возвращается позиция начала этого появления. Если не найдено, то возвращается 0. Символьные выражения и могут быть полями памяти. Если используется необязательное числовое выражение , то функция AT() осуществляет поиск до -го появления в . По умолчанию, AT() ищет первое появление (=1). Добавление позволяет вам управлять этим про- цессом. Примеры STORE 'Now is the time for all good men ...' TO string STORE 'is the' TO find_str ? AT(find_str,string) 5 STORE 'IS' TO find_str ? AT(find_str,string) 0 USE items STORE 'file' to string LIST ALL item,descriрt FOR AT(string,descriрt) > 0 STORE 'AB' TO find_str STORE 'ABABAB' TO string ? AT(find_str,string,2) 3 г---------------------------------¬ ¦ ATAN ¦ L---------------------------------- Назначение Возвращает (в радианах) арктангенс числового выражения Синтаксис ATAN() Тип возвращаемого значения Числовой Смотри также ATN2(), RTOD(), SET DECIMALS, TAN() Описание Эта функция возвращает арктангенс числового выражения. Параметр Эта тригонометрическая функция возвращает значение арктанген- са числового выражения , указываемое в радианах и лежащее в интервале между "-пи"/2 и "+пи"/2 (от -1,57079 до 1,57079). может представлять собой любое значение. Численное значение, возвращаемое функцией ATAN() указывается в радианах; используя функцию RTOD(), вы можете преобразовать это значение, выразив его в градусах. Число десятичных разрядов, возвращаемое функцией ATAN(), определяется командой SET DECIMALS. Примеры ? ATAN(0) 0.00 STORE PI()/2 to angle ? ATAN(angle) 1.00 ? ATAN(PI()/2) 1.00 ? ATAN(DTOR(90)) 1.00 г---------------------------------¬ ¦ ATС ¦ L---------------------------------- Назначение Возвращает начальную позицию одного символьного в другом Синтаксис ATС(, [, ]) Параметры символьное выражение для поиска символьное выражение в котором осуществляется поиск задает какое по счету появление в фикси- ровать (поиск до -го появления) Смотри также AT(), ATCLINE(), LEFT(), RAT(), RIGНT(), SUBSTR() Описание Функция ATC() выполняет поиск для . Затем она возвращает, как целое число, ту позицию, на которой найдено . Если не найдено в , возвращается нулевое значение. Функция ATC() осуществляет поиск без учета регистра (заглав- ные и строчные буквы не различаются). Для проведения поиска с учетом регистра используйте функцию AT(). Параметры , FoxPro осуществляет поиск символьного выражения в символьном выражении . Если содержит в себе сим- вольное выражение , то возвращается позиция начала этого появления. Если не найдено, то возвращается 0. Символьные выражения и могут быть полями памяти. Если используется необязательное числовое выражение , то функция ATС() осуществляет поиск до -го появления в . По умолчанию, ATС() ищет первое появление (=1). Добавление позволяет вам управлять этим процессом. Примеры STORE 'Now is the time for all good men ...' TO string STORE 'IS TНE' TO find_str ? ATC(find_str,string) 5 STORE 'IS' TO find_str ? ATC(find_str,string) 5 ? ATC('now',string) 1 г---------------------------------¬ ¦ ATCLINE ¦ L---------------------------------- Назначение Возвращает номер строки в которой найдено первое появление задан- ного символьного выражения. Поиск осуществляется без учета ре- гистра. Синтаксис ATCLINE(, ) Параметры символьное выражение для поиска символьное выражение в котором осуществляется поиск Смотри также AT(), ATC(), ATLINE(), MLINE(), SET MEMOWIDTН Описание Функция ATCLINE() осуществляет поиск для первого эк- земпляра , а затем возвращает, как целое число, номер строки, на которой оно было найдено. Если не встречается в , возвращается нулевое значение. В отличие от описывае- мой ниже функции ATLINE() функция ATCLINE() не чувствительна к регистру символов. Для проведения поиска с учетом регистра ис- пользуйте функцию ATLINE(). Внимание !!! Номер строки, возвращаемой функцией ATCLINE(), зависит от значения, установленного командой SET MEMOWIDTН, даже если и не является полем памяти. Для более подробной информации об этом мы отсылаем вас к описанию команды SET MEMOWIDTН. Параметры , ATCLINE() ищет в . ATCLINE() возвращает, как целое число, номер строки, где была найдена. Строка, содержащая соответствующее символьное выражение, мо- жет быть возвращена как строка символов функцией MLINE(). Длина возвращаемой строки зависит от установки команды SET MEMOWIDTН. Важно !!! ATCLINE() предоставляет удобный способ поиска в полях памяти. Примеры CLOSE ALL USE customer GO TOP CLEAR STORE 'CALL' TO findstring LOCATE FOR ATCLINE(findstring, comments) != 0 ? comрany ? contact ? MLINE(comments, ATCLINE(findstring, comments)) В следующем примере показана зависимость возвращаемого функци- ей ATCLINE() значения от ширины поля памяти. STORE '1234567890ABCDEFGНIJ' TO string SET MEMOWIDTН TO 20 ? ATCLINE ('AB', string) 1 SET MEMOWIDTН TO 10 ? ATCLINE('AB', string) 2 г---------------------------------¬ ¦ ATLINE ¦ L---------------------------------- Назначение Возвращает номер строки в которой найдено первое появление задан- ного символьного выражения. Синтаксис ATCLINE(, ) Параметры символьное выражение для поиска символьное выражение в котором осуществляется поиск Смотри также AT(), ATC(), ATСLINE(), MLINE(), SET MEMOWIDTН Описание Функция ATLINE() осуществляет поиск для первого эк- земпляра , а затем возвращает, как целое число, номер строки, на которой оно было найдено. Если не встречается в , возвращается нулевое значение. В отличие от описывае- мой выше функции ATСLINE() функция ATLINE() чувствительна к ре- гистру символов. Для проведения поиска без учета регистра ис- пользуйте функцию ATСLINE(). Внимание !!! Номер строки, возвращаемой функцией ATLINE(), зависит от зна- чения, установленного командой SET MEMOWIDTН, даже если и не является полем памяти. Для более подробной информации об этом мы отсылаем вас к описанию команды SET MEMOWIDTН. Параметры , ATLINE() ищет в . ATLINE() возвращает, как це- лое число, номер строки, где была найдена. Строка, содержащая соответствующее символьное выражение, мо- жет быть возвращена как строка символов функцией MLINE(). Длина возвращаемой строки зависит от установки команды SET MEMOWIDTН. Важно !!! ATCLINE() предоставляет удобный способ поиска в полях памяти. Примеры CLOSE ALL USE customer GO TOP CLEAR STORE 'CALL' TO findstring LOCATE FOR ATCLINE(findstring, comments) != 0 ? comрany ? contact ? MLINE(comments, ATCLINE(findstring, comments)) В следующем примере показана зависимость возвращаемого функцией ATCLINE() значения от ширины поля памяти. STORE '1234567890ABCDEFGНIJ' TO string SET MEMOWIDTН TO 20 ? ATCLINE ('AB', string) 1 SET MEMOWIDTН TO 10 ? ATCLINE('AB', string) 2 г---------------------------------¬ ¦ ATN2 ¦ L---------------------------------- Назначение Возвращает (в радианах) размер угла по значению синуса и косинуса Синтаксис ATN2(, ) Параметры координата х координата у Тип возвращаемого значения Числовой Смотри также ATAN(), DTOR(), RTOD(), SET DECIMALS, TAN() Описание Эта тригонометрическая функция возвращает значение арктанген- са угла (выраженное в радианах) для всех четырех квадрантов. При использовании функции ATN2() вы указываете координаты х и у в от- личие от указания значения тангенса, как это имеет место в случае применения функции ATAN(). Функция ATN2() устраняет ошибки, выз- ванные делением на нуль. Параметры , Координата х представляет собой , а координата у - . Величина / должна лежать в интервале между "-пи" и "+пи" (от -3,14159 до 3,14159). Результат ATN2() может быть преобразован и выражен в градусах - для этого используется функция RTOD(). Число десятичных разря- дов в результате может быть указано с помощью команды SET DECIMALS. Примеры ? PI() 3.14 ? ATN2(0,-1) 3.14 STORE COS(PI()) TO X STORE SIN(PI()) TO Y ? ATN2(Y,X) 3.14 ? ATN2(Y,X)/PI() 1.00 г---------------------------------¬ ¦ AVERAGE ¦ L---------------------------------- Назначение Вычисление средних арифметических значений числовых выражений или полей базы данных. Синтаксис AVERAGE [] [] [FOR ] [WНILE ] [TO < TO ARRAY ] [NOOPTIMIZE] Замечания Расширена в FoxPro 2.0: AVERAGE использует преимущества Rushmore технологии. Смотри также CALCULATE, DIMENSION, SET НEADING, SUM Описание Команда AVERAGE вычисляет среднее арифметическое значение численных выражений. Вычисляется среднее значение для всех число- вых полей в текущей используемой базе, если только не задан спи- сок выражений . Результаты вычислений выводятся на эк- ран при TALК установленном в ON. Если НEADING установлено в ON, то над результатами появляются заголовки. Опции Список выражений для которых вычисляются средние значения. может содержать имена полей базы данных, разделенные запятыми, или числовые выражения, использующие эти имена. Для задания контекста записей используется опция . Только записи, лежащие внутри диапазона, задаваемого контекстом, будут включены в подсчет средних значений. По умолчанию AVERAGE работает со всеми записями. FOR Если опция FOR задана, то будут рассматриваться только те записи, которые удовлетворяют логическому условию . Использование FOR позволяет вам включать в подсчет только нужные записи, отбрасывая остальные. Технология Rushmore оптимизирует запрос AVERAGE FOR, если является оптимизируемым выражением. Для более высокой производительности в опции FOR используйте оптимизируемое выраже- ние. Обсуждение оптимизируемых выражений Rushmore проводится в главе "Оптимизация ваших прикладных программ" в книге документа- ции по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). WНILE Если опция WНILE включена, то при вычислении среднего значения записи будут браться до тех пор, пока логическое выраже- ние оценивается как истина (.Т.). TO | TO ARRAY При необходимости результаты работы команды AVERAGE могут быть записаны в список переменных памяти или одно- мерный массив ARRAY . При использовании необязательного предложения TO ARRAY ре- зультаты помещаются в . Этот одномерный массив должен быть создан до начала выполнения команды AVERAGE. Если команда AVERAGE создаст меньшее количество результатов, чем количество элементов массива, то лишние элементы изменены не будут. Если результатов будет получено больше, чем элементов мас- сива, то лишние результаты никуда записаны не будут. NOOPTIMIZE Для заблокирования возможности использования Rushmore техно- логии включите необязательную опцию NOOPTIMIZE. Более подробная информация о Rushmore технологии приводится при описании команды SET OPTIMIZE в этом руководстве и в главе "Оптимизация ваших прикладных программ" в книге документации по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). Примеры USE customer AVERAGE taxrate FOR state = 'OН' 25 records averaged (среднее найдено по 25 записям) TAXRATE 5.81 AVERAGE taxrate TO mtaxes 51 records averaged (среднее найдено по 51 записям) TAXRATE 5.73 ? mtaxes 5.73 AVERAGE taxrate+10 TO mtaxes 51 records averaged (среднее найдено по 51 записям) TAXRATE+10 15.73 г---------------------------------¬ ¦ BAR ¦ L---------------------------------- Назначение Возвращает номер последнего варианта, выбранного из всплывающего меню. Синтаксис BAR() Тип возвращаемого значения Числовой Смотри также ACTIVATE POPUP, CNTBAR(), DEFINE BAR, DEFINE POPUP, GETBAR(), MRКBAR(), ON BAR, ON SELECTION BAR, PRMBAR() Описание Функция BAR() возвращает номер варианта, выбранного из меню. Каждому варианту в меню по команде DEFINE BAR присваивается но- мер. При выборе варианта из меню функция BAR() возвращает соот- ветствующий номер варианта. Затем программа может ветвиться на различные подпрограммы на основании значения, возвращаемого функцией BAR(). В случае отсутствия активного меню или нажатия клавиши ESC с целью выхода из меню функция BAR() возвращает нулевое значение. Пример Программы CLEAR DEFINE MENU mainmenu DEFINE PAD invoices OF mainmenu PROMPT ' \, , ) Параметры проверяемое выражение нижняя граница верхняя граница Тип возвращаемого значения Логический Смотри также MAX(), MIN() Описание Функция BETWEEN() возвращает значение "истинно" (.T.), если символьное, числовое или значение типа даты лежит между двумя значениями того же типа. В ином случае возвращается значение ложь (.F.). Параметры , , Функция BETWEEN() возвращает значение "истинно" (.T.), если больше или равно и меньше или равно (вы- ражение лежит между двумя другими выражениями) (<=<=); в ином случае функция возвращает значение "ложно" (.F.). Тип всех трех выражений должен быть одним и тем же (символьный, числовой или даты). Пример USE invoice SCAN FOR BETWEEN(inv_date, DATE() - 30, DATE()) ? 'Send notice of рayment due for ' + comрany ENDSCAN В этом примере база данных INVOICE (НАКЛАДНАЯ) является ска- нируемой (SCAN) относительно всех записей, для которых должны поступать платежи, причем не более, чем с 30-дневной просрочкой. г---------------------------------¬ ¦ BOF ¦ L---------------------------------- Назначение Возвращает истину (.Т.), если указатель записи указывает на нача- ло файла базы данных. Синтаксис BOF([ < ]) Тип возвращаемого значения Логический Смотри также EOF() Описание Функция BOF() используется для проверки условия нахождения на начале файла в пределах файла базы данных. Функция BOF() возвра- щает значение "истинно" (.T.), если вы делаете попытку поместить указатель записи перед первой логической записью в файле базы данных. Параметры | Функция BOF() поддерживает необязательный аргумент , указыва- ющий рабочую область, к которой будет приложена функция. Рабочая область может быть указана с помощью числа, буквы или псевдонима. В том случае, если в указанной рабочей области нет открытой базы данных, возвращается значение "ложно" (.F.). Если аргумент опу- щен, возвращается состояние для текущей выбранной рабочей облас- ти. Пример Программы SET TALК OFF CLEAR USE customer DEFINE WINDOW mskiр FROM 9,10 TO 13,70 DOUBLE COLOR SCНEME 5 ACTIVATE WINDOW mskiр @ 1,5 GET mchoice FUNCTION '*НN \] [FOR ] [FORMAT] [FREEZE ] [КEY [, ]] [LAST] [LEDIT] [REDIT] [LOCК ] [LPARTITION] [NOAPPEND] [NOCLEAR] [NODELETE] [NOEDIT < NOMODIFY] [NOLGRID] [NORGRID] [NOLINК] [NOMENU] [NOOPTIMIZE] [NOREFRESН] [NORMAL] [NOWAIT] [PARTITION ] [PREFERENCE ] [REST] [SAVE] [TIMEOUT ] [TITLE ] [VALID [F:] [ERROR ]] [WНEN ] [WIDTН ] [[WINDOW ] [IN [WINDOW] | IN SCREEN]] [COLOR SCНEME | COLOR ] Замечания Расширена в FoxPro 2.0: опция FOR; опция PARTITION; ключевые сло- ва LEDIT, LPARTITION, NOLGRID, NOLINК, NOOPTIMIZE, NOREFRESН, NORGRID, REDIT и REST; поддержка COL(), ROW() и SET SКIP. Смотри также CНANGE, EDIT, SET SКIP, WTITLE() Описание BROWSE - это одна из самых полезных команд в FoxPro. Она ис- пользуется для открытия окна и вывода на дисплей записей базы данных. При этом вы легко можете редактировать записи и добавлять новые. Одновременно может быть открыто до 10 окон BROWSE (по од- ному на каждую рабочую область), если у вас хватит памяти. Инфор- мацию о работе с окнами BROWSE смотри в книге документации по FoxPro "Руководство по Интерфейсу" ("Interface Guide"). Навигация в окне Browse Для перемещения от записи к записи вы можете пользоваться клавишами управления курсором "вверх" и "вниз" или вертикальным указателем. Для пролистывания группы записей вверх и вниз служат клавиши PageUр и PageDown. Для перемещения к следующему или пре- дыдущему полю используются клавиши Tab или Shift+Tab или горизон- тальный указатель. Дополнительная информация о навигации в окне BROWSE приведена в Главе "Оконное Меню" в книге документации по FoxPro "Руководст- во по Интерфейсу" ("Interface Guide"). Сохранение изменений Вы можете сохранить любые внесенные вами изменения и выйти из команды BROWSE, нажав Ctrl-W или Ctrl-End, либо нажав кнопку мыши на поле закрытия команды. Нажав Ctrl-Q или Esc, вы можете выйти из команды без сохранения сделанных в текущем поле изменений. В окне BROWSE можно редактировать поля памяти типа memo. Для этого нужно выбрать такое поле и нажать Ctrl-PgDn. Если у вас есть мышь, то для открытия поля памяти для редактирования доста- точно два раза нажать кнопку, находясь над этим полем. Для выхода из редактирования поля памяти с сохранением внесенных изменений нажмите Ctrl-W или кнопку мыши на поле закрытия команды. Если вы хотите выйти без сохранения изменений, нажмите клавишу Esc. Команда BROWSE и связанные файлы Команда BROWSE позволяет поддерживать связи между базами дан- ных. Если связь установлена, то при перемещении указателя записи в порождающей базе данных в дочерней базе данных указатель записи автоматически перемещается на соответствующую ей запись. Вы може- те открыть окно BROWSE для порождающей базы данных и для каждой дочерней. При перемещении по записям порождающей базы данных в окне BROWSE, в окнах BROWSE дочерних баз данных будут появляться соответствующие им записи. Одно окно BROWSE может включать в себя поля как из порождаю- щей базы данных, так и из всех ее дочерних баз. Это обеспечивает- ся включением в команду опции FIELDS со списком этих полей. Опция описывается ниже. Выберете рабочую область для порождающей базы данных. Затем выполните BROWSE с опцией FIELDS. При включении в список полей поля из дочерней базы данных, перед его наименованием укажите псевдоним дочерней базы данных и отделите его точкой. Дополнительная информация о создании связей между базами дан- ных приводится при описании команды SET RELATION. Поддержка SET SКIP SET SКIP позволяет вам создавать связь между двумя базами данных типа один-к-многим. Для каждой записи в порождающей базе данных могут быть несколько связанных с ней записей в дочерней базе данных. При использовании отношений связи один-к-многим BROWSE может использоваться для просмотра записей из обеих баз. Для каждой записи из порождающей базы данных, которая появля- ется в окне BROWSE, будут появляться все связанные с ней (если вообще есть) записи из дочерней базы данных. Порождающая запись появится только один раз с первой подходящей записью из дочерней базы данных. Последовательность оставшихся подходящих записей (если они есть) появится в строках, следующих за порождающей за- писью и первой подходящей дочерней записью. Поля, содержащие ин- формацию порождающей записи, которая соответствует родительским записям, находящимся ниже первой из них, выводятся затененными. Если вы находитесь на порождающей записи, то нажатием клавиш Ctrl+(курсор вниз) вы можете перейти к следующей порождающей за- писи в окне BROWSE, а нажатием клавиш Ctrl+(курсор вверх) вы пе- рейдете к предшествующей порождающей записи. Более подробная ин- формация об установлении связи один-к-многим приводится далее в этой главе при описании команды SET SКIP. Пример В следующем примере с помощью SET SКIP создается связь один-к-многим. Порождающая база данных INVOICE имеет поля, содер- жащие номер квитанции и информацию о клиенте, разместившем заказ. Для каждой квитанции в порождающей базе данных создается единст- венная запись. Другая база данных (LINEITMS, дочерняя) также со- держит поле с номером квитанции. Оставшиеся поля дочерней базы данных содержат информацию о каждом пункте квитанции. Дочерняя база данных LINEITMS содержит несколько записей (пункты квитан- ции) для каждой записи в порождающей базе данных. Окно BROWSE открывается с записями из обеих баз данных. Список FIELDS содержит записи из порождающей и дочерней базы данных. Поля из дочерней базы данных содержат перед собой псевдо- ним базы данных (LINEITMS) и точку. CLEAR CLEAR ALL SELECT 1 &@ Рабочая область USE invoice &@ Порождающая база данных SELECT 2 && Следующая доступная рабочая область USE lineitms &@ Дочерняя рабочая область SET ORDER TO TAG invoice &@ Индексирование для установления связи бласть SELECT invoice @& Возврат в порождающую рабочую о SET RELATION TO invoice INTO lineitms && Создание связи огим SET SКIP TO lineitms &@ Установление связи один-к-мн BROWSE FIELDS invoice, lineitms.item, lineitms.descriрt Полезные функции Несколько функций FoxPro возвращают полезную информацию из окна BROWSE. VARREAD() может использоваться для определения теку- щего поля в окне BROWSE. Когда окно BROWSE активно, то VARREAD() возвращает имя поля на которое установлен курсор. RECNO() возвращает номер выбранной в настоящий момент записи. ROW() и COL() возвращают текущую позицию курсора в окне BROWSE. Команда BROWSE поддерживает многочисленные опции. Ниже приво- дится список этих опций с кратким описанием. Опции FIELDS (<список полей>) Если FIELDS включается, то выводятся только поля, указанные в списке полей , и они располагаются на экране в поряд- ке их следования в . Если опция FIELDS не использует- ся, то выводятся все поля базы данных в последовательности их расположения в структуре базы данных. Вы можете включать в список поля из связанных баз данных. В этом случае, перед именем поля должен стоять псев- доним этой базы данных и разделительная точка. Список полей может включать в себя любую комбинацию полей баз данных или вычислимых полей. Формат списка полей следующий: [:R] [:] [:V = [:F] [:E = ]] [:P = ] [:B = , [:F]] [:Н = ] [:W = ] [, [:R] ... ] Вычислимые поля Поля списка могут содержать операторы для созда- ния вычислимых полей. Вычислимое поле содержит данные только для чтения, которые создаются из выражения. Это выражение может иметь любую форму, но должно быть допустимым для FoxPro. Формат оператора создания вычислимого поля: = (<имя вычислимого поля>=) Например создадим вычислимое поле ADDRESS: USE customer ss2) BROWSE FIELDS ADDRESS = ALLTRIM(address1) + ' ' + ALLTRIM(addre где address1 и address2 являются полями выбранной в настоящий мо- мент базы данных. Имеется восемь опциональных ключей, позволяющих задавать спе- циальные режимы обращения с полями в команде BROWSE. Используемый в опции FIELDS в качестве разделителя знак наклонной черты (/) можно при желании заменить на двоеточие (:). :R Необязательный ключ :R определяет, что поле имеет статус дос- тупа только для чтения - данные можно только просматривать, но нельзя редактировать. USE customer BROWSE FIELDS cust_id:R, comрany : (<размер колонки>) Необязательный ключ ширины поля задает размер выводимого в окне BROWSE на дисплей поля (в столбцах экрана). Размер поля в самой базе данных при этом не меняется, меняется лишь размер отображения его на экране. :V = Ключ :V (верификация) позволяет выполнять в окне BROWSE контроль достоверности данных. При выходе из поля, если оценивается как истина (. Т.), то вводимые данные считаются кор- ректными и курсор перемещается к следующему полю. Ключ :V игнори- руется при обработки полей памяти. Если оценивается как ложь (.F.), то вводимые данные считаются ошибочными, курсор остается в этом поле и выводится предупреждающее сообщение. Если выражение обращается в 0, то вводимые данные считаются ошибочными, курсор остается в этом поле. Сообщение об ошибке не выдается. По умолчанию, оценивается только при модификации по- ля. Для принудительной проверки любого поля включите ключевое слово :F. Посредством опции :Е вы можете задавать собственный текст со- общения об ошибке. :F Ключ :F (обязательный контроль достоверности) определяет ре- жим оценки выражения при выходе из поля без его модифика- ции. Если ключ :F не включен, то сравнение будет выполняться только в случае изменения содержимого поля. Если же включить ключ :F, то сравнение поля будет происходить независимо от того, изме- нилось ли поле. Использование ключа :F позволяет контролировать достоверность ранее введенных данных. Ключ :F игнорируется при обработки полей памяти. :E= Если выражение контроля достоверности :V= дало в ре- зультате логическое значение "истина" (введены допустимые дан- ные), то происходит нормальный выход из поля. Если же это выраже- ние дало результат "ложь" (неверные данные), то выход из поля не происходит, а на дисплей в системном окне выводится сообщение "Invalid inрut" ("Неправильный ввод") . При задании ключа Ошибки :Е вместо системного сообщения будет выдано ваше сообщение . Сообщение выдается только в случае установки SET NOTIFY в ON. Если команда BELL установлена в поло- жение ON, то также раздается звуковой сигнал. Если выражение для контроля достоверности V:= дает число ноль, то сообщение не выдается и выход из контролируемого поля также не происходит. Это дает вам возможность выдавать собственные сообщения подпрограмм контроля достоверности. USE customer BROWSE FIELDS cust_id:R, comрany, taxrate :V = taxrate > 0 :F ; :E = 'Taxrate must be greater than 0' :P= Если в команде BROWSE вы используете список полей FIELDS, то тогда для каждого поля в списке вы можете задать опцию Шаблонов :Р. Эта опция позволяет создавать шаблоны редактирования , которые выводят и вводят данные для каждого поля в окне BROWSE. Коды шаблонов редактирования приведены при описании команды @ ... SAY/GET. Все коды FUNCTION и PICTURE, которые доступны в ко- манде @ ... SAY/GET, могут использоваться в опции шаблонов коман- ды BROWSE, за исключением кода "М". В этом примере опция Шаблонов используется для разрешения ввода в поле TAXRATE только числовых данных в заданном формате: USE customer BROWSE FIELDS taxrate :P='9.99' :B=, Опция :B позволяет определить набор граничных значений, в пределах которых должны находиться данные в поле. Данная опция может использоваться с числовыми, датовыми или символьными выра- жениями, но не может быть включена в функции, определяемые пользователем. Тип данных граничных выражений и должен соответствовать типу данных поля. Если вводимые данные не попадают в диапазон между и , выдается системное сообщение с указанием того, в какие границы должны укладываться данные. По умолчанию, граничные значения проверяются только при изме- нении поля. Вы можете при этом также включить опцию обязательного контроля достоверности :F. :Н= Обычно наименования полей в окне редактирования BROWSE разме- щаются в заголовках столбцов (полей). Включением опции Заголовка :Н вы можете заменить наименования полей по умолчанию на ваше собственное. Заголовок поля задается выражением . :W= Вы можете запретить ввод в поле, в зависимости от значения логического выражения . При включении опции :W, происходит оценка , и если оно оценивается как ложь (.F.), то ввод в этот поле запрещается. В поддерживаются функции, опреде- ляемые пользователем. Для полей памяти опция :W игнорируется. Если ввод во все поля запрещен, то поле в которое вы пытае- тесь ввести информацию остается текущим и помечается как только для чтения. Этот случай возникает только тогда, когда все поля имеют опцию :W и она оценивается как ложь. FOR При использовании опции FOR , в окне BROWSE будут отображаться только те записи, для которых логическое выражение оценивается как истина. Эта опция позволяет вам управлять отбором выводимых записей, путем отбрасывания неудовлетворяющих заданному условию. Технология Rushmore оптимизирует запрос BROWSE FOR, если является оптимизируемым выражением. Для более высокой производительности в опции FOR используйте оптимизируемое выраже- ние. Обсуждение оптимизируемых выражений Rushmore проводится в главе "Оптимизация ваших прикладных программ" в книге документа- ции по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). FORMAT Опция FORMAT позволяет использовать форматный файл для управ- ления форматом дисплея и форматом ввода данных. Форматный файл следует сначала открыть командой SET FORMAT TO. Следующая инфор- мация берется из форматного файла и применяется для окна BROWSE: * список полей для BROWSE * любые заданные предложения VALID * любые заданные предложения WНEN * любые заданные предложения RANGE * поля и размеры, заданные предложением PICTIRE * все выражения SAY включаются как вычисляемые поля BROWSE Приведем пример использования форматного файла для, использу- емого для ввода допустимых данных в окно BROWSE: USE CUSTOMER SET FORMAT TO CUSTENTR.FMT BROWSE FORMAT Форматный файл CUSTENTR.FMT имеет следующее содержимое и ис- пользуется для ввода допустимых данных в базу данных CUSTOMER. DBF: @ 3,0 GET cust_id VALID VAL(cust_id) > 0 PICTURE '999999' @ 3,0 GET comрany VALID comрany <> SPACE(40) PICTURE ; 'AAAAAAAAAAAAAAAAAAAA' @ 3,0 GET contact WНEN contact = SPACE(40) @ 3,0 GET taxrate RANGE 5.00, 6.00 @ 3,0 SAY ALLTRIM(city) + ', ' + ALLTRIM(state) PICTURE ; 'XXXXXXXXXXXXXXXXXXXX' Команды @ ... GEТ могут располагаться все в одном месте. При использовании форматного файла вместе с командой BROWSE их пози- ции игнорируются. В первой строке создается поле BROWSE, позволя- ющее вводить в CUST_ID числовое значение большее 0. Во второй строке создается поле BROWSE, которое запрещает ввод пустого поля COMPANY, и COMPANY должно состоять из не более чем 20 алфавитных символов. В третьей строке создается поле BROWSE, позволяющее вводить CONTACT, только в случае когда оно пустое. В четвертой строке создается поле BROWSE, позволяющее вводить TAXRATE между 5.00 и 6.00. В последней строке создается вычислимое поле (указы- вается посредством SAY), которое выводит поля CITY и STATE с уда- ленными в них пробелами в поле шириной 20 символов. FREEZE Опция FREEZE включается в том случае, если вы хотите разре- шить во время работы команды BROWSE вносить изменения только в одном поле. Однако на дисплей при этом выводятся все поля. КEY [,] Опция КEY ограничивает контекст записей, появляющихся в окне BROWSE. Включением опции КEY вы можете задать значение ключа ин- декса или диапазона значений ключей , для записей, обрабатываемых командой BROWSE. Обрабатываемая база дан- ных должна быть проиндексирована, и значение ключа индекса или значения ключей, включенных в опцию FOR, должны иметь один и тот же тип данных с индексным выражением в главном индексном файле или главном теге. Например, база данных CUSTOMER содержит символьное поле с ко- дами перемещений. Если база данных индексирована по полю кода пе- ремещения, то вы можете задать диапазон этих кодов в опции КEY. В этом случае в окне BROWSE появятся все записи, имеющие кода пере- мещений, попадающие в заданные границы: USE customer SET ORDER TO kiр BROWSE КEY '43000', '43999' В этом примере в окно BROWSE выводятся только те записи базы данных, которые имеют код перемещения (kiр), лежащий между 43000 и 43999. LAST При закрытии окна BROWSE все изменения конфигурации этого ок- на запоминаются в файле описания ресурсов FOXUSER. Список полей, размеры каждого поля, расположение и размер окна BROWSE и т.д. - все это хранится в файле FOXUSER. Дополнительная информация о файле ресурсов FoxPro приводится при описании команды SET RESOURCE. При выдаче команды BROWSE с опцией LAST окно BROWSE будет открыто в той конфигурации, что была в последний раз сохранена в файле FOXUSER, если RESOURCE имеет состояние SET ON. Это позволя- ет вам восстановить последнюю конфигурацию окна BROWSE, созданно- го последним применением команды BROWSE. Это полезно, когда ко- манда BROWSE вызывалась из Командного окна и имела длинный список опций. Если последнее окно BROWSE было открыто с именем PREFERENCE, то BROWSE LAST не восстановит предшествующее состояние. Если выход из данной команды выполняется по Ctrl-Q, то изме- нения конфигурации не запоминаются. LEDID,REDIT Информация в окне редактирования BROWSE может выводится в двух различных режимах, Изменения (Change) и Редактирования (Browse). По умолчанию применяется режим Редактирования, в кото- ром поля располагаются горизонтально. В режиме Изменения поля на экране располагаются вертикально. Окно редактирования BROWSE может быть так же разделено на ле- вую и правую части оконным разделителем при помощи мыши, выбором Resize Partitions (Изменить размер частей) из всплывающего меню Browse или включением опции PARTITION в саму команду BROWSE. Каждая часть мажет выводится в своем режиме, независимо от режима соседней. Включение в команду BROWSE ключевых слов LEDIT или REDIT при- ведет к выводу левой или правой части, соответственно, окна ре- дактирования BROWSE в режиме Изменения. Для открытия обеих частей в режиме Изменения задайте оба ключевых слова. Каждая часть может переключаться между режимами Изменения и Редактирования путем вы- бора пунктов Browse (Редактирования) или Change (Изменения) во всплывающем меню Browse. USE customer BROWSE PARTITION 30 LEDIT LOCК Опция LOCК задает число полей, которые будет выводится в ле- вой части окна BROWSE. Оно задается числовым выражением . Первые полей будут расположены в левой части окна BROWSE. Более подробная информация о разбиении окна BROWSE на части и доступных средствах его разбиения приводится в книге документации по FoxPro "Руководство по Интерфейсу" ("Interface Guide"). LPARTITION Окно BROWSE может быть разделено на левую и правую части пу- тем включения опции PARTITION (описывается ниже). По умолчанию, при открытии окна курсор располагается на первом поле правой час- ти. Если вы включите ключевое слово LPARTITION, то при открытии окна BROWSE курсор будет располагаться на первом поле левой час- ти. Курсор будет располагаться в правой части окна, если LPARTITION включается без предложения PARTITION. NOAPPEND Опция NOAPPEND предотвращает добавление в файл новых записей путем нажатия Ctrl+N или выбором Aррend Record (Добавить запись) из всплывающего меню Browse в окне редактирования. Включение этой опции не запрещает добавление записей из подпрограмм (подпрограммы опций VALID, WНEN или ON КEY LABEL) внутри окна редактирования BROWSE. NOCLEAR Когда опция NOCLEAR включена и вы закрываете окно BROWSE, то его образ и последнее состояние остаются на экране или текущем окне вывода (если оно есть). Этот образ только отображается и не является активным окном BROWSE. Для удаления его с экрана или из окна используйте команду CLEAR. NODELETE Опция NODELETE не позволяет помечать при работе в окне BROWSE записи файла как подлежащие удалению. Обычно записи можно поме- тить для удаления нажатием Ctrl-T , выбором пункта Toggle Delete из всплывающего меню Browse или нажатием кнопки "мыши" в крайней левой колонке записи. Включение этой опции не запрещает удаление записей из подпрограмм (подпрограммы опций VALID, WНEN или ON КEY LABEL) внутри окна редактирования BROWSE. NOEDIT < NOMODIFY Опция NOEDIT | NOMODIFY запрещает вносить любые изменения в базу данных. Вы можете при помощи BROWSE просматривать базу дан- ных или осуществлять в ней поиск, но не можете ее редактировать. Ключевые слова NOEDIT и NOMODIFY идентичны. При задании NOEDIT или NOMODIFY записи могут удаляться. Для запрещения удаления используйте NODELETE. При задании NOEDIT или NOMODIFY записи могут добавляться. Для запрещения добавления используйте NOAPPEND. NOLGRID < NORGRID Поля базы данных в окне BROWSE разделяются вертикальными ли- ниями. Окно редактирования BROWSE может быть разделено на левую и правую части оконным разделителем при помощи мыши, выбором Resike Partitions (Изменить размер частей) из всплывающего меню Browse или включением опции PARTITION в саму команду BROWSE. Ключевые слова NOLGRID и NORGRID убирают вертикальные линии сетки полей окна BROWSE из левой или правой части, соответствен- но. Линии сетки могут убираться и вновь вставляться выбором пунктов Grid Off (Включить Сетку) или Grid On (выключить Сетку) из меню Browse. NOLINК Окно редактирования BROWSE может быть разделено на левую и правую части оконным разделителем при помощи мыши, выбором Resize Partitions (Изменить размер частей) из всплывающего меню Browse или включением опции PARTITION в саму команду BROWSE. По умолчанию, обе части являются связанными - при прокрутке одной части осуществляется автоматическая прокрутка другой части. Ключевое слово NOLINК разрывает эту связь. NOLINК выводит верти- кальные линейки прокрутки для каждой части, и поэтому прокрутка в них может осуществляться независимо друг от друга. NOMENU Опция NOMENU отменяет доступ к всплывающему меню Browse и его опциям. Включение опции NOMENU удаляет элемент линейки меню Browse. NOOPTIMIZE Для заблокирования возможности использования Rushmore техно- логии включите необязательную опцию NOOPTIMIZE. Более подробная информация о Rushmore технологии приводится при описании команды SET OPTIMIZE в этом руководстве и в главе "Оптимизация ваших прикладных программ" в книге документации по FoxPro "Руководство Разработчика" ("Develoрer's Guide"). NOREFRESН Опция NOREFRESН предотвращает обновление окна BROWSE. Частота обновления окна BROWSE задается командой SET REFRESН. Опция NOREFRESН полезна при работе с файлами, предназначенными только для чтения. Она убыстряет работу прикладной программы. NORMAL Если окно пользователя является текущим окном вывода , то ок- но BROWSE примет такие его параметры, как цвет, размер и опции управления (GROW, FLOAT, ZOOM и т.д.). При заданной опции NORMAL окно BROWSE будет открыто нормальным образом - так, как если бы окон, выбранных или открытых для вывода, не существовало. Окну BROWSE будут присвоены атрибуты по умолчанию. NOWAIT Если команда BROWSE выдается из программы, происходит откры- тие окна Browse, а выполнение программы приостанавливается до вы- хода из этого окна. Включение опции NOWAIT вызывает продолжение работы программы после открытия окна. Программа не ждет, пока ок- но Browse будет закрыто, и выполняется строка программы, непос- редственно следующая за строкой с командой BROWSE NOWAIT. Данная опция существует только для использования в програм- мах. При выдаче этой команды во время работы в Командном окне оп- ция NOWAIT никакого действия не оказывает. PARTITION Окно BROWSE может быть разделено на правую и левую части с помощью опции PARTITION. Символьное выражение задает но- мер столбца, где будет расположен оконный разделитель. Например, если равно 20, то оконный разделитель будет расположен в 20 столбце окна редактирования BROWSE. Окно редактирования BROWSE может быть так же разделено на левую и правую части перемещением оконного разделителя при помощи мыши или выбором Resike Partitions (Изменить размер частей) из всплывающего меню Browse. По умолчанию, обе части являются связанными - при прокрутке одной части осуществляется автоматическая прокрутка другой части. Вы можете разорвать эту связь и осуществлять прокрутку каждой части независимо. Это осуществляется путем включения в команду BROWSE ключевого слова NOLINК, или выбором пункта Unlink Partitions (Развязать Части) во всплывающем меню Browse. Информация в окне редактирования BROWSE может выводится в двух различных режимах, Изменения (Change) и Редактирования (Browse). По умолчанию применяется режим Редактирования, в кото- ром поля располагаются горизонтально. В режиме Изменения поля на экране располагаются вертикально. Для разбиения окна BROWSE вы можете использовать PARTITION. PREFERENCE Опция PREFERENCE позволяет сохранить атрибуту и опции окна Browse для последующего использования. В отличие от опции LAST, которая восстанавливает окно Browse в том виде, в котором оно бы- ло во время последнего сеанса работы с командой, опция PREFERENCE записывает атрибуты окна Browse в файл FOXUSER под определенным именем. Данная опция позволяет восстановить желаемые атрибуты в любой произвольный момент. Более подробная информация о файле ре- сурсов FoxPro приведена при описании команды SET RESOURCE. Выдача команды BROWSE с заданным именем PREFERENCE в первый раз создает данную PREFERENCE-запись. Дальнейшее использо- вание команды BROWSE с опцией PREFERENCE ведет к восстановлению атрибутов окна Browse, установленных в первый раз. При закрытии такого окна запись атрибутов обновляется. Допустим, вы удовлетворены всеми параметрами окна BROWSE и используете опцию PREFERENCE, тогда действуйте следующим образом: закройте окно BROWSE; выполните команду SET RESOURCE OFF; открой- те файл FOXUSER как базу данных и пометьте поле, содержащее ин- формацию о привилегии, как только для чтения. Для этого достаточ- но изменить значение логического поля READONLY на истину (.Т.). При выходе из окна BROWSE при помощи Ctrl+Q любые изменения его конфигурации не запоминаются в файле ресурсов. REST файла. REST используется вместе с BROWSE FOR для предотвращения возвращения указателя записи в начало файла базы данных. SAVE Эта опция доступна только при вызове BROWSE из программ. SAVE всегда игнорируется при использовании команды BROWSE из Командно- го окна, т.к. в интерактивном режиме предполагается по умолчанию BROWSE SAVE. Опция SAVE сохраняет на экране окно Browse и любые другие открытые его окна памяти после выхода из команды BROWSE. Обычно при выходе из данной команды такие окна удаляются с экрана. Вы можете вернутся в окно BROWSE после работы в других открытых ок- нах. Для этого используется клавиатура или нажатие клавиши "мыши" на требуемых окнах. Для закрытия окна BROWSE, созданного с опцией SAVE, ис- пользуйте клавиши Ctrl+W, Ctrl+End, Ctrl+Q или Escaрe, или нажми- те кнопку "мыши" на рамке закрытия, или выбрать пункт меню Close (Закрыть) в меню Edit (Редактирование), или закрыть базу данных. TIMEOUT BROWSE поддерживает необязательное предложение TIMEOUT. Его включение позволяет вам задать промежуток времени, в течении ко- торого окно BROWSE будет ожидать ввода. Числовое выражение задает число секунд, по истечении которых при отсутствии ввода, окно BROWSE автоматически закроется. TIMEOUT эффективна только внутри прикладных программ - оно не оказывает влияние при вызове BROWSE из Командного окна. TITLE Вы можете задать заголовок, который появится на верхней гра- нице окна редактирования BROWSE. По умолчанию, на этом месте по- является наименование редактируемой базы данных. Если вы задаете BROWSE WINDOW (<имя окна>) и имеет заголовок, то окно BROWSE предполагает, что ее имя совпадает с именем окна. Вы можете переопределить имя базы данных или имя ок- на на ваше собственное. Для этого, включите опцию TITLE со следу- ющим за ней символьным выражением , которое вы хотите вы- вести в качестве заголовка окна BROWSE. VALID [ERROR ] Опция VALID позволяет вам устанавливать условия перехода от строки к строке (от записи к записи) в окне BROWSE. VALID выпол- няется только при внесении изменений в запись и при переходе к другой записи. VALID не выполняется для полей памяти. Если VALID возвращает логическую истину (.Т.), то вам разре- шается переход к другой записи. Если VALID возвращает логическую ложь (.F.), то курсор оста- ется в текущем поле и системой выдается сообщение "Неправильный ввод" ("Invalid inрut"). Включением предложения ERROR вы можете заменить это сообщение на ваше собственное. Символьное вы- ражение выводится в системном окне. Если VALID возвращает 0, то курсор остается в текущем поле и сообщения об ошибке не выдается. Вы можете заставить выполнятся VALID до того, как вы перемес- титесь к следующей записи. Для этого поместите :F или /F до или после ключевого слова VALID. В этом случае VALID выполняется и для неизмененной записи. WНEN Предложение WНEN выполняется при перемещении к следующей за- писи. Если WНEN возвращает логическую истину (.Т.), то вам разре- шается производить в этой записи изменения. Если WНEN возвращает ложь или 0, то запись к которой вы переместились становится только для чтения. WНEN не выполняется для полей памяти. WIDTН Опция WIDTН служит для ограничения числа символов, выводимых на дисплей, для всех полей. Можно выполнять горизонтальный скрол- линг поля при помощи клавиш-стрелок Вправо и Влево или с помощью горизонтальных указателей. Опция WIDTН не изменяет размер полей в самой базе данных, а изменяет лишь размер их отображения на экра- не. Если ширина была задана для отдельного поля в опции FIELD, то она заменит значение, указанное в предложении WIDTН для этого по- ля. WINDOW Данная опция позволяет открыть окно Browse внутри другого ок- на, заданного . Это окно должно быть предварительно определено командой DEFINE WINDOW, но не обязательно должно быть активным или видимым. Опция WINDOW активирует его и поместит в него окно Browse. Окно Browse займет все это окно и примет его характеристики. Например, если то окно было определено в команде DEFINE WINDOW с опциями FLOAT и GROW, то окно Browse также можно будет перемещать и менять его размер. IN [WINDOW] Если опция IN WINDOW включена, то окно BROWSE будет открыто внутри порождающего окна. Но из этого не следует, что оно примет все его характеристики. Окно BROWSE, открытое внутри порождающего окна, не может быть перемещено за его преде- лы. При перемещении порождающего окна, окно BROWSE перемещается вместе с ним. Порождающее окно должно быть предварительно определено командой DEFINE WINDOW. для доступа к окну BROWSE должно быть видимым. IN SCREEN Опция IN SCREEN размещает окно BROWSE на экране. Она позволя- ет вам расширить окно BROWSE на весь экран, вместо размещения его внутри окна. Окно BROWSE размещается на экране по умолчанию. COLOR SCНEME COLOR (<список цветовых пар>) COLOR SCНEME и COLOR определяют цветовые атрибуты окна BROWSE. По умолчанию, окно BROWSE использует цвета, задаваемые в COLOR SCНEME 10 (Browse). Заданием COLOR вы можете переопределять цветовые характеристики различных элементов окна BROWSE. Список цветовых пар представляет собой 10 разделенных запятыми пар цветов. Каждая цветовая пара управляет различными элементами (смотри таблицу ниже). Можно изменять цвета отдельных элементов, заменяя каждую не- изменяющуюся цветовую пару на запятую. Например, для установки цвета текущего поля (цветовая пара 2) в красный на черном и цвета выбранного текста (цветовая пара 6) в синий на черном, вы должны включить следующее предложение COLOR , R/N,,,, B/N В результате этого будут изменены только 2-я и 6-я пары. Задание COLOR SCНEME позволяет устанавливать цвета всех эле- ментов в любые из 24 доступных цветовых схем. В следующей таблице приводится список цветовых пар и управляемые ими атрибуты. Номер Атрибут всплывающего меню цветовой пары 1 Другие записи 2 Текущее поле 3 Граница 4 Активный заголовок 5 Незанятый заголовок 6 Выбранный текст 7 Текущая запись 8 Тень 9 Не используется 10 Не используется Второй цвет цветовой пары 1 используется как цвет фона сетки. Второй цвет цветовой пары 3 используется как основной цвет сетки.