FoxBASE+ Реляционная Система Управления Базами Данных Версия 2.10 Руководство для пользователя Май, 1988 Fox Software, Inc. 118 W. South Boundary Perrysburg, Ohio 43551 ___________________ Программное обеспечение FoxBASE+ и справочные материалы яв- ляются собственностью Fox Software, Inc. При отсутствии предва- рительно полученного письменного разрешения категорически запре- щено любое их распространение. 1986, 1987, 1988 by Fox Software, Inc. Все права защищены. Торговые марки Fox Software, Inc. - FoxBASE+, FoxBASE+/386 и FoxBASE+/Mac. Благодарность FoxBASE+ и все возрастающий список дополнений к нему - это результат больших усилий, затраченных разными людьми. Их знания, опыт и самоотверженность позволили изделиям Fox Software достичь высокого уровня качества. Особую признательность фирма Fox Software хотела бы выразить следующим людям, внесшим наибольший вклад в нашу успешную работу. FoxBASE+: Eric R. Christensen William J. Ferguson Amy C. Fulton David L. Fulton David G. Heindel Документация: David Venzke Руководитель изделия: Janet E. Zimmerman FoxCentral: Gary J. Eklund Douglas K. Turner William H. Wilken FoxDoc: Walter J. Kennamer Fox View & FoxCode Luis Castro Geza Gedeon СОДЕРЖАНИЕ ВВЕДЕНИЕ Возможности и достоинства................................ FoxCentral: Непрограммируемый интерфейс с пользователем......................................... Fox View.............................................. FoxCode............................................... FoxDoc................................................ FoxGraf............................................... Расширения и усиления языка.............................. Индексы с фильтрами................................... Команды VIEW.......................................... CREATE/MODIFY VIEW................................. SET VIEW........................................... Убираемые меню........................................ Извлечение меню....................................... Прокручивание экрана.................................. Функции SYS........................................... Чтение имен расположенных на диске файлов.......... CURSOR OFF/ON...................................... Определение рабочего каталога...................... SOUNDEX............................................... CLEAR PROMPT.......................................... Возможности программного поиска....................... Улучшение работы команд и функций..................... Общие изменения....................................... Разрешенное пользователю конфигурирование............. Скорость и совместимость.............................. Существующие качества и расширения.................... Функции, не поддерживаемые в этой версии................. Требования к оборудованию................................ Стандартная система FoxBASE+.......................... FoxBASE+/386.......................................... Возможности системы...................................... НАЧАЛО РАБОТЫ Перед началом работы..................................... Ваша лицензия FoxBASE+................................ Ваш серийный номер FoxBASE+........................... Демонстрационный режим................................ Копирование........................................... Установка FoxBASE+....................................... Содержимое пакета FoxBASE+ ........................... Об установке FoxBASE+................................. Рабочая или демонстрационная установка............. Переход от демонстрационной версии к рабочей....... Процедура инсталяции ................................. Структура каталога................................. Начальный каталог.................................. Инсталяция......................................... Инсталяция дополнений.............................. Запуск дполнений FoxBASE+............................. Временные файлы переключения памяти и View........ Расширение памяти сверх 640 К......................... Прочтите этот раздел ПЕРЕД началом работы с FoxBASE+..... Важность регулярного копирования...................... Важность выхода с командой QUIT....................... Преобразование из dBASE III PLUS в FoxBASE+.............. Компиляция программных файлов FoxBASE+................... Переадресация вывода компилятора...................... Адресация модулей ".FOX".............................. Компиляция программных выражений неFoxBASE+........... Защита модулей ".FOX"................................. Преимущества использования процедурных файлов......... Построитель процедурных файлов FoxBASE+ - foxbind........ Как использовать foxbind.............................. Рекомендации по работе с процедурами.................. Выполнение программ FoxBASE+............................. Полностью интерактивная версия FoxBASE+............... FoxBASE+ периода исполнения........................... Временный файл FoxBASE+............................... Использование пакетного командного файла.............. Режим быстрого вывода на экран в MS DOS FoxBASE+........ Как использовать режим быстрого вывода на экран....... Ограничения........................................... Выключение режима быстрого вывода на экран............ Если вы решили возвратить FoxBASE+...................... Если вы купили FoxBASE+ в Fox Software............... Если вы купили FoxBASE+ у дилера или распространителя. ОПРЕДЕЛЕНИЯ И СОГЛАШЕНИЯ FoxBASE+........................ Типографские соглашения, использованные в данном руководстве............................................. Сокращения, использованные в данном руководстве......... Использование "диапазона" при вводе команд.............. Условные операторы FOR и WHILE.......................... Использование псевдонима (alias) при вводе команд....... Операторы............................................... ЛОГИЧЕСКИЕ операторы (в соответствии с приоритетом)... АРИФМЕТИЧЕСКИЕ операторы (в соответствии с приоритетом)....................................... Операторы ОТНОШЕНИЙ.................................. Операторы СТРОК...................................... Полная поддержка в FoxBASE+ команды MS-DOS Path......... Сообщения об ошибках.................................... Клавиши управления курсором (MS-DOS FoxBASE+)........... Общее описание клавиш управления курсором............... Функциональные клавиши............................... Интерактивный ввод и редактирование командной строки.. КОМАНДЫ ?........................................................ @...SAY/GET.............................................. Координаты Экрана/Принтера............................ Оператор SAY.......................................... PICTURE <формат>................................... FUNCTION<функц.код>................................ Оператор GET.......................................... PICTURE <формат>.................................. FUNCTION <функц.код>............................... RANGE [<числ_выраж1>,<числ_выраж2>]. ............. VALID <логич.выраж>................. ............. Коды редактирования FUNCTION......................... Трафаретные коды PICTURE............................. @ MENU................................................... @ <строка,столбец> PROMPT................................ ACCEPT................................................... APPEND................................................... APPEND BLANK............................................. APPEND FROM.............................................. AVERAGE.................................................. BROWSE................................................... CALL..................................................... CANCEL................................................... CHANGE................................................... CLEAR.................................................... CLEAR ALL............................................. CLEAR FIELDS.......................................... CLEAR GETS............................................ CLEAR MEMORY.......................................... CLEAR PROGRAM......................................... CLEAR PROMPT.......................................... CLEAR TYPEAHEAD....................................... CLOSE................................................... CLOSE ALL............................................ СLOSE ALTERNATE...................................... CLOSE DATADASES...................................... CLOSE FORMAT......................................... CLOSE INDEX.......................................... CLOSE PROCEDURE...................................... CONTINUE................................................ COPY FILE............................................... COPY TO ................................................ COPY STRUCTURE.......................................... COPY STRUCTURE EXTENDED................................. COUNT................................................... CREATE.................................................. CREATE FROM ............................................ CREATE LABEL ........................................... CREATE REPORT .......................................... CREATE VIEW............................................. DELETE.................................................. DELETE FILE............................................. DIMENSION............................................... DIR или DIRECTORY....................................... DISPLAY................................................. DISPLAY FILES .......................................... DISPLAY HISTORY ........................................ DISPLAY MEMORY ......................................... DISPLAY STATUS ......................................... DISPLAY STRUCTURE ...................................... DO...................................................... DO CASE................................................. DO WHILE................................................ EDIT.................................................... EJECT................................................... ERASE................................................... EXIT.................................................... FIND.................................................... FLUSH................................................... GATHER.................................................. GO...................................................... HELP.................................................... IF...ELSE...ENDIF....................................... INDEX................................................... INPUT................................................... INSERT.................................................. JOIN.................................................... KEYBOARD................................................ LABEL................................................... LIST.................................................... LOAD.................................................... LOCATE.................................................. MENU.................................................... MENU TO................................................. MODIFY COMMAND/FILE .................................... MODIFY LABEL/REPORT .................................... MODIFY STRUCTURE ....................................... NOTE, *, &&............................................. ON...................................................... PACK.................................................... PARAMETERS.............................................. PRIVATE................................................. PROCEDURE............................................... PUBLIC.................................................. QUIT.................................................... READ.................................................... READ MENU............................................... RECALL.................................................. REINDEX................................................. RELEASE................................................. RELEASE MODULE ......................................... RENAME.................................................. REPLACE................................................. REPORT.................................................. RESTORE FROM............................................ RESTORE SCREEN.......................................... RESUME.................................................. RETRY................................................... RETURN.................................................. RUN/!................................................... SAVE SCREEN............................................. SAVE TO................................................. SCATTER................................................. SCROLL.................................................. SEEK.................................................... SELECT.................................................. SET .................................................... Команды SET ............................................ SET ALTERNATE ....................................... SET BELL............................................. SET CARRY ........................................... SET CENTURY.......................................... SET CLEAR............................................ SET COLOR............................................ SET CONFIRM.......................................... SET CONSOLE.......................................... SET DATE............................................. SET DEBUG............................................ SET DECIMALS......................................... SET DEFAULT.......................................... SET DELETED.......................................... SET DELIMITERS....................................... SET DELIMITERS....................................... SET DEVICE........................................... SET DOHISTORY........................................ SET ECHO............................................. SET ESCAPE........................................... SET EXACT............................................ SET EXCLUSIVE........................................ SET FIELDS........................................... SET FIELDS........................................... SET FILTER........................................... SET FIXED............................................ SET FORMAT........................................... SET FUNCTION ........................................ SET HEADING.......................................... SET HELP............................................. SET HISTORY.......................................... SET HISTORY.......................................... SET INDEX............................................ SET INTENSITY........................................ SET MARGIN TO........................................ SET MEMOWIDTH........................................ SET MENU............................................. SET MESSAGE ......................................... SET ODOMETER......................................... SET ORDER............................................ SET PATH............................................. SET PRINT............................................ SET PRINTER.......................................... SET PROCEDURE........................................ SET RELATION......................................... SET RELATION......................................... SET SAFETY........................................... SET SCOREBOARD....................................... SET STATUS........................................... SET STEP............................................. SET TALK............................................. SET TYPEAHEAD........................................ SET UNIQUE........................................... SET VIEW............................................. SKIP.................................................... SORT.................................................... STORE................................................... SUM..................................................... SUSPEND................................................. TEXT...ENDTEXT.......................................... TOTAL................................................... TYPE.................................................... UNLOCK.................................................. UPDATE.................................................. USE..................................................... WAIT.................................................... ZAP..................................................... ФУНКЦИИ ........................................... Функции, заданные пользователем (UDF)................... Функция &............................................... Функция $............................................... Функция ABS............................................. Функция ALIAS........................................... Функция ASC............................................. Функция AT.............................................. Функция BOF............................................. Функция CDOW............................................ Функция CHR............................................. Функция CMONTH.......................................... Функция COL............................................. Функция CTOD............................................ Функция DATE............................................ Функция DAY............................................. Функция DBF............................................. Функция DELETED......................................... Функция DISKSPACE....................................... Функция DOW............................................. Функция DTOC............................................ Функция EOF............................................. Функция ERROR........................................... Функция EXP............................................. Функция FCOUNT.......................................... Функция FIELD........................................... Функция FILE............................................ Функция FKLABEL......................................... Функция FKMAX........................................... Функция FLOCK........................................... Функция FOUND........................................... Функция GETENV.......................................... Функция IIF............................................. Функция INKEY........................................... Функция INT............................................. Функция ISALPHA......................................... Функция ISCOLOR......................................... Функция ISLOWER......................................... Функция ISUPPER......................................... Функция LEFT............................................ Функция LEN............................................. Функция LOG............................................. Функция LOWER........................................... Функция LTRIM........................................... Функция LUPDATE......................................... Функция MAX............................................. Функция MESSAGE......................................... Функция MIN............................................. Функция MOD............................................. Функция MONTH........................................... Функция NDX............................................. Функция OS.............................................. Функция PCOL............................................ Функция PROW............................................ Функция READKEY......................................... Функция RECCOUNT........................................ Функция RECNO........................................... Функция RECNO(0) "мягкий поиск".................... Функция RECSIZE......................................... Функция REPLICATE...................................... Функция RIGHT.......................................... Функция RLOCK или LOCK................................. Функция ROUND.......................................... Функция ROW............................................ Функция RTRIM.......................................... Функция SELECT......................................... Функция SOUNDEX........................................ Функция SPACE.......................................... Функция SQRT........................................... Функция STR............................................ Функция STUFF.......................................... Функция SUBSTR......................................... Функция SYS............................................ Функция TIME........................................... Функция TRANSFORM...................................... Функция TRIM........................................... Функция TYPE........................................... Функция UPDATED........................................ Функция UPPER.......................................... Функция VAL............................................ Функция VERSION........................................ Функция YEAR........................................... ТОНКАЯ НАСТРОЙКА....................................... Возможности конфигурации FoxBASE+...................... Файлы конфигурации................................... Изменение конфигурации............................... Конфигурируемые параметры распределения................ Оптимизация работы FoxBASE+............................ Разгрузка каталогов MS-DOS ....................... Предоставьте FoxBASE+ достаточно памяти............. Работайте с достаточным местом на диске............. Используйте возможности "SET TALK OFF".............. Используйте "SET STATUS OFF"........................ Используйте массивы................................. Используйте процедурные файлы....................... Работайте с компилированными ранее программами...... Поставка прикладных программ........................... Версии FoxBASE+ только периода исполнения........... Демонстрационные версии....................... Поддержка программного обеспечения FoxBASE+............ Перед тем, как звонить нам ............................ Принтер не готов.................................... Возможность недоступна.............................. Анализ................................................. Бланки программной поддержки .......................... Многопользовательская система FoxBASE+................. Системные требования................................... Аппаратура.......................................... Программное обеспечение............................. Перед началом работы................................... Совместимость многопользовательской версии FoxBASE+ Расширение многопользовательской версии FoxBASE+.... Неподдерживаемые возможности........................ Работа в многопользовательской версии FoxBASE+...... Глоссарий.............................................. Автоматическое запирание файлов..................... Автоматическое запирание записей.................... Конфликт............................................ Глухой замок........................................ Исключительное использование........................ Запирание файлов.................................... Косвенное запирание файлов.......................... Косвенное запирание записей......................... Многопользовательская среда......................... Запирание записей................................... Многопользовательское программирование................. Требования к общему доступу......................... Исключительное использование базы данных............ Операции, требующие исключительного открытия базы данных.............................................. Операции с автоматическим запиранием................ Функции для прямого запирания....................... Функции без запирания............................... Процедуры "ON ERROR"................................... Многопользовательские команды.......................... CHANGE.............................................. DISPLAY STATUS...................................... EDIT................................................ LIST STATUS......................................... RETRY............................................... SET................................................. SET EXCLUSIVE....................................... SET PRINTER......................................... SET STATUS.......................................... SET SCOREBOARD...................................... UNLOCK.............................................. USE EXCLUSIVE....................................... Многопользовательские функции.......................... ERROR............................................... FLOCK............................................... MESSAGE............................................. RLOCK и LOCK........................................ SYS................................................. Сообщения об ошибках в многопользовательском режиме.... Нельзя записать только читаемый файл (111).......... Требуется исключительное открытите файла (110)...... Файл используется другим (108)...................... Неправильное перенаправление принтера (124)......... Запись используется другой (109).................... Запись не заперта (130)............................. Нельзя запереть..................................... Сообщения об ошибках.................................. Алфавитный список сообщений об ошибках.............. Список сообщений об ошибках по номерам.............. Приложения............................................. О файле VIDEO.DBF................................... Структура VIDEO.DBF............................. Содержание файла VIDEO.DBF...................... Коды клавиш для "ON KEY="........................... ------------------------------------------------------ Поздравляем! Добро пожаловать в мир FoxBASE+ 2.10! Вы купили не только самую быструю, но и самую лучшую систе- му управления базами данных на персональных компьютерах. FoxBASE+ - это произведение искусства. Со времени первого представления в 1986 году FoxBASE+ заво- евала себе у прессы, обозревателей, консультантов и пользовате- лей славу самого быстрого и простого из программных продуктов, аналогичных dBASE III PLUS. Теперь, с выпуском FoxBASE+ 2.10 лучшее стало еще лучше. FoxBASE+ 2.10 включает следующие новые большие возможности: - новый, управляемый с помощью меню и рассчитанный на но- вичков интерфейс с пользователем, позволяющий пользоваться боль- шей частью возможностей, имеющихся в DBASE IV, - новые возможности рисования на экране, - новый генератор программ, - новый шаблон языка и компилятор шаблонов файлов, - несколько дискет, заполненые готовыми шаблонами программ, - новый фвтоматический документатор программ, - индексные файлы с фильтрами, - новые команды для создания убираемых и вынимаемых меню, - расширенная поддержка Set/ Create/ Modify View, - новая команда, позволяющая прокручивать вверх и вниз об- ласти экрана, - новая функция, возвращающая имена файлов, находящихся на диске, сравнивая их с шаблоном символов, - новая функция, возвращающая имя текущего подкаталога, - версия demo нашего нового пакета деловой графики 3-D, - новый двухтомный учебник, и конечно, - эта версия работает быстрее всех предыдущих. Возможности и достоинства ----------------------------------------------------------- FoxBASE+ пересмотр 2.10, созданный для удовлетворения тре- бований новичков, опытных пользователей и создателей программ, является прекрасным объединением: - легкости использования и непрограммирумого интерфейса и - набора очень мощных расширяющих его возможности утилит. FoxBASE+ 2.10 сочетает в себе доступность, высокую скорость и наилучшую из всех существующих среду, расширяющую его возмож- ности. Получив пересмотр 2.10, вы стали обладателем самой пос- ледней и самой быстрой версии FoxBASE+, которая включает много новых возможностей, а также более 400 улучшений и дополнений. FoxCentral: Непрограммируемый интерфейс с пользователем FoxCentral - это наш новый изящный интерфейс с пользователем, удобный как для новичков, так и для опытных пользователей. FoxCentral позволяет легко управлять многими операциями базы данных, не обращаясь к программированию, а работая с возможнос- тями убирания и вынимания меню. Использующие базу данных новички могут, не написав ни еди- ной команды, почувствовать силу FoxBASE+. С помощью этого "цент- ра управления", т.е. простых в обращении убираемых меню, база данных может быть создана, открыта, проверена, изменена и сохра- нена. Кроме того, без помощи программирования могут быть созданы индексы, установлены связи между базами данных, установлены фильтры и т.п. Доступ ко всем новым возможностям FoxBASE+2.10 - Fox View, FoxCode, FoxDoc и FoxGraf осуществляется с помощью FoxCentral. Fox View Fox View - это новое средство для создания экрана. Сложный по своей структуре, но простой в использовании, Fox View помога- ет создавать красивые и удобны экраны ввода. Fox View позволяет одновременно использовать информацию из нескольких баз данных, импортировать существующие форматирован- ные файлы, и даже включать целые программы в используемые вами экраны! Удобные и привычные экраны также могут создаваться с по- мощью полей, взятых из нескольких связанных баз данных. С помощью Fox View можно не только улучшать эстетический вид экранов, но и повышать ясность входных форм. FoxCode FoxCode - это новый генератор программ, создающий полные и привычные программы на FoxBASE+! FoxCode может сгенерировать из файла с простым форматом (.FMT) программу, имеющую все возмож- ности. FoxCode включает язык, разработанный для создания шаблонов или "проектов", описывающих структуру программ, которую вы хоти- те сгенерировать на FoxBASE+ (такие как работа с файлами, созда- ние форм и удобные сообщения программы). Создайте свои собственные конкретные шаблоны или используй- те один из многих ??????????? шаблонов, включенных в пакет FoxBASE+ 2.10. Некоторые из этих шаблонов генерируют сложные системы, включающие большие возможности, как например снятие данных с постоянного календаря и калькулятора, и полностью ис- пользующие преимущества, создаваемые встроенными в FoxBASE+ 2.10 вынимаемыми и убираемыми меню - и при этом, вам не потребуется написать ни единой строки кодов. Язык шаблонов FoxCode обеспечивает вас полной программной средой для создания своих программ, которые можно будет легко изменять и продавать. FoxDoc FoxDoc - это новый документатор программ, созданных на FoxBASE+. С помощью FoxDoc одна из самых утомительных работ, связанных с программированием - документирование системы, прев- ращается в простое нажатие нескольких клавиш. FoxDoc задокументирует всю написанную на FoxBASE+ систему или только одну какую-либо программу, создав полный пакет доку- ментации, основанный на ваших спецификациях. FoxDoc создает мно- го видов документайии, включая: - словарь данных, в котором показано где все используемые в программе имена определены, изменены или где есть на них ссылки, - древовидную диаграмму со взаимосвязями всех модулей сис- темы, - чистый, заново составленный листинг программы с правиль- ным написанием ключевых слов и переменных для данных, - листинг взаимных ссылок со всеми используемыми базами данных, местами ссылок на них и их структуру, - Полный макет используемых форм сообщений и меток, - заголовки программ, указывающие те, которые вызывают дан- ную программу, а также те, которые она вызывает в свою очередь, - и многое многое другое. FoxGraf FoxGraf - это прекрасная новая программа, открывающая поль- зователям FoxBASE+ дверь в мир трехмерной графики! Получив FoxBASE+ 2.10, вы стали обладателем полного пакета demo, в кото- ром показано, как можно с помощью FoxBASE+ создавать собственную деловую трехмерную графику. Целью любой графической системы является прояснение отноше- ний между числами, сделав их видимыми. Ни одна другая программа не может представлять числа с такой полнотой и изящной ясностью, как это делает FoxGraf; она просто великолепна и при этом вели- колепно проста. FoxGraf автоматически создает двумерные, трех- мерные и даже ?????? трехмерные графики при нажатии одной единс- твенной клавиши. К FoxBASE+ 2.10 прилагается талон, дающий значительную скидку при покупке полного пакета FoxGraf. Расширения и усиления языка ----------------------------------------------------------- FoxBASE+ 2.10 содержит следующие расширения и усиления от- носительно предыдущей версии: Индексы с фильтрами Новое расширение команды INDEX позволяет пользователям оп- ределять и создавать индексы с фильтрами ( т.е. INDEX ON до FOR положения = "СА" TO Statendx). С появлением индексов с фильтрами команда SET FILTER TO практически выходит из употребления. При задании SET FILTER TO... и последующем поиске записи FoxBASE+ должен физически проверить каждую запись в базе данных и определить, встретилось ли ему услови FILTER, до того, как он проверит, соответствует ли оно критерию поиска! Это значительно замедляет время ответа. В то же время, индексы с фильтрами содержат только те запи- си, которые УЖЕ соответствуют условию фильтра (FOR). Комбиниро- вание прекрасную технику индексирования FoxBASE+ с выражением в фильтре позволяет очень быстро совершать поиск в индексированных базах данных. Фактичски, поиск с применением этой техники проис- ходит почти немедленно. Команды VIEW CREATE/MODIFY VIEW Эта команда позволяет пользователям создавать файл для просмотра, содержащий информацию о среде FoxBASE+, включая: - все базы данных и индексы, открытые с помощью USE, - все поля, доступные для SET FIELDS, - все связи, установленные с помощью SET RELATIONS TO, - все файлы с форматами экраннов, открытые с помощью SET FORMAT TO, - все фильтры, установленные SET FILTER TO, и - многие установки переключения ON/OFF (например, SET STATUS ON) могут быть сохранены в файле просмотра в период его создания (CREATE), а потом восстановлены, когда этот файл SET. Эти установки сохраняются автоматически путем создания файла просмотра с помощью ключевого слова ALL. SET VIEW Эта команда восстанавливает то состояние среды FoxBASE+, в котором она находилась в момент создания файла просмотра. Убираемые меню Несколько новых команд позволяют пользователям определять структуру меню способом, похожим на тот, который принят торговой маркой Macintosh (создающей компьютеры Apple) и заключается в полоске меню, содержащей заголовки меню в верхнем ряду экрана. Когда курсор помещается на заголовок меню, тот выделяется подсветкой и открывается подменю доступных опций. Если заголов- ков меню больше, чем может вместить экран, то по мере надобности остальные заголовки показываются на дополнительных страницах эк- рана. Способ выбора и вывода страниц на экран аналогичен приня- тому в LOTUS 1-2-3 (это торговая марка LOTUS Development Corp.). Клавиши управления курсором используются для перемещения светящегося курсора вдоль колонки опций меню. При нажатии левой или правой стрелки выбирается левый или правй заголовок меню. Извлечение меню Две новые команды позволяют поместить меню в любое удобное место экрана, независимо от находящегося в верхней строке курсо- ра меню. Если опций больше, чем можно одновременно вывести на экран, то разрешается прокручивать окно. Прокручивание окна. Новая команда SCROLL позволяет перемещать вверх и вниз пря- моугольную область экрана. Пользователь указывает координаты ле- вого верхнего и правого нижнего углов той области, которую надо прокручивать, а также число строк, на которое ее надо передви- нуть. Прокручивать область можно как вверх, так и вниз. Функции SYS Чтение имен расположенных на диске файлов Новая функция SYS(2000) возвращает имя или первого файла, совпадающего с определеным шаблоном имени, или следующего совпа- дающего файла. CURSOR OFF/ON Новая функция SYS(2001) убирает курсор, а функция SYS(2001,1) выводит его обратно. Определение рабочего каталога Новая функция SYS(2003) возвращает имя текущего каталога на принятом по умолчанию дисководе. SOUNDEX Функция SOUNDEX возвращает звуковой образ символьного выраже- ния. Сравнив два результата работы функции SOUNDEX, можно опре- делить идентичны ли слова с фонетической точки зрения (если они звучат похоже). CLEAR PROMPT Эта команда позволяет удалать промптовые знаки, выведенные на экран с помощью команды @...PROMPT, не используя команду MENU TO. Число промптовых знаков, выводимых на экран, увеличено с 32 до 128. Можно изменять объем памяти, выделяемый для хранения промптовых символов. Интервал изменяется от 1 до 32 К, причеи по умолчанию принят 1 К. Объем можно увеличить с помощью файла CONFIG. Возможности программного поиска После безуспешного поиска (SEEK) в индексированной базе данных, пользователи могут воспользоваться логикой "soft seek" функции RECNO(0) для определения возвращаемого номера записи. Эта функция возвращает номер записи, предшествующий значению вы- ражения SEEK относительно индекса. Улучшение работы команд и функций В существующие команды и функции были внесены следующие улучшения. - Разрешено использование SET COLOR и CLEAR в форматных файлах. - Добавлен новый формат для установки множественных связей в базе данных. - По многочисленным просьбам команда VALID теперь проверяет валидность переменной при выходе из поля GET вне зависимости от того, вносились ли в нее изменения. _"Горячие" клавиши были значительно изменены. Теперь такую клавишу можно связать со скэн-кодом любой функциональной клави- ши, а не только F1. Если включен файл FORMAT, то "горячие" кла- виши можно объединять с командами EDIT, APPEND, CHANGE, INSERT и READ. - READKEY устанавливается при выходе из меню со светящимся маркером. - BROWSE MODIFY больше не ограничивает файл рамками FoxBASE+/LAN. Общие изменения В FoxBASE+ версию 2.10 также внесено несколько общих изме- нений. - Теперь FOXPCOMP устанавливает Error level DOS. - Мы перешли на MicroSoft C 5.0 - FoxBASE+ теперь поставляется с новым файлом foxplus.rsc, содержащим все строки. Этот файл должен находиться в том же ка- талоге, что и файл foxplus.ovl и быть доступным при указании его маршрута. Разрешенное пользователю конфигурирование Сам FoxBASE+ версия 2.10 и все относящиеся к нему изделия позволяют пользователям изменять принятые по умолчанию установки с помощью простого, но мощного вспомагательного средства. Столь удобное конфигурирование выполняется с помощью набора файлов конфигурации, в которых определяются значения, принятые пользо- вателем по умолчанию. Скорость и совместимость FoxBASE+ версия 2.10 по-прежнему полностью совместим с про- мышленным стандартом dBASE III Plus и по-прежнему является самым быстрым из всех имеющихся на рынке систем, совместимых с dBASE III Plus. Что еще можно добавить? Существующие качества и расширения Кроме полной поддержки всех особенностей стандартного языка dBASE, FoxBASE содержит: - Функции, определяемые пользователем. - Массивы переменных памяти. - Связ один-ко-многим. - Больше процедур в процедурном файле. - Защищенный режим версии 80386. - Динамическое распределение памяти. - Компилятор программ. - Компоновщик процедурных файлов. - Прямой доступ в базы данных dBASE II и FoxBASE. -И многое, многое другое. 1.3 Функции, не поддерживаемые в этой версии -------------------------------------------------- (Во всех версиях) CREATE/MODIFY/SET QUERY CREATE/MODIFY SCREAN - заменена значительно более мощным Fox View. Поддержка CATALOG IMPORT/EXPORT Поддержка форматов .DIF, .SYLK и .WKS в командах COPY и APPEND. (в многопользовательской версии) Кодирование файлов Другие возможности команды PROTECT LIST/DISPLAY USERS 1.4 Требования к оборудованию Минимальными требованиями к оборудованию для работы с FoxBASE+ являются: * компьютер, поддерживающий FoxBASE+ * по крайней мере 360 КБайт свободной оперативной памяти * дисковод для жесткого диска Если имеется арифметический сопроцессор 8087/80287, FoxBASE+ может эффективно его использовать. Наилучшие показатели работы могут быть достигнуты, если такой сопроцессор имеется; наличие или отсутствие 8087/80287 очень заметно влияет на рабо- ту. Обычно FoxBASE+ работает лучше, если имеется большой объем памяти. Минимально допустимым является наличие 360 К свободной оперативной памяти. FoxBASE+ может использовать всю имеющуюся память. Чем больше объем памяти, тем быстрее он работает. Кроме того, при наличии принтера, FoxBASE+ может его ис- пользовать. FoxBASE+/386 Минимальная конфигурация для работы FoxBASE+ 80386: * компьютер 80386, поддерживающий FoxBASE+/386 * по крайней мере 2 мегабайта свободной памяти * дисковод для жесткого диска * математический сопроцессор 80287 или 80387. FoxBASE+/386 требует по крайней мере 2 мегабайта оператив- ной памяти и может эффективно ее использовать. Для того, чтобы полностью утилизировать возможности FoxBASE+/386 на новой мощной аппаратуре 80386, необходимо иметь большой объем свободной опе- ративной памяти. (Одна из машин, применявшихся для разработки, имела 6 мегабайтов оперативной памяти и ... работала очень быст- ро!) 1.5 ВОЗМОЖНОСТИ СИСТЕМЫ Максимальное количество записей в файле базы данных 1 000 000 000 Максимальное количество символов в записи 4 000 Максимальное количество полей в записи 128 Максимальное количество символов в поле 254 Количество значащих цифр при вычислениях 16 Максимальное количество символов в строке символов 254 Максимальное количество символов в командной строке 254 Максимальное количество символов в заголовке отчета 254 Максимальное количество символов в индексном ключе 100 Количество переменных памяти по умолчанию 256 Максимальное количество переменных памяти 3600 Максимальное количество массивов 3600 Максимальное количество элементов в массиве 3600 Максимальное количество открытых файлов 48 Минимальный номер версии MS/PC-DOS(однопользовательская) 2.0 Минимальный номер версии MS/PC-DOS(многопользовательская) 3.1 2 Начало работы На следующих страницах приведена общая начальная информация о FoxBASE+. Мы настоятельно рекомендуем вам ознакомиться с нас- тоящей главой перед началом работы с FoxBASE+ для того, чтобы ознакомиться с основами FoxBASE+. 2.1 Перед началом работы Ваша лицензия FoxBASE+ Вы приобрели лицензию на использование FoxBASE только на одном компьютере. В связи с этим работающая копия FoxBASE+ может быть инсталирована только на одном компьютере. Для работы на до- полнительных компьютерах необходимо приобрести соответствующие уникальные экземпляры FoxBASE+, каждая из которых имеет уникаль- ный серийный номер. Однако в случае сети или многопользовательской системы вы можете обеспечить доступ к FoxBASE+ любого количества терминалов при условии, что существует только один лицензированный экземп- ляр системы FoxBASE+. Ваш серийный номер FoxBASE+ В процессе процедуры инсталяции, описанной инже, ваш экзем- пляр FoxBASE+ постоянно помечается уникальным серийным номером, который соответствующим образом выводится при каждом запуске FoxBASE+. FoxBASE+ не сможет функционировать до тех пор, пока не будет инсталирован этот номер, и прекратит работу, если он будет поврежден. Этот серийный номер очень важен для вас. Он должен сооб- щаться каждый раз, когда вы обращаетесь в фирму Fox Software за технической помощью или для получения изменений в системе. Это основная связь между нами и пользователями, которая предоставля- ет нам возможность информировать вас о всех последних модифика- циях системы. После инсталяции вашей копии FoxBASE+ положите листок с се- рийным номером и ключем активации в удобное место. Когда вы до- лучите дополнения к своей системе, вам потребуется серийный но- мер для их инстоляции. ________________________________________________ ! В случае потери листка с серийным номером мы ! ! можем восстановить его и выслать копию по ! ! почте. В целях сохранения уникальности каж- ! ! дого серийного номера мы не сообщаем его по ! ! телефону или незарегистрированным пользова- ! ! телям FoxBASE+ ! ________________________________________________ Демонстрационный режим Каждый пакет FoxBASE+ может быть инсталирован для работы в минимальном варианте демеонстрационного режима. В демонстрацион- ном режиме доступны все возможности FoxBASE+. Единственным огра- ничением демонстрационного режима является наличие не более 120 записей в любой базе данных. Вы можете изучать демонстрационную версию до тех пор, пока Вы не будете полностью удевлетворены - до 30 дней. Если в тече- ние 30-дневного демонстрационного периода у вас возникнут ка- кие-либо вопросы, просим обращаться к нам за технической по- мощью. Копирование Немедленно используйте команду DISKCOPY для копирования дискеты FoxBASE+, как описано в документации по операционной системе. FoxBASE+ не защищен от копирования, и вы можете сделать неограниченное количество копий. Уберите исходную дискету с FoxBASE+ в надежное место и используйте копии для описанной ниже процедуры инсталяции. 2.2 Инсталяция FoxBASE+ Cодержание пакета FoxBASE+ Ваш пакет FoxBASE+ содержит следующее: * Руковдоство пользователя по FoxBASE+ и компоновщик прог- рамм * Индексный Tab. * Справочную карту FoxBASE+ * Дискеты, которые будут использованы для инсталяции FoxBASE+ на жесткий диск * Серийный номер - алфавитно-цифровая последовательность, используемая в процессе инсталяции, которая служит иден- тификатором вашего экземпляра FoxBASE+ и помогает нам обеспечивать эффекитвную поддержку программного обеспече- ния. * Демонстрационный ключ активации - алфавитно-цифровая пос- ледовательность, которая используется в процессе инсталя- ции для создания ограниченного демонстрационного варианта FoxBASE+. Ключ находится на внешней стороне пакета, с ли- цензией на FoxBASE+. * Ключ активации - алфавитно-цифровая последовательность, которая используется в процессе инсталяции для создания полной версии FoxBASE+. Он содержится в запечатанном кон- верте с лицензией на FoxBASE+. _________________________________________________ ! Не открывайте запечатанный конверт с ключом ! ! активации до тех пор, пока Вы окончательно не ! ! решите приобрести FoxBASE+ в соответствии с ! ! пунктами лиценизии, написанными на конверте. ! ! Разрешение на возврат не может быть выдано, ! ! если повреждена печать или надорван конверт. ! _________________________________________________ * Регистрационную анкету программного обеспечения - запол- ните ее и возвратите в фирму Fox Software в 45 дневный срок с момента покупки. Она фиксирует ваше право на ли- цензию FoxBASE+ и служит подтверждением получения вами всех изменений и дополнений о данном изделии. Об инсталяции FoxBASE+ Полученные вами дискеты содержат все файлы, необходимые для работы с FoxBASE+. Перед началом работы с FoxBASE+ эти программ- ные файлы должны быть скопированы на жесткий диск, как это опи- сано далее, в процессе инсталяции. _________________________________________________ ! Весь пакет занимает приблизительно 2.2 Мб на ! ! диске. В связи с этим перед началом инсталя- ! ! ции убедитесь, что на жестком диске имеется ! ! по крайней мере столько свободного места. ! !_______________________________________________! Для выполнения инсталяции необходимо следующее: * Дискеты FoxBASE+. * Серийный номер. Это алфавитно-цифровой код, поставляемый соместно с дискетами. * Ключ активации. Это алфавитно-цифровой код, поставляемый соместно с дискетами. Рабочая или демонстрационная инсталяция Будет ли инсталированная копия FoxBASE+ демонстрационной версией с ограниченными возможностями, или рабочей версией сис- темы, полностью зависит от того, был ли использован демонстраци- онный или рабочий ключ активации в процессе процедуры инсталя- ции. Переход от демонстрационной версии к рабочей версии FoxBASE+ . Когда вы примете решение о приобретении FoxBASE+, просто повторите описанную далее процедуру инсталяции с использованием рабочего ключа активации из запечатанного конверта, предостав- ленного совместно с дискетами. Процедура инсталяции Следующая процедура инсталяции может быть использована для инсталяции любой версии MS-DOS FoxBASE+ или FoxBASE+ Runtime. Перед выполнением этой процедуры обязательно сделайте рабо- чие копии исходных дискет FoxBASE+ при помощи команды DISKCOPY. В качестве дополнительной меры предосторожности полезно ввести защиту от записи на исходных дискетах FoxBASE+. Структура каталога При инсталяции FoxBASE+ на определеном дисководе, создается следующая структура каталогов: рис. стр. 2-6. Такое стандартное расположение директориев позволяет помес- тить вместе все файлы, критичные для работы FoxBASE+, в опреде- ленных местах, так что FoxBASE+ сможет легко их находить. Ката- логи, чьи имена на этой диаграмме помещены в скобки, могут иметь другие имена в вашей системе. Возможно вы захотите установить дополнительные каталоги для зранения рограмм, баз данных, индек- сов, отчетов и т.п. Начальный каталог Самый верхний из каталогов - это начальный каталог FoxBASE+. В нем содержатся все файлы .EXE и .COM, входящие в па- кет FoxBASE+. В вашей системе этот каталог может иметь другое имя, т.к. вы сами его определяете. Для удобства документирования мы будем называть этот начальный каталог "FOX". Инсталяция Решите, в каком каталоге жесткого диска будет инсталирован FoxBASE+. Этот каталог станет основным. Используйте команду chdir для того, чтобы сделать этот ка- талог текущим рабочим каталогом. Более подробно о переходе в другой каталог Вы можете узнать из документации по DOS, постав- ленной совместно с компьютером. Установите дискету FoxBASE+ System Disk #1 на дисковод А вашего компьютера. Вызовите процедуру инсталяции следующей командой: А:INSTALL где означает имя дисковода жесткого диска, на котором вы хотите инсталировать FoxBASE+. Например, если имя вашего жесткого диска С:, и вы хотите инсталировать FoxBASE+ в каталог в именем "FOX", необходимо ввести команду: CHDIR C:FOX A:INSTALL C: После этого на экран будет выведена информация о процессе инсталяции и дальнейшие инструкции. Прочтите эту информацию и нажмите любую клавишу, чтобы продолжить работу. Появятся несколько сообщений, указывающих, что происходит копирование файлов на жесткий диск. Затем последует сообщение: Enter your serial number : /Введите ваш серийный номер/ Введите ваш серийный номер, который был прислан вам совмес- тно с пакетом FoxBASE+. После этого на экран будет выведено сообщение: Enter your activation key: /Введите ваш ключ активации/ В ответ введите демонстрационный или рабочий ключ актива- ции, который был предосталвен вам в составе пакета FoxBASE+. В процессе инсталяции может быть выведен запрос на установку второго системного диска FoxBASE+, который был предоставлен вам вместе с пакетом. Если возникнут какие-либо проблемы, будут выведены соответ- ствующие сообщения. Разрешите возникшую проблему и повторите процесс инсталяции. Если в процессе инсталяции неправильно указаны серийный но- мер или ключ активации, то появится сообщение: "Несоответствие ключа инсталяции/номера системы -- INSTALATION FAILED/ИНСТАЛЯЦИЯ НЕ УДАЛАСЬ/. Для исправления этой ошибки просто повторите инсталяцию, использовав верный серийцный номер и ключ активации. _________________________________________________ ! Обратите внимание, что серийные номера версии ! ! разработчика и runtime и ключ активации раз- ! ! личны. Если вы приобрели пакеты разработчика ! ! и runtime, необходимо вводить соответствующий ! ! номер серии и ключ активации для соответству- ! ! ющей системы. ! !_______________________________________________! Если проедура инсталяции успешно завершена, на экран будет выведено сообщение: FoxBASE+ succesfully installed. /FoxBASE+ успешно инсталирован/ Инсталяция дополнений В этом месте процедуры инсталяции вы готовы инсталировать необязательные, выбранн е по вашему усмотрению дополния. Нажмите любую клавишу для продолжения. На экране появится меню инсталяции дополнительных программ- ных возможностей FoxBASE+. Вы можете автоматически инсталировать все дополнительные программые возмможности, любые их группы, или просто покинуть это меню, ничего не выбрав. Можно инсталировать любые из следующих дополнений к FoxBASE+: - FoxDoc - документатор прикладных программ FoxBASE+. - FoxCentral: Непрограммируемый интерфейс с пользователем. - Fox View - экранный художник и генератор прикладных прог- рамм FoxBASE+. - FoxCode - компилятор шаблонов FoxBASE+. - Templates - скомпилированные шаблоны Fox View/FoxCode. - Обучющие и демо файлы Fox View. - Шаблон исходного кода - шаблоны Fox View/FoxCode в форме исходного кода ( не компилированного). Для автоматической инсталяции всех дополнительных программ- ных средств выберите в меню эту опцию, нажмите клавишу ВВОД и отвечайте на подсказки, появляющиеся на экране. Процесс автома- тической инсталяции можно прекратить в любой момент, нажав кла- вишу Esc. Пожалуйста, проявляйте терпение - прежде чем прекра- тить процесс инсталяции процедура инсталяции закончит выполняе- мую в момент нажатия этой клавиши работу. После прерывания поя- вится меню опций Esc. С его помощью можно оборвать инсталацию, продолжить ее или вернуться в меню опций инсталяции. Для инсталяции выбранной группы дополнительных программ, вы- берите в меню данную опцию, нажмите клавишу ВВОД и отвечайте Y или N при появлении описания каждой возможности. Этот вид инста- ляции можно в любой момент оборвать, нажав клавишу Esc. После завершения инсталаяции дополнений FoxBASE+ в нижней части экрана появляется сообщение: "Istallation complete" (Инс- таляция закончена). Для продолжения работы нажмите любую клавишу. Запуск дполнений FoxBASE+ Многие новые дополнения FoxBASE+ (FoxDoc, Fox View, FoxCode, FoxGen, FoxGraph) могут выполняться изнутри FoxBASE+. Любую из этих программ можно выполнить, набрав около знака dot FoxBASE+ ту же командную строку, которую вы набирали бы в DOS. В этой командной строке могут содержаться те же переключения и прочая информация, которую пользователь хотел бы направить в программу. Временные файлы переключения памяти и View Однако, до загрузки и выполнения любой из этих дополнитель- ных программ, происходят два события: (1) содержимое памяти компьютера записывается во временный файл переключения памяти, находящийся на жестком диске (или на RAM диске), и (2) если отк- рыты какие-либо базы данных или связанные с ними файлы, то все данные, находящиеся в памяти, записываются на диск, и создается временный файл View, содержащий все текущие установки среды и информации. Эти временные файлы помещаются в текущий, принятый по умло- чанию каталог во всех случаях, когда пользователь не переназна- чил каталог с помощью команды TEMPFILES=, помещаемой в файл CONFIG. Такая конфигурация в основном предназначена для тех пользователей, кто сохраняет и восстанавливает память и информа- цию для просмотра с помощью RAM-дисков. При обратном входе в FoxBASE+ из дополнительных программ файлы временного переключения памяти и View перезагружаются, и ползователь возвращается к той же самой рабочей среде FoxBASE+. _________________________________________________ ! Если вы, находясь в FoxBASE+, пользуетесь ! ! FoxView, то избегайте пользоваться командами ! ! SHELL, которые уничтожат с диска файл времен- ! ! ного переключения памяти. При выходе из до- ! ! полнительной программы обратнов FoxBASE+ пе- ! ! реключатель старается загрузить файл времен- ! ! ного переключения памяти. В случае его отсут- ! ! ствия появляется сообщение об ошибке, и поль- ! ! зователь возвращается к промптовому знаку DOS.! !_______________________________________________! Если на жестком диске не хватает места для хранения файлов, или если вы не хотите создавать эти файлы, то дополнительные программы можно запускать из DOS - в таком случае временные фай- лы создаваться не будут. Расширение памяти сверх 640 К Некоторые пользователи будут использовать максимально быст- рую версию FoxBASE+ совместно с резидентными программами, как например, спулерами, SideKick и т.д. В этом случае они могут за- хотеть расширить отводимую память сверх принятых 640 Кб. К счастью в настоящее время имеются способы, позволяющие это реа- лизовать. Во-первых, если это возможно, FoxBASE+ воспользуется 64 Кб памяти EMS. Чтобы разрешить FoxBASE+ использовать эти 64 Кб па- мяти, просто укажите в файле CONFIG EMS=ON. (Между прочим, при- чина, по котрой FoxBASE+ не использует всю EMS память заключает- ся в том, все пользователи будут получать весьма заметные труд- ности в процессе работы вне зависимости от того, используют ли они EMS память. Использование только 64 Кб не вызывает этих сложностей). Если у вас уже есть EMS память, то это удобно и приводит к значительным изменениям при выполнении. Однако, само по себе это недостаточная причина для покупки платы EMS. Во-вторых, одним из продуктов, который достаточно хорошо разработан и отлично работает, является система MAXIT фирмы McGraw-Hill Software. Она содержит плату половинного размера, которая включается в один из коротких разъемов вашего персональ- ного компьютера и содержит, кроме всего остального, дополнитель- ные 256 К памяти. Кроме того, имеется специальная программа, ко- торая позволяет большинству программ, таких, как FoxBASE+, SideKick, и т.д. использовать дополнительные 256 К памяти. Эта система стоит 195$. Конечно, на рынке имеются сходные изделия высокого качества. Однако мы используем этот продукт и ручаемся за него. Конечно, если вы действительно хотите добиться максимальной скорости выполнения, то подключите большие возможности оборудо- вания 80386, используя защищенный режим FoxBASE+/386. 2.3 Прочтите этот раздел ПЕРЕД началом работы с FoxBASE+ В этом разделе приведена информация, которую необходимо вни- мательно изучить перед началом работы с FoxBASE+. Затрата минуты или двух для ознакомления с ней позволит вам в дальнейшем сэко- номить много часов. 2.4.1 Важность регулярного копирования Не существует аппаратуры, операционной системы или программ- ного продукта, которые обеспечили бы вам полную сохранность ва- ших данных и программ. Это верно для любых компьютеров, начиная от домашних персональных компьютеров, и кончая самыми большими мощными и дорогими компьютерами. _________________________________________________ ! Существует только один путь обеспечить безо- ! ! пасность ваших данных и программ: тщательно ! ! выполняемая регулярная программа копирования ! ! данных и программ. ! !_______________________________________________! Кроме того, если копии ваших файлов на дисках или лентах сохраняются рядом с компьютером, и если ваш компьютер поврежден, например, огнем, то все ваши копии также погибнут. Поэтому будет лучше, если копии ваших файлов на дисках или лентах будут хра- ниться в месте, отдаленном от компьютера. Конечно, копирование данных и программ является очень нудной работой. Однако это лучше, чем потерять данные и программы. Важность выхода с командой QUIT При разработке и реализации FOxBASE+ мы предпринимали значи- тельные усилия для обеспечения в возможных пределах того, чтобы выход из FoxBASE+ мог быть произведен только при помощи команды QUIT. Например, ошибка выполнения программы или ошибка MS-DOS не может привести к неожиданному выходу в MS-DOS, в результате ко- торого была бы обойдена процедура нормального закрытия системы. Однако, ни мы, ни кто-либо другой не сможет предотвратить выполнение перезагрузки путем нажатия клавиш Ctrl- Alt-Del или выключения и включения питания! FoxBASE+, также, как и dBASE III PLUS и большинство конкури- рующих систем, достигают высокой скорости обработки файлов путем сохранения больших частей файлов базы данных и индексных файлов в полупроводниковой памяти компьютера. Данные, размещенные в па- мяти, могут быть найдены в тысячи раз быстрее, чем данные на диске. Кроме скорости доступа, основное различие внутренней полуп- роводниковой памяти от дисковой памяти заключено в ее временном характере. При перезагрузке или выключении компьютера содержимое полупроводниковой памяти теряется. Поскольку фрагменты файлов и индексов, используемых в теку- щий момент, сохраняются в оперативной памяти, наиболее важной функцией команды QUIT является перенесение этих фрагментов из памяти на диск. Если вы произведете перезагрузку или просто вык- лючите компьютер без использования команды QUIT, этот процесс не будет выполнен. Если никакие базы данных и индексные файлы не используются, скорее всего никакой потери информации не произойдет. Однако, несмотря на это - _________________________________________________ ! Если вы выполняете перехзагрузку компьютера ! ! нажатием клавиш Ctrl-Alt-Del или выключаете ! ! питание без выполнения команды QUIT, все базы ! ! данных и индексные файлы, которые занесены в ! ! области USE в этот момент, могут быть повреж- ! ! дены или разрушены. Абсолютно необходимо, ! ! чтобы вы выполняли команду QUIT перед выходом ! ! из FoxBASE+. ! !_______________________________________________! Легко понять, почему так происходит: все фрагменты баз дан- ных и индексных файлов, которые были созданы или изменены и на- ходятся в оперативной памяти в момент перезагрузки или выключе- ния питания, не записываются на диск и теряются. Это может при- вести к любым последствиям, начиная отсутствием таковых и кончая полной катастрофой. Как было упомянуто выше, это предосторожность должна выпол- няться также и для большинства других систем управления базами данных, а также и для самой операционной системы MS-DOS. Выклю- чение питания или перезагрузка в процессе работы с файлами может кончиться плохо. _________________________________________________ ! Фирма Fox Software не несет ответственности ! ! за проблемы, возникшие у пользователей при ! ! выходе из FoxBASE+ иначе, кроме как при помо- ! ! щи команды QUIT. ! !_______________________________________________! Если в ваш компьютер попадет молния, или он превратится в лепешку в результате пожара, Вы поймете важность предупреждений о копировании, сделанных выше. 2.4 Преобразование из dBASE III PLUS в FoxBASE+ Поскольку FoxBASE+ совместим по файлам с dBASE III PLUS, в существующие программы dBASE III PLUS не нужно вносить практи- чески никаких изменений для их запуска в FoxBASE+. Просто запус- кайте ваши программы таким же образом, как вы это делаете в DBASE III PLUS. Однако, при этом следует сделать следующие заме- чания. Cовместимость FoxBASE+ с dBASE III PLUS является достаточно полной и включает в себя: * исходные программы (файлы .PRG) * базы данных (файлы .DBF) * файлы примечаний (файлы .DBT) * файлы сохранения переменных памяти (файлы .MEM) * файлы экранного формата ( файлы .FMT) * форматные файлы отчетов (файлы .FRM) * форматные файлы ярлыков (файлы .LBL) Никакие из файлов этого типа не требуют каких-либо преобра- зований перед использованием их с FoxBASE+. Однако индексы, используемые для доступа к базам данных FoxBASE+ отличаются по формату и обычно гораздо меньше в объеме, чем соответствующие индексы dBASE III PLUS. Это связано с совер- шенной системой индексации, использованной в FoxBASE+, которая вносит свой значительный вклад в увеличение скорости работы. Вам не нужно беспокоиться о преобразовании индексных файлов из dBASE в FoxBASE+! Эта задача будет выполнена автоматически. _________________________________________________ ! Если при работе Вашей прикладной програмы в ! ! FoxBASE+, Вы попытаетесь занести в область ! ! USE или выбрать командой SET INDEX TO индекс- ! ! ный файл формата dBASE, FoxBASE+ немедленно ! ! автоматически переиндексирует базу данных и ! ! создаст эквивалентный индексный файл ! ! FoxBASE+. ! !_______________________________________________! По умолчанию эти новые индексные файлы создаются с расшире- нием IDX. Это позволяет мирно сосуществовать индексным файлам dBASE и FoxBASE+. Когда FoxBASE+ встречает индексный файл dBASE, на экран вы- водится сообщение: dBASE III index - rebuilding /индекс dBASE III - переформирование/ а затем переходит к преобразованию индексного файла. Конеч- но, если ваши базы данных имеют солидный объем, этот процесс пе- реиндексирования займет некоторое время. Однако в дальнейшем, поскольку автоматическое переиндексирование является однократной операцией, FoxBASE+ выполняет индексирование с очень высокой скоростью и, что более важно, вам не нужно предпринимать для этого никаких действий. Если вы работали в dBASE и использовали индексные файлы dBASE, и желаете, чтобы все индексные файлы FoxBASE+ отражали текущее состояние ваших баз данных, просто удалите все файлы с расширением IDX. После этого при запуске вашей прикладной прог- раммы в FoxBASE+ все индексные файлы будут преобразованы автома- тически. Некоторые прикладные задачи могту быть написаны с расчетом на то, что индексные файлы имеют расширение имени .NDX. В этих случаях введение в файл CONFIG.FX/CONFIG.DB строки INDEX = NDX приведет к использованию для индексных файлов расширения .NDX. Конечно, если вы выберете эту возможность, исходные индекс- ные файлы dBASE будут уничтожены в процессе автоматической пере- индексации. 2.5 Компиляция программных файлов FoxBASE+ Хотя FoxBASE+ сможет непосредственно выполнять все программ- ные файлы dBASE III PLUS (.PRG), мы рекомендуем выполнить их компиляцию перед запуском в FoxBASE+. Компилированные программы загружаются с диска со скоростью их чтения; исходные программы компилируются по мере их считыва- ния. В связи с этим, после однократной загрузки все программы будут компилированными и будут выполняться с высокой скоростью FoxBASE+. Однако, пакетный компилятор foxcomp выполняет более полную оптимизацию выходных объектных файлов .FOX. В связи с этим прог- раммы .FOX, компилированные foxcomp, будут в общем случае рабо- тать быстрее, чем в случае загрузки их и выполнения командой DO. Кроме того, разница во временах загрузки между программами .FOX и .PRG может быть довольно значительной. _________________________________________________ ! Компиляция программ позволит вам достичь мак- ! ! симальной скорости загрузки и выполнения ! ! программ и обнаружить синтаксические ошибки. ! !_______________________________________________! Программные файлы FoxBASE+ могут быть компилированы при по- мощи следующей команды: FOXCOMP <образец> [<образец2> ...<образецN>] от основной подсказки MS-DOS. Эта команда указывает утилите foxcomp компилировать указанные исходные программные файлы (.PRG) в объектные программные файлы .FОX. Расширение имени фай- лов .PRG не подразумевается по умолчанию, поэтому вам следует указать расширение .PRG. В состав <образцов> могут входить трафаретные символы MS-DOS "*" и "?". Это позволяет выполнять компилирование большого коли- чества программ посредством одной команды. Например, если вам нужно компилировать все программы системы вычисления зарплаты, и если имя каждой программы начинается с символов "PY", команда компиляции всех этих программ будет иметь вид: FOXCOMP py*.prg Утилита foxcomp может быть также использована для компиляции форматных файлов .FMT в объектные форматные файлы .FMX. Примеры: FOXCOMP test.prg FOXCOMP *.prg FOXCOMP ar*.prg gl*.prg FOXCOMP *.fmt _________________________________________________ ! FoxBASE+ всегда будет выполнять компилирован- ! ! ную версию программного фала .FOX, если тако- ! ! вая имеется. Если в программный файл внесены ! ! изменения программами, отличными от программы ! ! MODIFY COMMAND, вам следует либо перекомпили- ! ! ровать программу, или удалить файл .FOX для ! ! выполнения новой версии программы. ! !_______________________________________________! Если в программу вносятся изменения посредством программы MODIFY COMMAND, соответствующий файл .FOX будет автоматически удален и старая версия программы будет автоматически удалена из внутреннего программного буфера каше FoxBASE+. Этим обеспечивается выполнение последней версии командного файла при последующем вызове его командой DO. Рекомендуем вам, однако, выполнить компиляцию модифицированного командного файла для достижения максимальной скорости загрузки. Переадресация вывода компилятора Если вы собираетесь компилировать большое количество прог- рамм и хотите сохранить сообщения при компиляции для дальнейшего анализа вы можете направить их в файл с использованием оператора переадресации MS-DOS '>'. Для компиляции всех файлов .PRG и за- писи всех сообщений в файл OUTPUT.MSG введите команду: foxcomp *.prg > output.msg Адресация модулей ".FOX" Объектные модули ".FOX", созданные компилятором foxcomp, по умолчанию заносятся в текущий рабочий каталог. В некоторых слу- чаях желательно занести их в другой каталог или на другой диско- вод. С этой целью создана новая возможность, управляющая местом записи объектных модулей: foxcomp -o<дисковод_или_маршрут> <список_программ> При этом компилированные модули ".FOX" будут занесены в со- ответствующий каталог или на дисковод. Обратите внимание: * "-o", аналогично другим параметрам командной строки, должен стоять перед списком компилируемых программ. Символ "o" может в верхнем или нижнем регистре. * <дисковод_или_маршрут> может быть полным указанием маршрута, указанием дисковода или именем каталога. * если указан <дисковод_или_маршрут>, указанные дисководы и/или каталоги должны существовать перед запуском foxcomp. * за именами маршуртов может следовать обратная косая черта (\). Примеры: foxcomp -oB; foxcomp -oD:\APPLIC\PAYROLL foxcomp -oOBJECT В первом примере выходная информация помещается на дискету В: в текущий рабочий каталог. Во втором примере выходная инфор- мация заносится в каталог D:\APPLIC\PAYROLL. В третьем примере выходная информация заносится в каталог OBJECT, который является подкаталогом текущего рабочего каталога. Компиляция программных выражений неFoxBASE+ Объектный файл ".FOX" будет всегджа выходным, независимо от наличия ошибок при компиляции. Как обычно, будут выдаваться особщения о синтаксических ошибках. Если в процессе выполнения будут обнаружены ошибки, будут выданы сообщения о ошибках во время выполнения. Это означает, что в программы FoxBASE+ могут вводиться выра- жения, не поддерживаемые в FoxBASE+, и, если они не выполняются, сообщений об ошибках не будет. Защита модулей ".FOX" Учитывая ценность большинства прикладных программ FoxBASE+, мы ввели в foxcomp новую возможность, которая позволяет кодиро- вать модули ".FOX". Это делает воссоздание программы по объект- ному модулю практически невозможным. Кодирование задается при помощи нового параметра командной строки: foxcomp -e <список_программ> Преимущества использования процедурных файлов FoxBASE+ позволяет объединить в одном процедурном файле до 128 программ. Объединение программ, которые входят в одну прик- ладную задачу, в один процедурный файл, с использованием команды FOXCOMP для их компиляции и команды "SET PROCEDURE TO ..." для выбора соответствующего процедурного файла, значительно увеличи- вает скорость выполнения программы. Это происходит по двум ос- новным причинам: * Объединение нескольких программ в один процедурный файл зна- чительно уменьшает количество файлов, находящихся в рабочем каталоге. MS DOS работает в режиме просмотра каталога для ре- шения вопроса о существовании файла не очень эффективно. В связи с этим использование процедурного файла увеличивает скорость выполнения всех операций с файлами, значительно сок- ращая количество файлов, с которыми будет работать MS DOS при открытии, переименовании или удалении файлов. * Команда "SET PROCEDURE TO ..." открывает канал для процедур- ного файла и оставляет его в открытом состоянии. Поэтому, когда вы выполняете программу FoBASE+, содержащуюся в проце- дурном файле, командой DO, нет необходимости в выполнении по- иска в каталогах и открытии дополнительных файлов. Программа загружается почти с такой же скоростью, как один из собствен- ных оверлеев FoxBASE+. Эффективный способ построения процедурных файлов описан в следующем разделе, посвященном построителю процедурных файлов FoxBASE+, утилите foxbind. 2.6 Построитель процедурных файлов FoxBASE+ - foxbind Объединение ваших программ в один процедурный файл может быть очень утомительным. Более того, часто достаточно неудобно разрабатывать и отлаживать программы, собранные в один большой модуль. Независимо от этого, эффективность, дотигаемая при ис- пользовании процедурных файлов, очень значительна. В идеальном случае было бы удобно разарбатывать, отлаживать и сохранять прикладную задачу в виде множества независимых прог- раммных файлов .PRG, объединяя их в проедурные файлы при подго- товке к выпуску новой версии. В состав FoxBASE+, начиная с вер- сии 1.20, включена утилита foxbind, которая значительно облегча- ет работу с процедурными файлами. Эта утилита может быть использована для быстрого и автомати- ческого сбора программных файлов .PRG в процедурные файлы. Она выполняет последовательное копирование файлов .PRG в выходной файл, предваряя каждую программу комментарием для ее идентифика- ции и указателем процедуры, приблизительно следующим образом: *********************************************************** * progname * *********************************************************** PROCEDURE progname Как использовать foxbind Использовать утилиту foxbind очень просто. По подсказке MS DOS просто введите: FOXBIND <выхфайл> <образец>[<образец2>...<образецn>] где <выхфайл> является именем процедурного файла, который вы желаете сформировать. Если вы не введете расширение имени выход- ного файла, будет автоматически использовано расширение *.PRG. Если файл с указанным именем уже существует, программы, пе- речисленные в образцах, будут добавлены в виде процедур к уже существующей в файле информации. Поля <образец> представляют имена входных файлов, которые будут объединены в процедурный файл. Каждое из них может быть трафаретом имени файла MS DOS и может включать в себя трафарет- ные символы "*" и "?". Это позволяет выполнять объединение боль- шого количества программ одной командой. _________________________________________________ ! Расширение имени файла .PRG для входных фай- ! ! лов не подразумевается, в связи с этим необ- ! ! ходимо указывать расширение *.PRG при вводе ! ! имен объединяемых файлов. ! !_______________________________________________! Например, если необходимо объединить все программы из систе- мы расчета зарплаты в один процедурный файл, и имя каждой прог- раммы начинается с "PY", это может быть выполнено простой коман- дой: FOXBIND payroll py*.prg Полученный процедурный файл будет иметь имя "PAYROLL.PRG". В качестве типового последнего шага при копировании вам сле- дует произвести компиляцию таких процедурных файлов при помощи утилиты foxcomp для обеспечения максимальной скорости загрузки программы. Рекомендации по работе с процедурами Если Вы хотите использовать процедурный файл для поставки ваших прикалдных программ, вы можете заинтересоваться, как упа- ковать всю прикладную задачу в один процедурный файл. Более кон- кретно, если все ваши программы находятся в процедурном файле, как может быть выполнена инструкция "SET PROCEDURE TO ..." без использования дополнительных файлов .PRG и .FOX, внешних по от- ношению к процедурному файлу ? Это может быть выполнено следующим образом: * Занесите инструкцию "SET PROCEDURE TO ..." вместе с инструк- цией DO для вашей исходной программы (подразумевается, что она занесена в процедурный файл) перед первым оператором PROCEDURE. * Укажите сам процедурный файл в качестве начальной программы (или введите команду DO для выполнения его от точечной подс- казки.) Это вызовет выполнение инструкций до первого оператора PROCEDURE, т.е. будут выполнены команды SET PROCEDURE и DO, не- обходимые для запуска вашей прикладной задачи. Пример: <в процедурном файле PAYROLL> SET PROCEDURE TO payroll DO main PROCEDURE main *. *. PROCEDURE sub1 *. *. и т.д. < в файле .BAT для запуска вашей программы> FOXPLUS PAYROLL 2.7 Выполнение программ FoxBASE+ Программа FoxBASE+ может быть выполнена несколькими различ- ными способами. Методы выполнения программ, использующие пол- ностью интерактивный FoxBASE+, рассматриваются в первую очередь, затем рассмотрены методы использования runtime FoxBASE+. Полностью интерактивная версия FoxBASE+ Одним из способов выполнения программы в полностью интерак- тивной весрии FoxBASE+ является использование команды: FOXPLUS или MFOXPLUS по подсказке операционной системы. Введите MFOXPLUS, если вы используете какую-либо версию FoxBASE+ для многоплоьзовательских версий MS DOS ( Novell, IBM PC Net, и т.д.); в противном случае введите FOXPLUS. При этом в память загружается интерактивная среда (FOXPLUS.EXE или MFOXPLUS.EXE, в зависимости от используе- мой версии FoxBASE+). После загрузки среды FoxBASE+ вводится ин- терактивная среда FoxBASE+, и вы можете приступить к вводу ко- манд и функций FoxBASE+. _________________________________________________ ! Необходимо указывать все части FoxBASE+, ис- ! ! пользуя переменную среды PATH. Поэтому, убе- ! ! дитесь, что каталог, в котором был инсталиро- ! ! ван FoxBASE+, включен в вашу PATH. ! !_______________________________________________! Другим способом запуска программы FoxBASE+ является исполь- зование команды: FOXPLUS <имя_файла_программы> или MFOXPLUS <имя_файла_программы> по подсказке операционной системы. И в этом случае конкрет- ная форма команды, которую вам следует выбрать зависит от ис- пользуемой полностью интерактивной версии FoxBASE+. Ввод команд FOXPLUS или MFOXPLUS приводит к загрузке в память интерактивной среды FoxBASE+ и запускает выполнение указанного программного файла. Указывать расширение имени файла .PRG не нужно. При нали- чии компилированной версии программного файла .FOX он будет заг- ружен; в противном случае будет загружен исходный программный файл .PRG. FoxBASE+ периода исполнения Runtime FoxBASE+ является специальной версией FoxBASE+; она может выполнять только компилированные программы .FOX. Кроме то- го, из этой версии удалены несколько возможностей, совместимых только с интерактивной разработкой программ. В Runtime FoxBASE+ не поддерживаются следующие функции: - управляемая меню SET - SET STEP ON - HISTORY - SET ECHO ON Дискета Runtime FoxBASE+ содержит два файла оверлеев, один с именем FOXPRUN.OVL,а другой с именем FOXPRUN.OV2. FOXPRUN.EXE и FOXPRUN.OVL включают в себя все поддерживаемые возможности FoxBASE+, за исключением: - CREATE/MODIFY STRUCTURE - CREATE/MODIFY REPORT - CREATE/MODIFY LABEL - BROWSE Использование FOXPRUN.OV2 не является обязательным и содер- жит перечисленные выше возможности. Если вы не используете эти возможности в своих прикладных системах, вы можете не предостав- лять FOXPRUN.OV2 вместе с FoxBASE+ Runtime на дискете с компили- рованным кодом. Экономия места на диске за счет отказа от FOXPRUN.OV2 составляет приблизительно 32 К. После того, как программа FoxBASE+ компилирована, она может быть выполнена в среде Runtime следующим образом: FOXPRUN <файл_программы> или MFOXPRUN <файл_программы> Введите MFOXPRUN, если вы используете какие-либо многополь- зовательские версии FoxBASE+.(Multilink Advanced, IBM PC Net, и т.д.); в противном случае введите FOXPRUN. При этом в память бу- дет загружена среда FoxBASE+ Runtime и начнется выполнение ука- занного программного файла. И в этом случае ввод расширения име- ни файла .FOX не является обязательным. Программа может выпол- няться при запуске компьютера, если вы введете строку: COMMAND=DO <имяфайла> в файл CONFIG.FX/DB. Для более подробного ознакомления с работой FoxBASE+ перио- да исполнения см. главу 7 "Распространение ваших прикладных программ". Временный файл FoxBASE+ Во время выполнения программы на жестком диске создается временный файл, используемый FoxBASE+. Имя временного файла сос- тоит из нуля, являющегося ведущим символом, и семи других симво- лов, выбранных случайным образом. Этот файл автоматически унич- тожается, когда FoxBASE+ нормально заканчивает работу. Однако, если выполнение FoxBASE+ оборвано преждевременно, и не выполнились обычные процедуры окончания работы, временный файл останется на диске. Хотя такие временные файлы не занимают дисковое пространство (с помощью команды DIR видно, что они за- нимают 0 байтов), но они используют место в каталогах. После нестандартного окончания работы FoxBASE+ эти файлы следует удалить с диска вручную. Использование пакетного командного файла Вместо ввода команд FOXPLUS, MFOXPUS, FOXPRUN или MFOXPRUN с соответствующим именем файла, вы можете создать командный файл для выполнения тех же программ. Одной из множества причин, по которой рекомендуется это сделать, является простота. Командный файл - это просто файл, содержащий одну или нес- колько команд, которые выполняются MS DOS. Такие командные файлы имеют расширение имени .BAT. Командные файлы могут быть созданы при помощи любого текс- тового редактора. Например, для созданыя командного файла MS DOS, введите: EDLIN <ком_файл>.BAT по системной подсказке. При этом будет вызван текстовый редактор EDLIN и вы сможете ввести команды, которые должны будут быть вы- полнены. Чтобы пояснить этот процесс, предположим, что мы хотим соз- дать командный файл, который последовательно вызывает полностью интерактивную версию FoxBASE+ и рассчетную программу ACCT1. Это- го можно достичь, введя команды: EDLIN ACCNT.BAT по системной подсказке, затем ввести в редакторе FOXPLUS ACCT1 и выйти из редактора. (Более подробно работа с редактором текстов EDLIN описана в руководстве по MS DOS). Теперь, если вы введете рядом с промптовым знаком MS-DOS ACCNT в память загрузится FoxBASE+ и начнется выполнение программы ACCT1. Аналогичным образом этот метод может быть использован для работы с версией Runtime FoxBASE+. Вместо ввода FOXPLUS в текс- товом редакторе, введите, например, FOXPRUN или MFOXPRUN, в за- висимости от используемой версии FoxBASE+. 2.8 Режим быстрого вывода на экран в MS DOS FoxBASE+ Обычно в версиях MS/PC DOS FoxBASE+ используются оптимизи- рованные очень быстрые программы работы с экраном. Как использовать режим быстрого вывода на экран Быстрый вывод на экран активируется автоматически по умол- чанию. Для использования быстрого вывода на экран вам не прий- дется вносить изменения в свои программы или процедуры. Ограничения Возможность быстрого вывода на экран разработана для опти- мальной работы в архитектуре IBM PC и PC/AT. Она не сможет быть использована в некоторых типах компьютеров, "совместимых" с PC, которые по разработке отличаются от машин типа IBM. Коротко го- воря, если ваш компьютер не полностью совместим с PC, может ока- заться, что вы не сможете пользоваться процедурами быстрого вы- вода на экран. Пользователи многопользовательской версии MS DOS FoxBASE+, работающие не за главной консолью, будут вынуждены использовать ключ NOTIBM во избежание помех выводу на основную консоль. Кроме того, некоторые платы цветных графических адаптеров создают на экране "снежные хлопья", при выводе с использованием быстрых процедур на компьютеры IBM PC или PC/AT. В этом случае вы можете выбирать между быстрым выводом и выводом без помех (большинство из нас предпочитает быстрый вывод). Выключение режима быстрого вывода на экран FoxBASE+/386, защищенный режим версии 80386 всегда исполь- зует режим быстрого вывода на экран. Если вы используете 80386, пропустите остальную часть этого раздела. Если вы убедились, что FoxBASE+ работает неудовлетворитель- но на вашем совместимом с IBM PC компьютере, одной из возможных причин может быть процедура быстрого вывода на экран. В этом случае вам следует отказаться от использования процедуры быстро- го вывода на экран при запуске FoxBASE+ при помощи одной из сле- дующих команд: FOXPLUS -notibm или FOXPLUS -NOTIBM Если отказ от быстрого вывода на экран не будет решением проблемы, обратитесь к нам за подтвержеднием, что ваш тип компь- ютера поддерживает стандартную версию FoxBASE+. 2.9 Если вы решили возвратить FoxBASE+ Если, ознакомившись с демонстрационной версией, вы решили не приобретать FoxBASE+, то сделайте следующее. _________________________________________________ ! При любых возвратах требуется санкцинирован- ! ! ный номер. Свяжитесь со своим дилером по ! ! FoxBASE+ или, если вы купили пакет непосредс- ! ! твенно у фирмы Fox Software, Inc, позвоните в ! ! Fox Software. Санкционированный номер должен ! ! быть четко нанесен на конверт. Документация и ! ! все остальные материалы должны при возврате ! ! сохранить товарный вид. ! !_______________________________________________! Если вы купили FoxBASE+ в Fox Software До тех пор, пока вы пользуетесь только демонстрационной версией, купив FoxBASE+ непосредственно в фирме в Fox Software, мы готовы вернуть ваши деньги в случае, если вы решите не поку- пать FoxBASE+. Однако, как только вы открываете конверт с "рабо- чим" ключем активации для FoxBASE+, продажа считается закончен- ной, и возврат не принимается. Более того, вы можете вернуть FoxBASE+ только в течение 30 дней с момента его приобретения. Если вы решили вернуть пакет, с вас будет удержана пошлина, размер которой указан на накладной. Если материалы не будут воз- вращены в товарном виде, с вас дополнительно будет удержано 25 долларов. Если вы купили FoxBASE+ у дилера или распространителя Если вы купили FoxBASE+ у дилера или распространителя, то для возврата пакета свяжитесь с ними. Купленные у этих лиц паке- ты можно не возвращать непосредственно в Fox Software. 3 ОПРЕДЕЛЕНИЯ И СОГЛАШЕНИЯ FoxBASE+ В данной главе описаны соглашения, применяемые в настоящем руководстве для описания команд и функций в последующих главах. В дополнение рассмотрены несколько вопросов, касающихся исполь- зования языка FoxBASE+. К ним относятся сообщения об ошибках, описание клавиш управления курсором, поддержка команды path, од- новременное использование различных баз данных, диапазон и уров- ни приоритета операторов. 3.1 Типографские соглашения, использованные в данном руководстве. В данном руководстве при объяснении различных команд и фун- кций FoxBASE+ использованы различные типографские соглашения. Эти соглашения кратко описаны далее. Текст в верхнем регистре Указывает на команду/функцию FoxBASE+. При вводе команды этот текст должен быть введен точно, как он приведен. Например COPY, SET, @. <...> Обозначает часть команды/функции FoxBASE+, в которой должна быть введена реальная информация. Ни скобки <>, ни текст в нижнем регистре, приведенный внутри скобок, ввдить не надо. Например, ТО <пер_пам> означает, что нужно ввести слово ТО, а затем имя конкретной переменной памяти. [...] Обозначает часть команды/функции FoxBASE+, ввод которой не является обязательным. Как и в случае <...>, текст внутри [] описывает тип реальных данных, которые должны быть введены. Ни символы [], ни текст в нижнем регистре, приведенный внутри, вводить не надо. "....." Обозначает часть команды/функции FoxBASE+, которая должны быть заключена в кавычки. Могут быть использованы одиночные или двойные кавычки, однако для каждого выражения должен использоваться один тип кавычек. Т.е. нельзя начинать текст одиночными кавычками, а заканчивать текст двойными кавычками. (.....) Обозначает часть команды/функции FoxBASE+, которая должны быть заключена в скобки. В данном руководстве часто приводятся указания использовать определенную клавишу клавиатуры. Эти клавиши обычно обозначаются с использованием букв в верхнем и нижнем регистрах (например, PgUp, Del, Enter). Иногда перед обозначение клавиши стоит слово "нажмите". Управляющие клавиши обозначаются значком "^", за которым следует соответствующий символ клавиши (например ^S обозначает Ctrl-S). Для введения этой комбинации, просто нажмите клавишу Ctrl, и, удерживая ее, нажмите соответствующую дополнительную клавишу. Более подробно этот вопрос описан в разделе, посвящен- ном управляющим клавишам. Поскольку клавиатуры различных компьютеров несколько разли- чаются между собой, здесь нет возможности описать все существую- щие клавиши различных клавиатур. В связи с этим клавиша, нажатие на которую по данному руководству должно приводить к соответст- вующему эффекту, может отличаться от клавиши на вашей клавиату- ре, нажатие которой приводит к аналогичному эффекту. Например, следующие клавиши: Carriage Return, Enter, New Line выполняют одну и ту же функцию - они перемещают курсор на следующую строку вашего экрана. Однако мы рекомендуем ознакомиться с функциями, выполняемыми при нажатии каждой из клавиш вашей клавиатуры с тем, чтобы легче понимать описание функций клавиш, приведенное в данном руководстве. 3.2 Сокращения, использованные в данном руководстве В данном разделе, посвященном командам и функциям FoxBASE+, широко используются сокращения. Далее приведен список этих сок- ращений с расшифровкой. Многие команды и функции FoxBASE+ позволяют или требуют ис- пользования выражения, как части выражения. Выражение - это со- вокупность операндов (переменных, констант, функций) и операто- ров, которая относится к одному из типов данных - символическо- му, числовому, логическому или даты. Большинство команд и функ- ций требуют использования выражений определенного типа; однако, команды, аналогичные STORE и ? могут работать с выражениями лю- бого типа. За исключением выражений типа даты, операнды, входя- щие в выражение, должны быть одинакового типа; выражения типа даты могут содержать как операнды типа даты, так и числовые опе- ранды. Некоторые команды требуют списка выражений, т.е. одного или нескольких выражений, разделенных запятыми. Переменная или константа обозначают область для хранения определенной порции данных. Содержание переменных может меняться в процессе выполнения программы, а содержание констант всегда неизменно. Переменная может быть полем базы данных или перемен- ной памяти и должна упоминаться по имени, которое может содер- жать до 10 букв, цифр или символов подчеркивания и начинаться с буквы. (Для сохранения совместимости с dBASE III PLUS восприни- маются 11 символов, однако сохраняются только 10). Функция может быть использована в выражении, если результат ее выполнения имеет соответствующий тип данных. Информация об отдельных функциях приведена в главе 5. Операторы FoxBASE+ и их уровни приоритета приведены в разделе "Операторы" данной главы. ---------------------------------------------------------------- | | | Cокращение Значение | | | ---------------------------------------------------------------- | | |attrib /аттриб/ атрибут | |char_str /симв_выраж/ строка символов | |col колонка экрана | |coord /коорд/ координата | |dd/mm/yy двузначные день, месяц, год | |delim /ограничитель/ ограничитель | |dir имя каталога | |drive /дисковод/ дисковод (версия MS-DOS) | |eof конец файла | |expC выражение типа строки символов | |expD выражение типа дата | |expL выражение логического типа | |expN числовое выражение | |expr /выраж/ выражение | |expr_list /список_выраж/ список выражений | |fcodes функциональные коды | |fieldlist список полей базы данных | |file имя файла на диске | |filelist список имен файлов на диске | |len /длина/ длина | |mem_var /перем_пам/ переменная памяти | |mem_var_list список переменных памяти | |n положение физической памяти | |ndx_file_list список индексных файлов | |num число | |parm_list список параметров | |path имя маршрута MS-DOS | |row строка экрана | |skel /скел/ скелет | |val /значение/ значение | |var /перем/ переменная | -------------------------------------------------------------- 3.3 Использование "диапазона" при вводе команд Во многих командах вы увидите слово "диапазон"(scope) при определении команды. Оно используется для указания того, на ка- кую или сколько записей базы данных, используемой в текущий мо- мент, распространяется действие конкретной операции. Диапазон может быть описан с использованием одного из сле- дующих форматов: ALL NEXT RECORD REST ALL Указывает, что операция относится ко всем записям базы данных. NEXT Указывает, что операция будет выполнена для следующих записей базы данных. RECORD Указывает, что операция будет выполнена для записи базы данных. REST Указывает, что операция будет выполнена для всех записей, начиная с текущей записи, и кончая последней записью базы данных. 3.4 Условные операторы FOR и WHILE Диапазон для операции в базе данных может быть установлен при помощи условных операторов. Условные операторы WHILE <усло- вие> и FOR <условие> указывают, какие записи будут обрабатывать- ся в процессе выполнения команды, посредством анализа логическо- го <условия> для каждой записи. Оператор WHILE указывает, что записи будут считываться до тех пор, пока условие выполняется. Первый же случай невыполнения условия прекращает выполнение операции. Оператор FOR указывает, что должны быть использованы все записи, для которых условие выполняется. Независимо от значения условия просматривается вся база данных. Операторы WHILE и FOR могут быть использованы совместно в выражениях FoxBASE+ и могут также использоваться совместно с другими индикаторами диапазона (ALL, NEXT, RECORD, или REST). При совместном использовании FOR и WHILE приоритет имеет WHILE. 3.5 Использование псевдонима (alias) при вводе команд В FoxBASE+ имеются 10 рабочих областей с номерами с 1 по 10 и с именами с A по J, в которых могут быть одновременно занесены базы данных ( по одной базе данных на рабочую область). Посколь- ку FoxBASE+ попытается открыть базу данных в выбранной в текущий момент рабочей области, пользователь должен явно указать рабочую обалсть по номеру, если он собирается одновременно работать с несколькими базами данных. Если база данных открыта, соответст- вующая рабочая область может быть выбрана при помощи псевдонима, который назначается командой USE ...ALIAS или, по умолчанию, вы- бирается аналогичным имени файла. Для использования полей базы данных, которая находится не в выбранной в текущий момент рабо- чей области, перед именем поля следует ввести имя рабочей облас- ти с оператором "->". Примеры: *.SELECT 1 *.USE Dept *.SELECT b *.USE Employee ALIAS Emp *.SELECT 3 *.USE Salary ALIAS Sal *.DISPLAY STATUS Select area: 1, Database in Use: C:\FOX\DEPT.DBF Alias: DEPT Select area: 2, Database in Use: C:\FOX\EMPLOYEE.DBF Alias: EMP Currently selected Database: Select area: 3, Database in Use: C:\FOX\SALARY.DBF Alias: SAL *.SELECT Emp *.? DBF( ) C:\FOX\EMPLOYEE.DBF *.SELECT 3 *.? DBF( ) C:\FOX\SALARY.DBF *.DISPLAY Cur_sal, Emp->Last Record# CUR_SAL EMP->LAST 1 30000.00 Johnson *.DISPLAY Cur_sal, b->Last Record# CUR_SAL EMP->LAST 1 30000.00 Johnson 3.6 Операторы Операторы в FoxBASE+ группируются в четыре основных катего- рии: логические, арифметические, отношения и строковые. ЛОГИЧЕСКИЕ операторы (в соответствии с приоритетом) () скобки - используются для группировки выражений *.NOT. логическое отрицание *.AND. логическое И *.OR. логичесоке ИЛИ АРИФМЕТИЧЕСКИЕ операторы (в соответствии с приоритетом) () скобки - используются для группировки выражений **,^ возведение в степень *,/ умножение и деление +,- сложение и вычитание Операторы ОТНОШЕНИЙ < меньше, чем > больше, чем = равно <>,# не равно <= меньше или равно >= больше или равно $ сравнение частей строк Операторы СТРОК + конкатенация строк (прямая) - конкатенация строк (завершающие пробелы перемещаются из первой строки в конец второй строки). 3.7 Полная поддержка в FoxBASE+ команды MS-DOS Path Посредством использования команд SET DEFAULT и SET PATH, FoxBASE+ позволяет пользователю указать набор каталогов (отлич- ных от текущего рабочего каталога), в которых должен произво- диться поиск файлов. Команда SET DEFAULT может быть использована для назначения дисководом по умолчанию дисковода, отличного от умалчиваемого дисковода операционной системы. Важно при этом помнить, что хотя все операции FoxBASE+ происходят на дисководе, указанном коман- дой SET DEFAULT, умалчиваемый дисковод операционной системы ос- тается прежним, если он не изменен командой MS-DOS chdir, выпол- ненной посредством команды RUN. Команда SET PATH может быть использована для указания пе- речня каталогов, в которых должен производиться поиск файла пос- ле того, как он будет произведен в текущем каталоге. Каталоги могут быть указаны либо относительно, либо полностью. Если имя маршрута начинается с точки, (.), косой черты (/), или обратной косой черты (\), как например: SET PATH TO \SYSTEM\DATA SET PATH OT ..\ или если оно начинается с имени дисковода, как например: SET PATH TO C:\SYSTEM\DATA то имя маршрута считается указанным полностью. Если имя маршрута начинается просто именем каталога, как например: SET PATH TO DATA то имя маршрута считается заданным относительно текущего рабочего каталога и рассматривается в FoxBASE+, аналогично полному имени маршрута SET PATH TO .\DATA Если FoxBASE+ пытается обнаружить файл, чье имя указано не полностью, сначала производится поиск в рабочем каталоге на дис- ководе по умолчанию, указанном командой SET DEFAULT. Если поиск не приводит к нахождению файла, то используются имена маршрутов в том порядке, в котором они приведены в команде SET PATH. Для поиска имена маршрутов просто присоединяются перед именем иско- мого файла. Если сформированное таким образом полное имя файла не содержит имени дисковода, подразумевается принятый по умолча- нию дисковод. Правила использования имен маршрутов, описанные выше, отно- сятся к поискам существующих файлов только с одим исключением. Команда DIR всегда производит поиск в рабочем каталоге принятого по умолчанию дисковода, если совместно с именем маршрута не вве- ден шаблон. Если файлы создаются FoxBASE+, они также заносятся в рабо- чий каталог принятого по умолчанию дисковода, если в имени файла не указан иной маршрут. Более подробная информация по этому вопросу приведена в описаниях команд SET PATH и SET DEFAULT. 3.8 Сообщения об ошибках Если при работе с FoxBASE+ происходит ошибка, способ сооб- щения об ошибке зависит от типа произошедшей ошибки и статуса FoxBASE+ в момент ошибки. О синтаксических ошибках, обнаруживаемых компилятором при работе утилиты FOXPCOMP, либо возникающих в интерактивном командном режиме, сообщается по мере их обнаруже- ния. С другой стороны, о синтаксических ошибках, обнаруженных по сле загрузки исходной программы (и ее динамического компилирова- ния) обычно не сообщается, за исключением тех случаев, когда сделана попытка выполнить строку с ошибкой. Сообщения о логических ошибках выдаются в различных форма- тах в зависимости от того, происходят ли они в интерактивном ре- жиме, в процессе выполнения программы или при вводе полноэкран- ной команды. Далее приведены пояснения, касающиеся этих режимов. Когда синтаксические ошибки обнаруживаются утилитой FOXCOMP, сообщение о каждой ошибке выдается путем вывода номера строки программы, сообщения об ошибке и исходной строки в следу- ющем формате: Error in line xx: Error message. Source code line /Ошибка в строке хх: Сообщение об ошибке Строка исходного текста/ Номер строки является физическим номером строки в програм- ме. Это означает, что строки комментариев и строки продолжения подсчитываются отдельно. Ошибка, находящаяся в строке, которая физически разделена на несколько строк, указывается, как ошибка, находящаяся в последней строке продолжения. Общее количество ошибок компиляции выводится в конце процедуры компиляции. foxpcomp всегда создает объектный файл (.FOX), вне зависимости от успешности компиляции. Если в процессе выполнения встретится строка с ошибкой, то появится сообщение об ошибке выполнения (run-time). Это означает, что строки, не поддерживаемы FoxBASE+, могут включаться в программы на FoxBASE+; и если они никогда не выпол- няются, сложностей не возникнет. При загрузке исходной программы (и ее компиляции в реальном времени), в интерактивном командном режиме, FoxBASE+ не сообщает об ошибках. Однако, как и в случае пре-компилированных программ, если в процессе выполнения встретится строка с ошибкой, то поя- вится сообщение об ошибке выполнения (run-time). Синтаксическая ошибка, набранная в строке в интерактивном командном режиме, приводит к выводу на экран соответствующкго сообщения и возврата управления к промптовому знаку dot. Логические ошибки, возникающие в интерактивном командном режиме заставляют систему повтрно вывести на экран командную строку вместе с сообщением об ошибке. Управление остается у промптового знака dot. Логические ошибки, возникающие внутри команды для всего эк- рана, вызывают появление сообщения об ошибке под статусной стро- кой. У пользователя появляется возможность своевременно испра- вить ошибку. Синтаксические и логические ошибки, возникающие в процессе выполнения программы, приводят к выводу на экран соответствующе- го сообщения об ошибке, за которым следует строка с номером ошибки, и имя выполняемой программы. Вслед за этим выводится стандартное сообщение об ошибке, которое предоставляет пользова- телю три возможности на выбор: Error message. Programm statement. Called from: Progname.prg Cancel, Ignore, or Suspend? (C, I or S) /Сообщение об ошибке Оператор программы. Вызван из: Имя програм.prg Прервать, Игнорировать или приостановить?/ Выбор Cancel приводит к немедленному окончанию выполнения программы, управление передается в интерактивный командный режим (в создаваемой системе) или в операционную систему (в выполняе- мой системе). Выбор Ignore приводит к продолжению выполнения программы со следующей строки и игнорирует текущую строку. Выбор Suspend позволяет временно приостановить выполнение программы. Управление передается в интерактивный командный ре- жим, с тем, чтобы была возможность принять меры по отладке. Ко- манда RESUME возволяет вернуть управление программе, в которой была обнаружена ошибка. Однако в системе runtime выбор Suspend обрабатывается так же, как и выбор Cancel. (Более подробно этот вопрос рассматривается в описаниях команд SUSPEND и RESUME). Полный список и описание сообщений об ошибках FoxBASE+ приведено в приложениях к данному руководству. 3.9 Клавиши управления курсором (MS-DOS FoxBASE+) В данном разделе описаны функции клавиш управления курсором в версии FoxBASE+ для MS-DOS. Использование управляющих клавиш позволяет избежать повторного ввода данных, облегчает перемеще- ние от записи к записи, упрощает переключение из режима в режим, и т.д. Хотя большинство управляющих клавиш, описанных далее, действуют в процессе экранного редактирования, некоторые управ- ляющие клавиши могут быть использованы только в определенных ко- мандах, а остальные клавиши действуют в любом режиме. Эти исклю- чения описаны в приведенных далее описаниях. Команды, в которых может быть выполнено полноэкранное ре- дактирование: APPEND, BROWSE, CHANGE, CREATE, EDIT, INSERT, MODIFY, READ (Клавиши управления курсором, связанные с каждой из этих операций, могут быть выведены в верхнюю строку экрана в ви- де "маркера навигации", если нажать функциональную клавишу F1). В дополнение многие из клавиш управления курсором могут быть ис- пользованы в процессе ввода команды для редактирования командной строки. Далее следует список кратких описаний имеющихся управляющих символов. В целях облегчения пояснения их действия используется образец данных и соответствующий оператор PICTURE, приведенные далее. STORE "*ABC12.34567" TO a &1,1 GET a PICTURE "*XXXXX.99999" 3.10 Общее описание клавиш управления курсором Перемещение вперед Ctrl-D (^D) Перемещает курсор вперед на один символ (перескакивает через любой непечатный символ). Например, если курсор находисля на "2", то перемещается на "3". Если курсор находится в конце строки, курсор перемещается к началу следующей строки. В команде BROWSE курсор из конца строки перемещается на следующую строку в пределах поля. В меню Ctrl-D передает управление на одно меню или возможность вправо. Стрелка Аналогично Ctrl-D. вправо Ctrl-L (^L) Аналогично Ctrl-D. Ctrl-X (^X) Перемещает курсор на следующее поле или строку. Для числовых трафаретов сохраняются только те символы трафарета PICTURE, расположенные слева от курсора (за исключением случая, когда все поле заполнено символами). Для алфавитных и алфавитно-цифровых трафаретов сохраняются все символы. В меню курсор перемещается вниз на один пункт. Если курсор был на последней строке меню, он перемещается на первую строку. Стрелка Аналогично Ctrl-X вниз Ctrl-J (^J) Аналогично Ctrl-X. Ctrl-F (^F) Курсор смещается на одно слово вправо. Если курсор находится в конце строки, Ctrl-F перемещает курсор на начало следующей строки. В команде BROWSE курсор из конца строки перемещается на следующую строку в пределах поля. В меню управление передается последнему меню или пункту меню справа. End Аналогично Ctrl-F. Ctrl-C (^C) Перемещает вперед на один экран и сохраняет все внесенные изменения. В меню Ctrl-C перемещает кусрор на нижнюю возможность в окне, или если курсор находился там, на первую возможность в следующем окне. PgDn Аналогично Ctrl-C Ctrl-B (^B) В BROWSE курсор перемещается на одно поле вправо. В MODIFY COMMAND курсор перемещается в конец строки. В CREATE/MODIFY REPORT и LABEL, перемещает выведенные из базы данных данные вправо. Ctrl-правая Аналогично Ctrl-B. стрелка Ctrl-M (^M) В общем случае перемещает курсор на следующее поле или строку. Кроме того, в команде APPEND вызывает выход с сохранением, если курсор расположен в первой позиции пустой записи. В команде EDIT выполняется выход с сохранением, если курсор расположен в последнем поле последней записи. В команде MODIFY COMMAND происходит вставка строки, если включен режим INSERT; в противном случае курсор перемещается на начало следующей строки. В меню происходит выбор возможности или изменяет значение возможности. ВВОД Аналогично Ctrl-M Ctrl-KE (^KE) Только в команде MODIFY COMMAND курсор перемещается в конец файла. Перемещение назад Ctrl-S (^S) Перемещает курсор назад либо на один символ (пропуская все непечатаемые символы), или, если курсор в начале строки, в конец предыдущей строки (за исключением BROWSE, где курсор перемещается к первому символу предыдущей строки). Например, если курсор находисля на "3", то перемещается на "2". Ctrl-S кроме того останавливает или возобновляет перемещение информации по экрану. В меню Ctrl-S передает управление на одно меню или возможность влево. стрелка Аналогично Ctrl-S. влево Ctrl-E (^E) Перемещает курсор к предыдущему полю. Если курсор расположен в верхнем поле экрана, Ctrl-E вызывает перемещение курсора к первому полю предыдущего экрана(за исключением BROWSE, где происходит перемещение экрана вниз для вывода предыдущей записи, а курсор остается на месте). В меню Ctrl-E перемещает курсор вверх на одну возможность. Если курсор расположен на верхней возможности, Ctrl-E перемещает курсор на нижнюю строку меню. стрелка Аналогично Ctrl-E. вверх Ctrl-K (^K) Аналогично Ctrl-E. Ctrl-A (^A) Перемещат курсор назад на одно слово, или, если курсор в начале строки, в конец предыдущей строки. (В команде BROWSE курсор перемещается к первому символу предыдущей строки). В меню курсор перемещается ан одно меню или пункт меню влево. Home Аналогично Ctrl-A Ctrl-R (^R) Перемещает на предыдущий экран и сохраняет все внесенные изменения. В меню перемещает на верхнюю строку меню в пределах окна, или, если уже там, к последней строке предыдущего окна. PgUp Аналогично Ctrl-R. Ctrl-Z (^Z) В BROWSE перемещает на одно поле влево. В MODIFY COMMAND перемещает курсор к началу строки. В CREATE/MODIFY REPORT и LABEL перемещает картину структуры базы данных влево. Ctrl-левая Аналогично Ctrl-Z. стрелка Ctrl-KT (^KT) Только в MODIFY COMMAND перемещает курсор к началу файла. Вставка Ctrl-N (^N) Вставка новой строки в MODIFY COMMAND или определение поля в MODIFY STRUCTURE. Ctrl-V (^V) Включение и выключение режима вставки. Используя пример, Вы можете вставить "9" между "3" и "4", при этом "7" будет отброшено. Однако, Вы не сможете вставить "Z" между "2" и "3", поскольку буква не может быть введена в цифровое поле. Ctrl-V всегда различается FoxBASE+, а не только в экранных редакторах.Текущий статус режима вставки отражается на строке статуса или состояния, если они включены. Ins Аналогично Ctrl-V. Удаление Ctrl-G (^G) Удаляет введенный символ. Используя пример, при установке маркера на "5", "5" будет удалено и его место займет "6". Удаления, которые приведут к вводу данных, которые недопустимы в осоответствии с оператором PICTURE (например, буква, которая будет перемещена в цифровое поле) недопустимы. Del Аналогично Ctrl-G. Ctrl-H (^H) Удаляет последний введенный символ. Backspace Аналогично Ctrl-H. Ctrl-T (^T) Удаляет одно слово справа от текущей позиции курсора. В MODIFY COMMAND, если курсор находится в конце строки, удаляет символ мягкого или жесткого возврата каретки и осталвяет курсор в начале следующей строки. Ctrl-U (^U) Помечает/отменяет метку текущей записи для ее удаления в команднах BROWSE, EDIT, INSERT, CHANGE, APPEND. Напрмер, нажав Ctrl-U, можно пометить запись для удаления. Нажатие Ctrl-U второй раз отменяет сделанную ранее пометку. В MODIFY STRUCTURE удаляет определение поля, в MODIFY LABEL удаляет строку содержания, в MODIFY REPORT удаляет описание поля отчета. Ctrl-Y (^Y) Удаляет все символы до конца поля, включая сивол в позиции курсора. Используя пример, при размещении курсора на "С" нажатие этой клавиши приведет к результату "*AB", а десятичная точка останется в позиции шестого символа. В MODIFY COMMAND удаляет всю строку. Выход Ctrl-Q (^Q) Прекращает текущее редактирование и восстанавливает исходное состояние данных, которое существовало до изменений в процессе редактирования. Esc Аналогично Ctrl-Q. Ctrl-W (^W) Выход из редактирования с сохранением всех изменений, внесенных в процессе сеанса редактирования. Кроме того, выход при редактировании полей примечания. Ctrl-End Аналогично Ctrl-W. Редактирование текстов Ctrl-KB (^KB) Переформатирование абзаца. Ctrl-KF (^KF) Нахождение первого вхождения указанной строки. Ctrl-KL (^KL) Поиск следующего вхождения указанной строки. Ctrl-KR (^KR) Считывает другой файл в текущий файл. Ctrl-KW (^KW) Записывает текущий файл в другой файл. Разное Ctrl-P (^P) Запуск/выключение принтера из FoxBASE+. Ctrl-P всегда воспринимается FoxBASE+, а не только в режиме экранного редактирования. Если принтер не готов, при нажатии этой комбинации выводится звуковой сигнал. Ctrl-Home Включение/выключение меню. F10 Аналогично Ctrl-Home. Ctrl-] (^]) Аналогично Ctrl-Home. Ctrl-PgDn Вход для редактирования полей примечания в BROWSE, APPEND, EDIT, CHANGE, INSERT. Ctrl-- (^-) Аналогично Ctrl-PgDn. Ctrl-PgUp Выход и сохранение результатов редактирования в полях примечания. Ctrl-^ (^^) Аналогично Ctrl-PgUp. F1 Включение и выключение меню клавиш управления курсором. --------------------------------------------------------------- | Общее описание клавиш управления курсором | ---------------------------------------------------------------- | Клавиша | Действие | Аналоги | ---------------------------------------------------------------- | Перемещение вперед | ---------------------------------------------------------------- | ^D | На символ вправо |Стрелка вправо,^L | | ^X | Следующая строка |Стрелка вниз, ^J | | ^F | Следующее слово |End | | ^C | Следующий экран |PgDn | | ^B | Смещение вправо |^правая стрелка | | ^M | Следующее поле |ВК | | ^KE | Конец файла |^K^E | ---------------------------------------------------------------- ---------------------------------------------------------------- | Перемещение назад | ---------------------------------------------------------------- | ^S | На символ влево |Стрелка влево | | ^E | Предыдущая строк |Стрелка ввверх,^K | | ^A | Предыдущее слово |Home | | ^R | Предыдущий экран |PgUp | | ^Z | Смещение влево |^левая стрелка | | ^KT | Начало файла |^K^T | ---------------------------------------------------------------- | Вставка | ---------------------------------------------------------------- | ^N | Вставить строку | | | ^V | Включение/выключение вставки |Ins | ---------------------------------------------------------------- | Удаление | ---------------------------------------------------------------- | ^G | Удалить символ под курсором |Del | | ^H | Удалить символ слева |BackSpace | | ^T | Удалить слово | | | ^U | Удалить запись (переключить) | | | ^Y | Удалить до конца строки | | ---------------------------------------------------------------- | Выход | ---------------------------------------------------------------- | ^Q | Выйти без сохранения |Esc | | ^W | Выйти с сохранением |^End | ---------------------------------------------------------------- | Редактирование текста | ---------------------------------------------------------------- | ^KB | Переформатировать параграф |^K^B | | ^KF | Найти указанную строку |^K^F | | ^KL | Найти следующее вхождение |^K^L | | ^KR | Считать файл в текущий текст |^K^R | | ^KW | Записать текущий текст в файл |^K^W | ---------------------------------------------------------------- ---------------------------------------------------------------- | Дополнительные | ---------------------------------------------------------------- | ^P | Де/активировать принтер | | | ^Home | Вывести меню |F10, ^] | | ^PgDn | Войти для редактир. примеч. |^_ | | ^PgUp | Выйти из полей примечания |^^ | | F1 | Вывести меню управл. курсор. | | ---------------------------------------------------------------- Функциональные клавиши В FoxBASE+ функциональным клавишам от F1 до F10 присвоены принятые по умолчанию значения. С помощью команды SET FUNCTION можно изменить значения клавиш от F2 до F10. Хотя клавиша F1 за- резервирована в FoxBASE+ как клавиша Help (подсказки), но можно обмануть встроенные в FoxBASE+ процедуры помощи, используя ко- манду ON KEY =. Определив ON KEY = 315, разработчик может вклю- чить контекстно чувствительную программу помощи, которая будет выполняться при нажатии клавиши F1. Для получения более подроб- ной информации см. SET FUNCTION т ON KEY = в главе 4 "Команды". Интерактивный ввод и редактирование командной строки FoxBASE+ автоматически сохраняет максимально возможное коли- чество команд, введеных в интерактивном командном режиме. Коман- ды, начиная от самой последней и кончая первой, сохраняются в специальном буфере команд. Размер этого буфера, а следовательно, и максимальное количество запасаемых команд зависит от установки опции HMEMORY в файле CONFIG. Опция HMEMORY в файле CONFIG управляет принятым по умолчанию числом команд в буфере в том случае, когда их число не было ука- зано явным образом в командах DISPLAY HISTORY или LIST HISTORY (см. главу "ТОНКАЯ НАСТРОЙКА"). Принятое по умолчанию число мож- но также изменить с помощью команды SET HISTORY TO. ------------------------------------------------------------- | Управляющие клавиши для редактирования буфера команд | ------------------------------------------------------------- | стрелка вверх Вывести предыдущую команду | | стрелка вниз Вывести следующую команду | | стрелка влево Переместить курсор на один символ влево | | стрелка вправо Переместить курсор на один символ вправо | | ^A, Home Переместить курсор на одно слово влево | | ^F, End Переместить курсор на одно слово вправо | | ^G, Del Удалить символ в позиции курсора | | ^H, Backspace Удалить последний введенный символ | | ^T Удалить слово | | ^Y Удалить до конца строки | | ^M, ^W, Return Выполнить команду в позиции курсора | | ^V, Ins Переключение режима вставки | ------------------------------------------------------------- Кроме того, команды, сохраненые в буфере, могут вызываться по одной для редактирования и выполнения. Данными в таблице кла- вишами управления курсором можно пользоваться для перемещения и редактирования строк в буфере команд. При вводе команды DOHISTORY ON будут записываться команды, выполненные в процессе работы программы, а также команды, вве- денные с клавиатуры. Эта команда является ценным инструментом отладки, который позволяет пользователю проследить за последними выполненными программой командами. 4 КОМАНДЫ На последующих страницах приведен полный список команд FoxBASE+. Эта же информация может быть получена посредством ко- манды HELP. Мы настоятельно рекомендуем вам тщательно ознако- миться с командой HELP, она очень удобна для быстрого получения справки при работе в FoxBASE+. База данных, которая используется во многих примерах в гла- вах 4 и 5 называется Video.dbf. Структура и содержание этой базы данных приведены в приложении A. Специфические многопользовательские команды приведены в главе 9. Информация, приведенная в данном разделе, является только справочной, но отнюдь не учебной. В продаже есть много учебныз пособий, которые будут полезны тем, кто еще не знаком с FoxBASE+ или dBASE III PLUS. В связи с тем, что язык FoxBASE+ идентичен языку dBASE III PLUS, любое руководство по dBASE III PLUS однов- ременно является руководством и по FoxBASE+. 4.1 ? --------------------------------------------------------------- Анализ выражений, вывод результатов Формат: ?[?]<выраж>[,<выраж2>,...] ? это команда "Как оцениваются эти выражения?" Выражения оцениваются и их значения выводятся на экран. Примеры: *.? 15*(10+10) 300 *.? "Welcome to FoxBASE+" Welcome to FoxBASE+ *.? EOF() *.F. *.USE Video INDEX Title *.FIND ARSENIC AND OLD LACE *.? Type, Title Classic ARSENIC AND OLD LACE *.? Descript &&This is a memo field Starring: Cary Grant, Raymond massey, Jack Carson, Peter Lorre When a man learns his two gentle aunts are poisoning gentlemen callers and burring them in the cellar, he must try to save the next two victims! *. ? Date_aariv && This is a date field 12/09/82 ? Используйте один вопросительный знак, когда хотите увидеть значения в начале следующией строки на экране или принтере. ?? Используйте два вопросительных знака, когда хотите вывести значения, начиная с последней позиции кур- сора. 4.2 @ SAY/GET --------------------------------------------------------------- Выполняет ввод/вывод в указанных столбце и строке Формат: @ <строка,столбец > [[SAY <выраж> [PICTURE <формат>] FUNCTION <функц_коды>]] [[GET ] [PICTURE <формат>] FUNCTION <функц_коды>] [RANGE <числ_выраж1>][,<числ_выраж2>]] VALID <логич_выраж>]] Эта команда @ позволяет вывести сформатированную информацию на экран или/и на принтер или создать на экране формы ввода. <строка,столбец> Пара числовых выражений представляющая ко- ординаты вывода. <формат> Символическое выражение, определяющее про- цесс редактирования данных перед выводом. <функц_коды> Символическое выражение, определяющее функ- циональные коды редактирования, применяемые к данным перед их выводом. Координаты экрана/принтера Для экранного ввода/вывода номер первой строки 0. Строки нумеруются с 0 по 24, сверху вниз по экрану. Для принтеров мак- симальный номер строки определяется физическим размером страни- цы. Для экранного ввода/вывода номер первого столбца 0. Столбцы нумеруются с 0 по 79 слева направо по экрану. Для принтеров мак- симальный номер столбцы определяется физическим размером страни- цы. Оператор SAY Если имеется оператор SAY, выражение <выраж> оценивается и результат выводится, начиная с . Если была введена ко- манда SET DEVICE TO SCREEN, то вывод направляется на экран. Вы- вод команды SAY выглядит на экране обычным, "неярким" текстом. Если была введена команда SET DEVICE TO PRINT, вывод производит- ся на принтер. Оператор @SAY может быть использован в форматном файле. @ SAY ...PICTURE<формат> Если присутствует оператор PICTURE, значение выражения <вы- раж> редактируется в соответствии с указанным форматом <формат> перед выводом. Эта строка символов может состоять из кодов FUNCTION, трафаретных кодов PICTURE или их сочетания. Если используются коды FUNCTION, они указываются в формате <формат>, стоящем после "@". За символом "@" может без пробелов следовать любое необходимое количество кодов FUNCTION. За пос- ледним кодом FUNCTION в строке должен следовать один или нес- колько пробелов. Это означает окончание строки кодов FUNCTION и начало трафаретных кодов PICTURE. Имеющиеся коды FUNCTION и PICTURE приведены в конце настоя- щего раздела. @ SAY ...FUNCTION <функц_коды> Оператор FUNCTION предоставляет дополнительную возможность введения кодов редактирования FUNCTION в строку, используемую для редактирования вывода, генерируемого командой SAY. Введение перед кодами FUNCTION символа "@" не обязательно. Указание кодов FUNCTION в операторе FUNCTION аналогично введению их в оператор PICTURE, однако при этом трафареты PICTURE становятся более наг- лядными и соответственно более просты в работе. Оператор GET Если имеется оператор GET, выполняется операция полноэкран- ного редактирования либо начиная с позиции, указанной координа- тами <строка,столбец>, либо начиная с позиции на экране, следую- щей за информацией, выведенной оператором SAY. Если не задано SET INTENSITY OFF, вывод от оператора GET выделен на экране ин- тенсивным режимом индикации - обычно инверсной видеозасветкой. Если присутствуют оба оператора, и SAY и GET, по окончании выво- да оператором SAY и перед выводом оператора GET автоматически вводится пробел. Для инициализации редактирования полей GET сов- местно с оператором GET должна быть использована команда READ. Оператор GET игнорируется, если была введена команда SET DEVICE TO PRINT. GET ... PICTURE <формат> GET ... FUNCTION <функц_коды> Эти операторы в данном случае по выполняемым функциям ана- логичны оператору SAY, за исключением того, что они редактируют данные, введенные в соответствии с операторо GET. GET ...RANGE[<числ_выраж1>][,<числ_выраж2>] Параметр RANGE может быть использован с переменными число- вого типа и даты. Он позволяет пользователю указывать диапазон, в котором должна находиться вводимая информация. Введенные зна- чения могут быть либо числами, либо выражениями типа даты, в за- висимости от того, содержит ли <перем> числовые данные или дату. Если введено значение вне указанного диапазона, на экран выводится сообщение, в котором указывается допустимый диапазон и указание для пользователя нажать клавишу пробела и повторить ввод значения. Могут быть опущены верхняя или нижняя граница диапазона RANGE (но не обе). Если соответствующая граница опущена, провер- ка этой границы не производится. Необходимо заметить, что в качестве переменной GET <перем> может быть указан массив переменных памяти, однако индексы мас- сива анализируются только при выполнении оператора GET. Если значения индексов изменяются после выполнения GET и перед выпол- нением команды READ, в команде READ будут использованы значения индексов массива, которые были использованы при выполнении опе- ратора GET. GET ...VALID <логич_выраж> Оператор VALID позволяет анализировать вводимую информацию в процессе выполнения команды @...GET. При использовании совмес- тно с заданной пользователем функцией, оператор VALID может зна- чительно упростить анализ ввода. В процессе выполнения команды READ, когда ввод в поле с оператором VALID закончен, <логич_вы- раж> анализируется с использованием только что введенной пере- менной <перем>. Если <логич_выраж> имеет значение ".T.", ввод считается правильным и команда READ переходит к вводу в следую- щее поле. Если <логич_выраж> имеет значение ".F.", введенное значение считается неверным. На экран выводится сообщение, указывающее пользователю повторить ввод данных после нажатия пробела. Этот процесс продолжается до тех пор, пока <логич_выраж>не будет иметь значение ".T." или пока не будет нажата клавиша Esc. Если значение <перем> при вводе не изменилось, (например, если нажата клавиша Enter без внесения изменений), не выолняются проверки ни в соответствии с оператором RANGE, ни в соответствии с оператором VALID. Это полезно, например, при вводе дополни- тельных записей в базу данных командой APPEND, когда не жела- тельно выполнять ввод во все поля сразу. При выходе из поля GET ператор CLAUSE проверяет правиль- ность переменной, вне зависимости от того, редактировалась ли она. Примеры: *. USE Video *. @ 4,0 SAY TRIM(Title)+ "Rating:"+Rating AMADEUS Rating:PG *. @ 5,0 SAY Type PICTURE "@R! GROUP: AAAAAAAAAAAA" GROUP: DRAMA *. @ 6,0 SAY Cost_buy PICTURE "$999.99" $ 59.95 *. @ 7,0 SAY Cost_buy PICTURE "$****.**" $**59.95 *. @ 5,0 CLEAR && очистить от 5,0 до правого нижнего угла *. STORE -99.65 TO Num1 *. STORE 76.54 TO Num2 *. STORE 0.00 TO Num3 *.@ 8,0 SAY Num1 PICTURE "@CX" 99.65 DB *. @ 9,0 SAY Num2 PICTURE "@CX" 76.54 CR *. @ 10.0 SAY Num3 PICTURE "@Z" *.@ 11,0 SAY DATE() PICTURE "@E" 29/06/86 *.@ 12,0 SAY DATE() PICTURE "@D" 06/29/86 * Значение Num2 должно быть больше 0 *.@ 13,0 GET Num2 VALID Num2 > 0 В демонстрационных целях результат выполнения команд поме- щен на следующую строку после команды. На практике вывод будет произведен на соответствующую строку экрана. Коды редактирования FUNCTIONS А Допускает только алфавитные символы. В Числовые данные выравниваются по левому краю. Может использоваться только с числовыми данными. С CR (кредит) выводится после положительных чисел. Может использоваться только с числовыми данными. может использоваться только с оператором SAY. D Используется для дат в формате American (американский). Может использоваться с числовыми, символическими и данными типа дат. E Используется для дат в формате European (европейский). Может использоваться с числовыми, символическими и данными типа дат. R При использовании с строкой <формат>, содеражщей сим- волы, а не трафаретные коды PICTURE, обеспечивает вывод этих символов без сохранения их в <перемен>. Может использоваться только с символьными данными. S Эта функция ограничивает ширину поля при выводе на экран. Символы в поле сдвигаются в пределах позиций по горизонтали. всегда является целой константой. Не уместившеся на экране символы могут быть выведены при помощи клавиш стрелка_вверх, стрелка_вниз, Ctrl-F, Ctrl-A. Может использоваться только с символьными данными. X После отрицательных чисел выводятся символы DB (дебит). Может использоваться только с числовыми данными. Может использоваться только с оператором SAY. Z Выводится пустая строка, если переменная имеет нулевое числовове значение. Может использоваться только с числовыми данными. ( При использовании этой функции отрицательные числа заключаются в скобки. Может использоваться только с числовыми данными. Может использоваться только с оператором SAY. ! Может быть введен любая буква. Буквы будут преобразованы в верхний регистр. Может быть использована только с алфавитными символами. В одном операторе function допускается совместное использо- вание нескольких функций, например, "@CX", при этом после каждо- го числа будет выводиться CR или DB. Некоторые функции являются взаимно несовмеcтимыми, совместное использование их не допуска- ется, например, "@DE". Трафаретные коды PICTURE PICTURE <форматы> могут быть сформированы из любого набора символов клавиатуры; однако только символы, приведенные ниже, де ствительно влияют на редактирование и ввод данных. Если в опера- тор формата вводятся какие-либо другие символы, они выводятся в неизменном виде, а при операциях ввод появляются в поле в виде вспомогательной информации, на которой курсор не фиксируется. Ниже приведены символы, которые могут быть использованы в операторах <формат>. (Не забывайте заключать операторы формата в кавычки, если они являются строками букв). А Позволяет вводить только алфавитные символы. L Позволяет вводить только логические данные. N Позволяет вводить буквы и цифры. X Позволяет вводить любой символ. Y Позволяет вводить только логические значения Y, y, N, n. При этом y и n преобразуются в Y и N. 9 Позволяет ввод цифр для символьных данных. Позволяет вводить цифры и знаки для числовых данных. # Позволяет вводить цифры, пробелы и знаки. ! Преобразует буквы в нижнем регистре в верхний регистр. $ Плавающий знак доллара. Знак доллара выводится перед числовым значением. * Перед числовым значением выводятся астериски. Может использоваться в сочетании с $ для проверки защиты. *. Служит для указания позиции десятичной точки. , Служит для отделения знаков числа слева от запятой. Смотри также: COL(), EDIT, INSERT, MODIFY COMMAND, PCOL(), PROW(), READ, ROW(), SET BELL, SET CONFIRM, SET DELIMITERS, SET DEVICE, SET FIELDS, SET FORMAT, SET INTENSITY, UFD`s 4.3 @ --------------------------------------------------------------- Очистка области на экране Формат: @<строка,столбец > [CLEAR/CLEAR TO <строка,столбец>] Этот формат команды @ очищает прямоугольник на экране. Если опущены ключевые слова CLEAR или CLEAR TO, очищается указанная вами строка начиная с указанного вами столбца. Если вы используете параметр CLEAR, очищается прямоугольная область на экране, левый верхний угол которой указывается коор- динатами <строка,столбец>, а правым инжним углом является правый нижний угол экрана. Если использован параметр CLEAR TO, очищается прямоугольная область, как указано выше, но при этом нижний правый угол облас- ти определяется координатами <строка,столбец>. 4.4 @ -------------------------------------------------------------- Вывести рамку Формат: @<строка1,столбец1> TO <строка2,столбец2> [DOUBLE] Этот формат команды позволяет вывести рамку, где <стро- ка1,столбец1> являются координатами верхнего левого угла рамки, а <строка2,столбец2> являются координатами нижнего правого угла рамки. Если в <строка1,столбец1> и <строка2,столбец2> координаты строки одинаковы, выводится горизонтальная линия, и, аналогичным образом, если координаты столбца одинаковы, выводится вертикаль- ная линия. Если используется параметр DOUBLE, будет выведена двойная, а не одинарная рамка. 4.5 @ -------------------------------------------------------------- Вывести рамку Формат: @<строка1,столбец1><строка2,столбец2>BOX[<симв_выраж>] Этот формат команды "@" позволяет вывести рамку, где <стро- ка1,столбец1> являются координатами верхнего левого угла рамки, а <строка2,столбец2> являются координатами правого нижнеого угла рамки. Если в <строка1,столбец1> и <строка2,столбец2> координаты строки одинаковы, выводится горизонтальная линия, и, аналогичным образом, если координаты столбца одинаковы, выводится вертикаль- ная линия. Символы, задающие рамку, могут быть указаны в выражении <симв_выраж> в составе команды BOX. Эта строка может содержать до 9 различных символов - 4 для каждой из сторон и углов и один для заполнения. Символы выводятся начиная с верхнего левого угла рамки по часовой стрелке, 9-ый символ используется в качестве фона. Если строка отсутствует, выводится одинарная рамка. 4.6 @ <строка,столбец> MENU -------------------------------------------------------------- Создать вынимаемое меню Формат: @<строка,столбец> MENU <массив>, <выражN1>[,<выраж N2>] [TITLE<симв_выраж>] Эта команда создает вынимаемое меню в любом месте экрана, независимо от курсора меню верхнего ряда. Вынимаемые меню могут иметь заголовки, появляющиеся в верхней части окна меню. Для включения вынимаемого меню используется команда READ MENU. В каждый момент времени включенным может быть только одно такое меню. <коорд> Пара арифметических выражений, указывающих мес- тоположение левого верхнего угла меню. <массив> Одномерный массив, содержащий опции меню. Эти опции должны иметь символьный, и длина каждой не должна превышать 50 символов. <выражN1> Число опций меню - не должно превышать 128. <выражN2> Этот необязательный аргумент указывает число оп- ций меню, одновременно выводимых на экран - не не должен превышать 17. Если он превысит 17, на экран все равно будет выведено только 17 опций. Если число опций, которые надо вывести на эк- ран, меньше меньше общего числа опций, то можно прокручивать окно. TITLE Этот необязательный аргумент - заголовок, выво- димый вверху окна меню. Пример: DIMENSION choices (3,1) STORE "Chicken" TO choices (1) STORE "Beef" TO choices (2) STORE "Fish" TO choices (3) STORE 0 TO mchoice @ 5,0 MENU dinner, 3 TITLE "Dinner Choices" READ MENU TO mchoice См. также READ MENU, MENU 4.7 @ <строка,столбец> PROMPT --------------------------------------------------------------- Создать меню со световым маркером Формат: @<строка,столбец> PROMPT <симв_выраж> [MESSAGE <симв_выраж>] Этот формат команды "@" используется для создания и модифи- кации меню. Последовательность команд @ ... PROMPT выведет строки меню в соответствующих позициях экрана. Она используется в сочетании с командой MENU TO, которая активизирует меню со световым марке- ром, управляемое клавишами курсора, для заданных в текущий мо- мент строк PROMPT. По мере передвижения пользователем маркера выбора по стро- кам меню каждая из строк PROMPT выделяется инверсной видеозас- веткой и в позиции, указанной командой SET MESSAGE TO <числ_вы- раж>, выводится соответствующее этой строке меню сообщение. Выбор в меню может быть произведен: * нажатием клавиши Enter при расположении маркера выбора на соответствующей строке PROMPT * вводом первой буквы соответствующей строки В переменную памяти, указанную в строке команды MENU TO, заносится номер выбора, определяемый порядком следования строк PROMPT. Команда @ ... PROMPT позволяет выводить на экран до 128 пром- птов. Объем памяти, отводимый для хранения их вместе с соответс- твующими сообщениями может быть установлен в файле Config.fx. Этот объем может быть от 1 до 32 К (по умолчанию принят 1К). Для увеличения этого объема вставьте в файле Config.fx строку =<значение>. Для получения дополнительной информации о способах конфигурирования см. главу 6 "Тонкая настройка". Пример: ***Задать содержание строк меню*** @ 1,10 PROMPT `QUIT MESSAGE SPACE(30); +`QUIT PROGRAM` @ 1,20 PROMPT `ADD` MESSAGE SPACE(30) +`ADD RECORDS` @ 1,30 PROMPT `UPDT` MESSAGE SPACE(30) +`UPDATE RECORDS ON DATABASE` @ 1,40 PROMPT `DEL` MESSAGE SPACE(30) +`DELETE RECORDS FROM DATABASE` ****вывести текст на строке 24 *** SET MESSAGE TO 24 **** ВЫДЕЛИТЬ ПЕРВЫЙ ВЫБОР СВЕТОВЫМ МАРКЕРОМ*** MENU TO choice **** ВЫПОЛНИТЬ ВЫБОР ПОЛЬЗОВАТЕЛЯ DO CASE CASE choice = 1 DO QUITPRG CASE choice = 2 DO ADDPRG CASE choice = 3 DO UPDPRG CASE choice = 4 DO DELPRG ENDCASE Смотри также: SET MESSAGE TO, MENU TO 4.8 ACCEPT ----------------------------------------------------------- Ввести строку символов с экрана Формат : ACCEPT [<симв_выраж>] TO <перем_пам> Эта команда позволяет вам вводить символические данные не- посредственно в переменную памяти, не заключая их в кавычки. Введенные данные всегда сохраняются, как строка символов. Если вводится необязательный параметр <симв_вырыж>, он вы- водится на экран для напоминания пользователю о том, какие дан- ные необходимо ввести. Подсказка может быть символической пере- менной памяти или строкой символов. Если <симв_вырыж> является строкой символов, она должна быть ограничена одиночными (' '), двойными (" ") кавычками или квадратными скобками ([ ]). Если <перем_пам> не была задана ранее, она будет создана командой ACCEPT. Переменная памяти <перем_пам> может иметь длину до 254 символов. ACCEPT отличается от INPUT по следующим параметрам: * данные всегда считаются символическими, их тип не определяется из контекста. * Символические данные не нужно заключать в кавычки. Пример: *.ACCEPT "NAME OF MOVIE:" TO Movie NAME OF MOVIE:BACK TO THE FUTURE *. ? Movie BACK TO THE FUTURE Смотри также: INPUT, WAIT 4.9 APPEND ---------------------------------------------------------- Ввести дополнительные записи в полноэкранном режиме Формат: APPEND Команда APPEND имеет несколько форматов. Все форматы коман- ды APPEND позволяют ввести дополнительные записи в конец файла базы данных, находящегося в текущий момент в области USE. Этот формат команды выполняет процедуру полноэкранного ре- дактирования, в процессе которой к активной базе данных может быть добавлено любое количество записей. Если отстутствуют активные команды SET FORMAT, подсказка пользователю о вводе в каждое поле каждой записи производится с использованием умалчиваемой конфигурации экрана. Если имеется активная команда SET FORMAT, в процессе ввода информации используется конфигурация экрана, указанная в FORMAT. Смотри также: SET CARRY, SET FORMAT TO 4.10 APPEND BLANK ------------------------------------------------------------- Ввести пустую запись в базу данных Формат: APPEND BLANK APPEND BLANK вводит в конец активной базы данных запись, содержащую только пробелы. 4.11 APPEND FROM ------------------------------------------------------------- Ввести из файла в активную базу данных Формат: APPEND FROM <файл> [FIELDS <список_полей>] [FOR <логич_выраж>] [WHILE <логич_выраж>] [TYPE <тип_файла>] [DELIMITED [WITH <ограничитель>|BLANK]] Эта форма команды APPEND позволяет взять данные из файла базы данных FoxBASE+ <файл> и ввести записи, созданные из этих данных, в конец используемого в текущий момент файла базы дан- ных. FIELDS <список_полей> APPEND FROM поддерживает необязательный список полей. При этом возможно обеспечить доступ для добавления в базу только указанных полей. FOR <логич_выраж> Если вводится параметр FOR <выраж>, будет введена новая за- пись для каждой записи в файле FROM <файл>, для которой выполня- ется условие, указанное выражением <выраж>, до тех пор, пока не будет исчерпан файл FROM <файл> (т.е. пока не будет достигнута метка конца файла). Если параметр FOR <выраж> не используется, новые записи вводятся до тех пор, пока не будет завершен прос- мотр файла FROM <файл>. Параметр FOR <выраж> следует использо- вать для полей, которые имеются в обоих файлах. TYPE <тип_файла> Это выражение должно использоваться в случае, когда FROM не является базой данных. Выражение TYPE исполтзуется для спецификации других типов файлов. К подходящим типам файлов от- носятся DELIMITED и SDF. DELIMITED [WITH <ограничитель>/BLANK] Это файл ASCII, в котором каждая запись заканчивается сим- волами возврата каретки и перевода строки. Обычно поля разделя- ются запятыми, а символьные поля дополнительно разделяются двой- ными кавычками. Например: "555", 99999999, "TELEPHONE" Параметр DELIMITED WITH BLANK (ограничено пробелами) может быть использован для определения файлов, которые должны содер- жать поля, разделяемые не запятыми, а одним пробелом. При помощи параметра DELIMITED WITH <ограничитель> может быть указан другой тип ограничителя для использования со строками символов. SDF Файл SDF - это текстовый файл ASCII. Каждая запись в файле является записью фиксированной длины и заканчивается символами возврата каретки и перевода строки. Для файлов в форматах SDF и DELIMITED подразумевается расширение имени файла .TXT. Примеры: *. USE Video2 *. APPEND FROM Video FOR Type = "Comedy" 5 records added *. APPEND FROM Video FIELDS Title,Cost_buy 35 records added *. ? FCOUNT () 2 4.12 AVERAGE -------------------------------------------------------------- Вычислить среднее для числовых выражений или полей базы данных. Формат : AVERAGE [список_выр] [диапазон] [FOR <логич_выраж>] [WHILE <логич_выраж>] [TO <спис_перем_пам>] Команда AVERAGE позволяет вычислить среднее арифметическое для числовых выражений. Обрабатываются все числовые выражения, если параметром <список_выр> не указано иначе. Обрабатываются все выражения, если в команде не использованы параметры FOR, WHILE, или scope (диапазон). Кроме того, результат выполнения команды AVERAGE может быть занесен в переменные памяти, указан- ные в списке (<спис_перем_пам>). Примеры: *.USE Video *.AVERAGE Nimes_rent FOR Type = "Comedy" 5 records averaged. TIMES_RENT 6131 *.AVERAGE Cost_buy to Cost_avg 35 records averaged. COST_BUY 33.09 *.? Cost_avg 33.09 В данном примере поле Times_rent усредняется для всех запи- сей, в которых поле Type содержит слово "Comedy". Затем усредня- ются все записи по полю Cost_buy и значение заносится в перемен- ную памяти Cost_avg. Смотри также: SET HEADING, SET TALK, SUM 4.13 BROWSE -------------------------------------------------------------- Просмотр активного файла базы данных в полноэкранном режиме Формат: BROWSE [FIELDS <список>] [LOCK <выраж>] [FREEZE <поле>] [NOFOLLOW] [NOMENU] [NOAPPEND] [WIDTH <выраж>] [NOMODIFY] Команда BROWSE является одной из наиболее полезных команд в составе FoxBASE+. Она позволяет вам достаточно просто редактиро- вать и добавлять записи в используемую в текущий момент базу данных. При работе с командой BROWSE экран является окном в вашу базу данных. На экран могут быть по вертикали выведены до 17 за- писей одновременно; по горизонтали выводится столько полей, сколько умещается на экране. Вы можете перемещать это окно вверх или вниз от одной записи к другой, или по горизонтали (от поля к полю), по всей базе данных, просматривая, редактируя или удаляя записи. Для вывода на экран строки меню нажмите F10. Для включе- ния/выключения меню клавиш редактирования нажмите F1. Вы можете сохранить все внесенные изменения и выйти из команды BROWSE, на- жав Ctrl-W. Если вы нажмете Ctrl-Q, вы выйдете из команды BROWSE, не сохранив внесенных изменений. Поля МЕМО могут редактироваться в FoxBASE+ при помощи ко- манды BROWSE. Для выполнения редактирования полей МЕМО в BROWSE, установите курсор на слово memo и нажмите Ctrl-PgDn. Для выхода из поля МЕМО нажмите Ctrl-PgUp. FIELDS <список> Если присутствует параметр FIELDS, то выводятся только поля базы данных, указанные в <список>(список). Эти поля выводятся на экран в порядке, определенном в <список>. В противном случае вы- водятся все поля базы данных в том порядке, в котором они стоят в файле базы данных. LOCK <выраж> Параметр LOCK может быть использован для указания количест- ва полей в левой части экрана, которые не будут перемещаться при смещении экрана по полям базы данных. Эти поля останутся на эк- ране для просмотра или редактирования. FREEZE <поле> Параметр FREEZE может быть использован для того, чтобы зап- ретить внесение изменений во все поля кроме одного поля <поле> в течение одного сеанса работы с командой BROWSE. При этом, одна- ко, на экран выводятся все поля. NOFOLLOW Параметр NOFOLLOW относится к индексным файлам. Если вы введете NOFOLLOW перед изменением содержания ключевого поля, то соответствующая запись будет перемещена в файле и указатель за- писи будет указывать на запись, которая заняла место исходной записи. Без параметра NOFOLLOW указатель записи изменяется в со- ответствии с перемещением записи и продолжает верно указывать ее местоположение после внесения изменений. NOMENU Параметр NOMENU запрещает пользователю доступ к меню, обычно вызываемому при нажатии клавиш Ctrl-Home, что разрешает быстрое перемещение по базе данных, полям FREEZe и т.п. NOAPPEND Параметр NOAPPEND не позволяет пользователю вводить в файл дополнительные записи. WIDTH <выраж> Параметр WIDTH используется для ограничения количества сим- волов, которые будут выводиться для любого поля. Содержимое поля может перемещаться по горизонтали при помощи соответствующих клавиш. NOMODIFY Параметр NOMODIFY предотвращает внесение в базу данных из- менений. Этот параметр может с успехом использоваться разработ- чиками, которые желают предоставить возможность пользователям своих программ просматривать базы данных из BROWSE, но при этом предотвратить возможные повреждения баз данных. ОПЦИИ МЕНЮ Top Перемещает указатель записи к первой логической записи в файле. Bottom Перемещает указатель записи к последней логической записи в файле. Record Перемещает указатель записи к записи с указанным номером. Find Перемещает указатель записи к записи, которая соответствует указанному значению ключевого поля. Для использования этого режима база данных должна быть индесированной. Skip Перемещает указатель записи вперед или назад на указанное количество записей. Lock Позволяет вам зафиксировать определенное количество записей на экране. Freeze Позволяет вам указать одно поле, предназначенное для редактирования в процессе текущего сеанса работы с командой BROWSE. Пример: *.USE Video *.BROWSE FIELDS Title, Descript, Ratting, Length NOAPPEND В приведенном примере поля Title, Descript, Ratting, Length, могут быть выведены на экран для предоставления пользо- вателю, желающему приобрести видеофильм, необходимой информации. Обратите внимание на то, что поле мемо Descript может быть отре- дактировано или просмотрено в команде BROWSE. Параметр NOAPPEND предотвращает введение новых записей в базу данных. Смотри также: APPEND, EDIT 4.14 CALL ------------------------------------------------------------ Вызвать двоичную программу из памяти Формат: CALL <файл> [WITH <симв_выраж>/<перем_пам>] Команда CALL работает совместно с командой LOAD. Эта коман- да позволяет вам выполнять собственные программы в двоичном коде непосредственно из памяти компьютера. Команда LOAD загружает двоичный файл в память. Команда CALL позволяет вам выполнить загруженный двоичный файл. Параметр WITH может быть использован для передачи вашей программе соответствующих параметров. Может быть передана строка символов или переменная памяти. Переменная памяти может быть лю- бого типа. Указывать расширение имени двоичного файла не нужно, пос- кольку эту расширение не копируется при загрузке файла в память. При входе в модуль, вызванный командой CALL, CD указывает на на- чало модуля. Пара регистров DS и BX указывает на первый байт па- раметров, переданных при помощи конструкции WITH. Если никакие параметры не передаются, BX содержит 0. _____________________________________________ ! Внимательно ознакомьтесь с приведенными ! ! далее рекомендациями по интерфейсу с язы- ! ! ком Ассемблера. ! !___________________________________________! * При использовании символических переменных не изменяйте длину строки. Существует возможность, что при этом будет повреж- дена таблица свободной памяти. * Если вы используете "dBASE Tools for C", существует возмож- ность, что символические переменные будут перемещены в па- мяти системой управления памятью FoxBASE+. В связи с этим необходимо установить адрес строки, которую вы будете ис- пользовать, непосредственно перед ее использованием. * При сохранении адреса строки между последовательными вызовами внешней программы необходимо также установить адрес строки, по которому будет производиться сохранение непосредственно перед использованием строки. Смотри также: LOAD, RELEASE 4.15 CANCEL -------------------------------------------------------------- Прервать выполнение командного файла Формат: CANCEL Команда CANCEL прекращает выполнение командного файла FOxBASE+. Управление передается любо в нормальный интерактивный режим клавиатуры, либо в операционную систему. Если програма выполняется в рабочей (Runtime) версии FoxBASE+, FoxBASE+ прекратит работу и передаст управление исход- ной операционной системе. Если программа выполняется в версии разработки FoxBASE+, управление будет передано в нормальный ин- терактивный режим клавиатуры. Когда выполняется команда CANCEL, очищаются все собственные переменные памяти. Пример программы: IF Password <> "Video" CANCEL ELSE DO Tape_lib ENDIF В приведенном выше примере анализируется переменная Password. Если был введен неверный пароль (password), выполнение программы будет прервано. Если пароль верен, в данном случае "Video", выполняется программа Tape_Lib. Смотри также: RETURN 4.16 CHANGE --------------------------------------------------------------- Корректировать записи базы данных в полноэкранном режиме. Формат: CHANGE [<диапазон>] [FIELDS <список_полей>] [FOR/WHILE <выраж>] [WHILE <догич_выраж>] Эта команда позволяет выполнять полноэкранное редактирова- ние указанных полей в текущей базе данных. На экран для работы будут выведены поля, перечисленные в конструкции FIELDS <спи- сок>. Для редактирования будут включены все поля, если не опре- делен FILDS <список полей>. Редактирование может быть выполнено для всех полей, если не использованы операторы диапазона, FOR или WHILE. Команда EDIT функционирует аналогично команде CHANGE. Далее приведен перечень клавиш управления курсором, которые могут быть использованы с командой CHANGE (дополнительные данные приведены в разделе "Клавиши управления курсором" главы 3): PgUp Назад к предыдущей записи. PgDn Перейти к следующей записи. Ctrl-End Выйти из CHANGE и сохранить все изменения. Esc Выйти из CHANGE и сохранить все изменения, за исключением внесенных в текущую запись. Ctrl-PgDn Используется для редактирования поля мемо. Установите курсор на слово "memo" и нажмите Ctrl-PgDn. Ctrl-PgUp Выйти из поля мемо. Пример: *.USE Video *.CHANGE FIELDS Title, Cost_buy, Cost_rent FOR Cost_buy > 29.95 В данном примере поля Title, Cost_buy и Cost_rent выводятся на экран для редактирования. Изменения могут быть внесены только в те записи, для которых значение в поле Cost_buy больше 29.95. Смотри также: EDIT, SET FORMAT TO 4.17 CLEAR -------------------------------------------------------------- Форматы: CLEAR CLEAR ALL CLEAR FIELDS CLEAR GETS CLEAR MEMORY CLEAR PROGRAM CLEAR TYPEAHEAD Команда CLEAR без аргументов очищает экран или все текущие операторы GET. Команда CLEAR разрешена в файлах форматов. Смотри также: @, CLEAR GETS CLEAR ALL Команда CLEAR ALL очищает все переменные памяти, производит выбор первой рабочей области (рабочей области 1) и закрывает все открытые в текущий момент файлы баз данных, включая индексные, форматные файлы и файлы мемо. Смотри также: CLEAR MEMORY, CLOSE, RELEASE ALL CLEAR FIELDS Команда CLEAR FIELDS очищает список полей, который был соз- дан командой SET FIELDS TO. После этого будет автоматически вы- полнена команда SET FIELDS OFF. Команда CLEAR FIELDS отличается от команды SET FIELDS TO, в которой очищаются все поля во всех рабочих областях, а не только в текущей рабочей области. Смотри также: SET FIELDSOFF, SET FIELDS TO CLEAR GETS Команда CLEAR GETS очищает все текущие операторы GET. CLEAR MEMORY Команда CLEAR MEMORY очищает все общие и локальные переменные памяти. Смотри также: RELEASE ALL CLEAR PROGRAM Команда CLEAR PROGRAM очистит буфер компилированной прог- раммы. Это может понадобиться в некоторых нестандартных ситуаци- ях, например, при использовании команды RUN для смены каталогов командой MS-DOS CHDIR или изменения параметров командой PATH. Команда CLEAR PROGRAM должна также быть использована в следующих ситуациях: * С командой MODIFY COMMAND используется внешний для FoxBASE+ редактор. * Команда MODIFY COMMAND используется для модификации процедурного файла (отдельные процедуры в составе процедурного файла автоматически не удаляются из памяти при использовании MODIFY COMMAND). Смотри также: MODIFY COMMAND CLEAR PROMPT CLEAR PROMPT позволяет очистить подсказки, выведенные на экран командой @...PROMPT, не пользуясь командой MENU TO <пе- рем_памяти>. Смотри также: @...PROMPT, MENU TO CLEAR TYPEAHEAD Команда CLEAR TYPEAHEAD очищает буфер клавиатуры. Эта ко- манда особенно полезна в тех случаях, когда вы хотите обеспечить вывод подсказки для пользователя перед вводом с клавиатуры. Смотри также: SET TYPEAHEAD TO. 4.18 CLOSE -------------------------------------------------------------- Закрывает различные типы файлов Форматы: соответствуют следующим далее заголовкам CLOSE ALL Команда CLOSE ALL закрывает все типы файлов и выбирает ра- бочую область 1. Этот формат команды не оказывает влияния на па- мять. CLOSE ALTERNATE Команда CLOSE ALTERNATE закрывает открытый файл alternate. CLOSE DATABASES Команда CLOSE DATABASES закрывает все открытые файлы баз данных, индексные и форматные файлы, и выбирает рабочую область 1. CLOSE FORMAT Команда CLOSE FORMAT закрывает открытый формтный файл, на- ходящийся в используемой в текущий момент рабочей области. CLOSE INDEX Команда CLOSE INDEX закрывает все открытые индексные файлы, которые находятся в используемой в текущий момент рабочей облас- ти. CLOSE PROCEDURE Команда CLOSE PROCEDURE закрывает открытый процедурный файл. Примеры: *.USE Video INDEX Title *.? DBF() C:\FOX\VIDEO.DBF *.? NDX(1) C:\FOX\TITLE.NDX *.CLOSE INDEX && Закрыть индексный файл в рабочей области *.? DBF() C:\FOX\VIDEO.DBF *.? NDX(1) *.CLOSE DATABASE && Закрыть базы данных *.? DBF() 4.19 CONTINUE --------------------------------------------------------------- Продолжение поиска записей в цикле командой LOCATE Формат: CONTINUE Эта команда используется совместно с командой LOCATE для того, чтобы продолжить выполнение последней после нахождения очередной записи, соответствующей указанному в команде LOCATE критерию. Процесс продолжения работы команды LOCATE может повторяться до тех пор, пока не будет обнаружена метка конца файла или пока не будет исчерпан диапазон поиска, заданный оператором <диапа- зон> команды LOCATE. Примеры: *.USE Video *.LOCATE FOR Rating = "G" Record = 7 *.DISPLAY TRIM(Title),Rating Record# TRIM(TITLE) RATING 7 THE SONS OF KATIE ELDER G *.CONTINUE Record = 27 *.CONTINUE Record = 34 *.CONTINUE End of Locate scope. *.? EOF() *.T. Смотри также: LOCATE, EOF(), FOUND() 4.20 COPY FILE ------------------------------------------------------------ Копировать любой тип файла Форматы: COPY FILE <файл1> TO <файл2> Эта форма команды COPY создает точную копию файла <файл1>. <файл1> может быть любого типа. Эта форма команды COPY не может быть использована с открытыми файлами. Расширения обоих файлов необходимо вводить явным образом, т.к. отсутствуют принятые по умолчанию расширения. 4.21 COPY TO --------------------------------------------------------------- Копировать данные из открытых баз данных в файл Формат: COPY TO <файл>[<диапазон>] [FIELDS <Список_полей>] [FOR <логич_выраж>] [WHILE <логич_выраж>] [TYPE <тип_файлы>] [DELIMITED [WITH <ограничитель>|BLANK]] В этом формате команды COPY данные копируются из используе- мого в текущий момент файла базы данных в файл <файл>. Если не указано расширение для <файл>, то присваивается .DBF. Используя спмсок FIELDS, можно копировать все поля базы данных, которые открыты, но не выбраны (SELECTed). В файл <файл> копируются все записи, если не указано иначе операторами диапазон, FOR <выраж>, или WHILE <выраж>. TYPE <тип_файла> Файл, в который происходит копирование (TO <файл>), не обя- зательно должен ииметь тип .DBF. Для указания других типов фай- лов может быть использована конструкция TYPE <тип_файла>. Описа- ние имеющихся типов приведено в команде APPEND. [DELIMITED [WITH <ограничитель>|BLANK]] Файд DELIMETED - это текстовый файл в ASCII кодах, каждая запись которого заканчивается знаками возврата каретки и новой строки. Обычно поля разделяются запятыми, а символьные поля до- полнительно разделяются двойными кавычками. Для определения раз- деляющих знаков можно использовать оператор WIDTH. Для получения дополнительной информации о ключевом слове DELINMETED, смотри команду APPEND FROM. Смотри также: APPEND FROM, COPY FILE, COPY STRUCTURE, SET DELETED, SELECT, SET SAFETY 4.22 COPY STRUCTURE --------------------------------------------------------------- Скопировать структуру базы данных в другую базу Формат: COPY STRUCTURE TO <файл> [FIELDS <список_полей>] При использовании этого формата команды в файл <файл> копи- руется только структура используемой в текущий момент базы дан- ных. Список полей базы данных, приведенный в операторе FIELDS, используется для создания структуры файла базы данных в файле <файл>. Копируются только поля, перечисленные в операторе FIELDS. Если этот оператор отсутствует, копируются все поля. Смотри также: DISPLAY STRUCTURE, SET SAFETY 4.23 COPY STRUCTURE EXTENDED --------------------------------------------------------------- Копировать структуру базы данных в записи в другую базу данных Формат: COPY TO <файл> STRUCTURE EXTENDED Структура используемой базы данных копируется в записи базы данных в <файл>. В дальнейшем эти записи могут быть отердактиро- ваны соответствующим образом. В этом случае файл TO <файл> имеет фиксированную структуру и содержит поля: FIELD_NAME FIELD_TYPE FIELD_LEN FIELD_DEC Значения записей в файле TO <файл> соответствуют параметрам структуры текущей базы данных. Полученный файл может быть в дальнейшем использован для создания нового файла базы данных при помощи команды CREATE FROM после внесения соответствующих изме- нений в командах EDIT или BROWSE. Смотри также: CREATE FROM 4.24 COUNT --------------------------------------------------------------- Подсчитать записи в базе данных Формат: COUNT [<диапазон>] [WHILE <логич_выраж>] [FOR <логич_выраж>] [TO<перем_пам>] Эта команда выполняет подсчет записей в пределах диапазона [диапазон], для которого выполняется условие WHILE/FOR <ло- гич_выраж>. Если при этом включен режим TALK, результат счета будет выведен в следующей форме: nnn records Если указан параметр ТО, полученный результат заносится в переменную памяти <перем_пам>. <перем_пам> будет при этом созда- на, если она не была определена ранее. Записи, помеченные для удаления, подсчитываются только в том случае, если режим DELETE выключен (SET OFF). Диапазон по умолчанию равен ALL (все). Если отсутствуют операторы FOR и WHILE, в пределах диапазона [диапа- зон] подсчитываются все записи. Примеры: *.USE Video *.COUNT 35 records *.COUNT FOR Rating = "PG" TO Pgcount 15 records *.? Pgcount 15 Смотри также: SET DELETED 4.25 CREATE --------------------------------------------------------------- Создать базу данных в полноэкранном режиме Формат: CREATE [<файл>] Этот формат команды CREATE позволяет создавать новые файлы баз данных FoxBASE+ с использованием режима полноэкранного реак- тирования. Если имя файла [<файл>] не задано явно в составе ко- манды, будет выведен запрос на ввод имени создаваемого файла. Затем FoxBASE+ запросит ввести имя, тип, длину и количество дробных десятичных знаков для каждого из полей создаваемого фай- ла базы данных. Вы сообщаете FoxBASE+ о завершении создания фай- ла базы данных путем нажатия клавиши ВВОД вместо ввода имени очередного поля. После того, как создание базы данных будет завершено, FoxBASE+ спросит, желаете ли вы вводить данные в новую базу не- медленно. Если вы ответите 'Y'es (да), то FoxBASE+ автоматически перейдет в режим APPEND и вы сможете выполнить ввод данных. Если вы ответите 'N'o (нет), то управление будет передано команде, следующей за командой CREATE в командном файле или просто в ин- терактивный режим. Смотри также: MODIFY COMMAND 4.26 CREATE FROM --------------------------------------------------------------- Создать базу данных из файла COPY STRUCTURE EXTENDED Формат: CREATE [<файл1>] FROM [<файл2>] В этом формате команды CREATE подразумевается, что файл <файл2> был создан в ручном режиме или с использованием команды COPY STRUCTURE EXTENDED, и что этот файл был отредактирован со- ответствующим образом. Затем создается <файл1>, который имеет структуру, описанную в файле <файл2>. В результате вновь создан- ный файл базы данных заносится в область USE. Смотри также: COPY STRUCTURE EXTENDED 4.27 CREATE LABEL --------------------------------------------------------------- Создать файл ярлыков в полноэкранном режиме Формат: CREATE LABEL [<файл>] Этот формат команды CREATE позволяет создавать файлы ярлы- ков с использованием режима полноэкранного редактирования. Из файлов базы данных создаются стандартные почтовые ярлыки. Стандартным расширеним имени для файла ярлыков является .LBL. После выполнения команды, имя файла и его структура выво- дятся в верхней части экрана. Если в состав файла базы данных входят более 16 полей, вы можете смещать экран вправо путем нажатия комбинации клавиш Ctrl-правая_стрелка (или Ctrl-B) или влево путем нажатия Ctrl-левая_стрелка (или Ctrl-Z). Для перехода от вывода меню клавиш управления курсором к выводу структуры файла нажмите F1. Стандартные размеры ярлыков - Для вас сформирован список стандартных размеров ярлыков. Для вывода меню стандартных разме- ров ярлыков нажмите Ctrl-Home. В это меню занесено 5 стандартных размеров: Ширина Высота # Ярлыков в ширину 3-1/2" 15/16" 1 3-1/2" 15/16" 2 3-1/2" 15/16" 3 4" 1-7/16" 1 3-2/10" 11/12" 3(Чеширский) Вы можете выбрать стандартный размер ярлыка, а затем изме- нить любые параметры в соответствии с вашими потребностями. Могут быть также заданы и другие размеры для ярлыков, если у вас возникнет такая необходимость. Ниже приведен разрешенный диапазон для различных параметров ярлыков: Параметр Диапазон Ширина ярлыка 1-120 символов Высота ярлыка 1-16 строк Левое поле 0-250 символов Строк между ярлыками 0-16 строк Пробелов между ярлыками 0-120 позиций # ярлыков по ширине листа 1-5 ярлыков В нижней части экрана выводится строка примечаний. На эту строку могут быть занесены примечания, относящиеся к типу ярлы- ков. Если выбран стандартный размер, на строку примечаний будет автоматически занесен тип ярлыка. Эта информация является спра- вочной и не распечатывается. В качестве содержимого ярлыков могут быть использованы дан- ные символического и числового типа и типа даты. Если на одной строке ярлыка размещаются данные разного ти- па, FoxBASE+ удалит излишние пробелы между полями. В качестве промежутка между полями при печати будет оставлено по одному пробелу. После того, как формирование ярлыка будет завершено, пустые строки будут удалены, а заполненные строки отцентрированы. Смотри также: MODIFY LABEL, LABEL. 4.28 CREATE REPORT --------------------------------------------------------------- Создать форматный файл отчетов в полноэкранном режиме Формат: CREATE REPORT <файл> Этот формат команды CREATE позволяет использовать режим полноэкранного редактирования для создания форматных файлов от- четов. Из файлов базы данных создаются столбцы отчетных форм. Для форматного файла отчетов по умолчанию принимается рас- ширение .FRM. При выполнении команды CREATE REPORT в верхней части экрана выводится имя файла и его структура. Если в состав файла базы данных входят более 16 полей, вы можете смещать экран вправо путем нажатия комбинации клавиш Ctrl-правая_стрелка (или Ctrl-B) или влево путем нажатия Ctrl-левая_стрелка (или Ctrl-Z). Для перехода от вывода меню клавиш управления курсором к выводу структуры файла нажмите F1. На перврой странице экрана можно определить заголовок и страницу отчета. Заголовок может содержать до 4 строк, каждая из которых мо- жет содержать до 60 символов. Для форматного файла отчета могут быть выбраны параметры формата по умолчанию. К основным параметрам формата отчета отно- сятся ширина страницы, ширина левого поля, ширина правого поля, количество строк на странице, расстояние между строками, прогон страницы перед и/или после распечатки отчета, и параметр plain (простой). Для использования параметров формата FoxBASE+ по умолчанию нажмите PgDn или клавишу стрелка_вниз. При этом курсор перемес- тится к следующему экрану или к следующему набору параметров от- чета. Могут быть заданы ключи для Промежуточного суммирова- ния/Групп. Эти ключи соответствуют ключам индексирования или сортировки для файла базы данных. Ключи промежуточного суммиро- вания группируют записи, имеющие одинаковое значение указанного ключевого поля. Итоги промежуточного суммирования выводятся для числовых полей при каждом изменении содержания ключевого поля. Для числовых полей выводится также и окончательный итог. Каждая из групп промежуточного суммирования будет распеча- тана на отдельной странице, если выбрана опция "Eject after each group/subtotal" /прогон страницы после каждой группы/промежуточ- ного суммирования/. Вы можете задать подгруппы в пределах основных групп. Может быть распечатан итоговый отчет, в котором указаны промежуточные и окончательные итоги для числовых полей, и содер- жание первой записи в пределах группы промежуточного суммирова- ния для нечисловых полей. Каждый отчет имеет формат столбцов. Отчет может содержать до 24 столбцов. Столбец содержит переменную файла, переменную памяти или выражение. Если в поле содержания указан больше чем один источник, то, вставив между полями точку с запятой, можно выводить на печать много строк. Например, <выраж1> + ';' + <вы- раж2> приведет к печати содержимого <выраж2> на следующей строке отчета. Заголовок столбца может содержать до 4 строк. Каждая строка может содержать до 60 символов. Заголовки числовых полей вырав- ниваются по правому краю. Заголовки нечисловых полей выравнива- ются по левому краю. Ширина поля по умолчанию равна ширине выражения поля или заголовка. Эта ширина может быть увеличена или уменьшена. Если ширина поля меньше ширины выражения поля или заголовка, то пос- ледние будут при выводе перенесены на следующую строку. Количество дробных десятичных позиций соответствует коли- честву десятичных знаков для поля/выражения. Если вы зададите меньшее количество десятичных знаков, число будет округлено. Нажав Ctrl-Home вы можете вывести на экран меню переходов. Это меню предлагает вам следующие возможности: * Title - Перейти к экрану заголовка и форматирование страниц. * Grouping - Перейти к экрану промежуточных итогов/групп. * First - Перейти к первому экрану поля отчета. * Middle - Перейти к указанному экрану поля отчета. * Last - Перейти к поледнему экрану поля отчета. * Append - Ввести поля в отчет. * Save - Выйти с сохранением изменений. * Quit - Выйти без сохранения изменений. Переместите курсор к необходимой вам строке при помощи кла- виш со стрелками. После установки курсора нажмите клаишу ВВОД и выбранная вами строка будет выполнена. Когда вы не находитесь в описанном выше меню, правая и ле- вая стрелки перемещают курсор на одну позицию влево или вправо. Стрелки вверх и вниз перемещают курсор на одну строку вверх или вниз. PgUp и PgDn перемещают на один экран вперед или нажад. Ctrl-U удаляет поле. Ctrl-N вставляет поле. Esc осуществляет выход без сохранения изменений. Ctrl-End осуществляет выход с сохранением изменений. Смотри также: MODIFY REPORT, REPORT. 4.29 CREATE VIEW --------------------------------------------------------------- Формат: CRATE VIEW <файл_для_просмотра> FROM ENVIROMENT [ALL] Этот тип CREATE создает новый FoxBASE+ файл для просмотра, содержащий сведения о среде FoxBASE+. В файле просмотра могут содержаться следующие сведения: * Все файлы базы данных, индексные, альтернативные и фор- матные, открытые в настоящий момент во всех десяти рабочих об- ластях. * Все поля, содержащиеся в списке SET FIELD. * Все установленные связи между открытыми файлами базы дан- ных. * Все действующие фильтры для открытых баз данных. * Все переключатели ON/OFF. * Текущие установки функциональных клавиш. * Установки ON ESCAPE и ON KEY. * Установки DEFAULT и PATH. * Установка процедурного файла. Файлы просмотра оказываются полезными как в самих програм- мах, так и при отладке. Выполнив только одну команду SET VIEW TO <файл_просмотра>, можно задать всю среду, нужную для выполнения программы. Это экономит время, уходящее на ввод указаний с кла- виатуры. В процессе отладки установки среды могут быть созранены в файле просмотра, потом выполнена отладка, а затем восстановле- на среда для продолжения выполнения программы. Смотри также: SET VIEW TO 4.30 DELETE --------------------------------------------------------------- Удалить записи из активной базы данных Форматы: DELETE [<диапазон>] [FOR <логич_выраж>] [WHILE <логич_выраж>] Этот формат команды DELETE позволяет пометить записи в ак- тивной в текущий момент базе данных для удаления. Если в составе команды имеется оператор WHILE <выраж>, удаление производится до тех пор, пока выражение <выраж> истинно. Если оператор [диапа- зон] отсутствует, диапазон по умолчанию ограничивается только текущей записью. Если отсутствует оператор FOR <выраж>, то все записи в пределах диапазона [диапазон] помечаются для удаления. Помеченные для удаления записи не удаляются до тех пор, пока не будет выполнена команда PACK. Пометка записей для удаления может быть отменена при помощи команды RECALL. Примеры: *.DELETE FOR .NOT. available 15 records deleted *.RECALL FOR .NOT. available 15 records recalled *.PACK 25 records copied *.RECALL 0 records recalled Смотри также: PACK, RECALL, DELETED(), SET DELETED 4.31 DELETE FILE --------------------------------------------------------------- Удалить файл базы данных Формат: DELETE FILE <файл> Этот формат команды DELETE используется для удаления файла <файл>. Удаляемый файл не может в момент ввода команды DELETE нахо- диться в области USE. Файлу <файл> должен предшествовать полный маршрут: * В указании имени файла <файл> должно присутствовать рас- ширение. * Если файл <файл> находится не на принятом по умолчанию дисководе, в имя файла должен входить также указатель дисковода. Пример: *. DELETE FILE Video2.DBF File has been deleted. *. Смотри также: ERASE, PACK, RECALL, DELETED(), SET DELETED. 4.32 DIMENSION --------------------------------------------------------------- Отвести массив для переменных памяти Формат: DIMENSION <перем_пам> ( [, ] [, <перем_пам> (]),...] При помощи оператора DIMENSION могут быть заданы одно- и двумерные массивы переменных памяти. Размер этих массивов огра- ничен максимально разрешенным количеством переменных памяти. Ко- личество использованных переменных при этом равно количеству имеющихся переменных памяти плюс 1. Таким образом, для массива размерностью 2 на 3, 1 переменная памяти необходима для описате- ля массива, и еще 6 переменных являются элементами массива. Индексы массива переменных памяти начинаются с 1. Элементы массива переменных памяти могут содержать данные любого типа. Тип данных, хранящихся в определенном элементе мас- сива, определяется последней командой STORE, относящейся к этой переменной. По умолчанию элементы массива считаются логическими переменными, содержащими значение .F. (ложно). Если массив сформирован двумерным, к нему можно также обра- щаться с указанием одного индекса. Пример: *.STORE "Hello" TO x(1) *.? x(2,2) HELLO *.? x(5) HELLO Обратите внимание, что элементы массива сохраняются в сле- дующем порядке: x(1,1), x(1,2) x(1,3), x(2,1), x(2,2), x(2,3). x(2,2) является пятым элементом и может быть вызван, как x(5). Эффективный метод перемещения данных между массивом пере- менных памяти и полями баз данных предоставляют команды SCATTER и GATHER. Пример: *.DIMENSION x(2,3) *.STORE "Goodbye" to x(1,2) *.STORE 99 TO x(6) *.STORE .T. TO x(6) *.DISPLAY MEMORY X Pub A ( 1, 1) L .T. ( 1, 2) C "Goodbye" ( 1, 3) L .F. ( 2, 1) L .F. ( 2, 2) C "Hello" ( 2, 3) N 99 ( 99.00000000) 7 variables defined, 28 bytes used 249 variables available, 5972 bytes available Смотри также: GATHER, PUBLIC, SCATTER, STORE 4.33 DIR или DIRECTORY --------------------------------------------------------------- Вывести состав каталога на диске Формат: DIR/DIRECTORY [<дискловод>] [<маршрут>] [<скел>] [TO PRINT] Команда DIR выводит файлы базы данных, количество записей в каждом файле, дату последней корректировки файла и размер каждо- го файла в байтах. (Базы данных в формате FoxBASE+/dBASE II по- мечаются, как таковые). Кроме того выводятся количество выведен- ных файлов и количество свободных байтов на диске. Выводится ин- формация о файлах на умалчиваемом дисководе, если не указано иначе при помощи аргументов [дисковод:] и/или [маршрут]. Если вы указываете файл [скел], могут быть выведены и файлы другого типа, а не только .DBF. Выведенные файлы могут быть направлены на принтер при помо- щи параметра TO PRINT. Примеры: DIR && вывести все файлы баз данных в текущем каталоге DIR *.NDX && Вывести все индексные файлы в текущем каталоге DIR *.PRG && Вывести все программные файлы в текущем каталоге DIR v*.DBF && Вывести все файлы баз данных в текущем каталоге, && которые начинаются с буквы v. 4.34 DISPLAY --------------------------------------------------------------- Вывести записи или выражения из базы данных Формат: DISPLAY [<диапазон>] [[FIELDS] <список_выраж>] [FOR <логич_выраж>] [WHILE <логич_выраж>] [OFF] [TO PRINT] Этот формат команды DISPLAY используется для вывода значе- ний данных во всех или некоторых полях в записях используемой в текущий момент базы данных. Он может быть также использован для вывода результатов анализа выражений, которые могут содержать литеры, переменные памяти, поля базы данных и поля примечаний. Для каждой записи в пределах диапазона <диапазон> оценива- ются и выводятся на экран выражения, перечисленные в списке <вы- раж_список>. При этом следует обратить внимание на следующее: По умолчанию принят <диапазон> ALL (все). Если задан оператор FOR, выводятся только те записи, для которых выражение <логич_выраж> истинно. Если задан оператор WHILE, вывод записей производится до тех пор, пока выражение <логич_выраж> остается истинным. Если конструкции FOR и WHILE отсутствуют, команда DISPLAY относится ко всем записям в указан- ном диапазоне. Поля мемо не будут выводиться, если они не указаны в <спи- сок_выраж>. Если не указан параметр OFF, перед каждой выведенной стро- кой выводится номер записи. Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Примеры: USE Video DISPLAY NEXT 5 Title, Rating Record# TITLE RATING 1 AMADEUS PG 2 NORMA RAE PG 3 KRAMER VS. KRAMER PG 4 PLACES IN THE HEART PG 5 THE WAY WE WERE PG Смотри также: SET HEADING, SET MEMOWIDTH 4.35 DISPLAY FILES --------------------------------------------------------------- Вывести сведения о файлах на диске Формат: DISPLAY FILES [ON <дисковод/кат>] [LIKE <скел>] [TO PRINT] Этот формат команды DISPLAY используется для вывода списка файлов, сохраненных на диске. Вы можете просмотреть все файлы на указанном диске или каталоге, или все файлы, соответствующие приведенному в <скел> шаблону. При вводе ISPLAY FILES без аргументов будут выведены файлы базы данных, находящиеся на принятом по умолчанию дисководе или каталоге. Выводятся следую- щие данные: * имя базы данных * количество записей * время и дата последней корректировки. Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Смотри также: DIRECTORY 4.36 DISPLAY HISTORY --------------------------------------------------------------- Вывести команды из буфера HISTORY Формат: DISPLAY HISTORY [LAST <числ_выраж>][TO PRINT] Этот формат команды DISPLAY позволяет вывести список ко- манд, хранящихся в буфере команд, которые были выполнены и зане- сены в этот буфер. Вывод происходит, начиная от самого старого к самому последнему. Принятое по умолчанию число выводимых команд определяется значением HISTORY. Если указано выражение LAST, то вместо значе- ния HISTORY используется <числ_выраж>. Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Пример: *.DISPLAY HISTORY USE Video DISPLAY NEXT 5 Title,Rating STORE "Steven Cook" TO Customer STORE 4764.48 TO Sales STORE .T. TO Valid DISPLAY HISTORY Смотри также: LIST HISTORY, SET DOHISTORY, SET HISTORY 4.37 DISPLAY MEMORY --------------------------------------------------------------- Вывести содержимое переменных памяти Формат: DISPLAY MEMORY [TO PRINT] Этот формат команды DISPLAY позволяет вывести имя, тип, со- держание и статус всех переменных памяти, которые опеределны к моменту выполнения команды. Этот формат команды кроме того поз- воляет вывести количество использованных переменных памяти, за- нимаемый ими объем памяти, количество разрешенных переменных па- мяти, которые могут быть заданы и объем памяти, который может быть ими использован. Для переменых памяти по умолчанию приняты следующие макси- мальные значения: * 256 переменных памяти * 6000 байт под символическими переменными памяти. Существует возможность изменения этих параметров при помощи файла CONFIG.FX/DB. Более подробно этот вопрос рассматривается в главе 6, "Тонкая настройка вашей системы FoxBASE+". Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Пример: *.STORE "Steven Cook" TO Customer *.STORE 4764.48 TO Sales *.STORE .T. TO Valid *.DISPLAY MEMORY CUSTOMER Pub C "Steven Cook" SALES Pub N 4764.48 ( 4764.48000000) VALID Pub L .T. 3 variables defined, 19 bytes used 253 variables available, 5981 bytes available 4.38 DISPLAY STATUS --------------------------------------------------------------- Вывести статус конфигурации FoxBASE+ Формат: DISPLAY STATUS [TO PRINT] Этот формат команды DISPLAY используется для вывода следую- щей информации: * Файлы базы данных, активные в текущий момент * Индексные файлы, активные в текущий момент * Ключи индексных файлов * Псевдонимы * Связи баз данных * Файлы мемо, активные в текущий момент * Маршрут поиска файлов * Принятый по умолчанию дисковод * Назначения принтеров * Установки границ * Текущая рабочая область * Положение параметров команд SET * Назначения функциональных клавиш * Модули, загруженные командой LOAD * Используемый процедурный файл Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Смотри также: LIST STATUS 4.39 DISPLAY STRUCTURE --------------------------------------------------------------- Вывести структуру активной базы данных Формат: DISPLAY STRUCTURE [TO PRINT] Этот формат команды DISPLAY выводит структуру базы данных, используемой в текущий момент. Это может быть полезно для того, чтобы вспомнить имена полей, из размеры, количество дробных де- сятичных знаков и т.д. при работе с базой данных в интерактивном режиме. Кроме того выводится текущее количество записей в файле и дата его последней корректировки. Оператор [TO PRINT] может быть использован для вывода ин- формации на принтер. Смотри также: LIST STRUCTURE 4.40 DO --------------------------------------------------------------- Выполнить процедурный командный файл Формат: DO <файл> [WITH <список_парам>] В этом формате команды DO <файл> является командным файлом или процедурным файлом, состоящим из различных команд FoxBASE+. Файл <файл> сам по себе может содержать команды DO; однако вло- женность команд DO не должна превосходить 24 уровня. Когда вызывается файл <файл>, команды в его составе выпол- няются в естественном порядке их следования. Выполнение команд- ного файла будет продолжаться до того момента, как не произойдет одно из перечисленных ниже событий: * будет обнаружена команда RETURN * будет обнаружена команда CANCEL * будет обнаружена команда QUIT * достигнут конец командного файла. Когда выполнение файла <файл> завершено, управление переда- ется вызвавшей его программе, к точечной подсказке или операци- онной системе. Оператор WITH <список_парам> позволяет передавать параметры процедурному файлу. Параметром может быть любое допустимое в FoxBASE+ выражение. В том случае, если вы хотите указать поле, а не переменную памяти с тем же имененм, может быть использован псевдоним. Пример: *.DO Movie_in В этом примере от точечной подсказки выполняется программа Movie_in. Смотри также: PRIVATE, PROCEDURE, PUBLIC, SET PROCEDURE 4.41 DO CASE --------------------------------------------------------------- Выполнять выражения в зависимости от нескольких условий Формат: DO CASE CASE <логич_выраж1> <операторы> CASE <логич_выраж2> <операторы> *... CASE <логич_выражN> <операторы> [OTHERWISE <операторы> ENDCASE Когда выполняется команда DO CASE, проверяются успешные операторы CASE и оцениваются их <логич_выраж>. Если <логич_выраж> оказывается ложным, то пропускаются все операторы вплоть до следующего оператора CASE. Когда обнаруживается первый логически истинный оператор, выполняются соответстующие выражения <операторы>. Выполнение операторов производится до тех пор, пока не будет обнаружен сле- дующий оператор CASE. Когда это происходит, FoxBASE+ возобновит выполнение с первой команды, следующей за ENDCASE. В цикле DO CASE всегда выполняется один и только один (пер- вый из обнаруженных) оператор CASE, независимо от того, сколько операторов CASE фактически являются истинными. Если истинный оператор CASE не обнаружен, тогда дальнейшее выполнение команды зависит от наличия в составе команды операто- ра OTHERWISE: * Если оператор OTHERWISE имеется в составе команды, то выполняются связанные с ним выражения, до тех пор, пока не будет обнаружен оператор ENDCASE. * Если оператор OTHERWISE отсутствует, FoxBASE+ продолжает работу с первой команды, следующей за оператором ENDCASE. Обратите внимание, что в этом случае ни одно выражение, входящее в структуру DO CASE выполнено не будет. Пример программы: DO CASE CASE Action = "Rental" DO Rentfee CASE Action = "Purchase" DO Price OTHERWISE DO Mainmenu ENDCASE Каждое выражение CASE в составе конструкции DO CASE анали- зируется в поисках первого выражения, которое является логически истинным. В данном примере анализируется переменная Action. Если Action равняется "Rental", выполняется программа Rentfee. Если Action равняется "Purchase", выполняется Price. Если ни одно из выражений CASE не истинно, выполняется Mainmenu. Смотри также: DO WHILE, IF 4.42 DO WHILE --------------------------------------------------------------- Выполнять цикл до тех пор, пока условие истинно. Формат: DO WHILE <логич_выраж> <операторы> [LOOP] <операторы>] [EXIT] ENDDO В этом типе команды структурного программирования анализи- руется выражение DO WHILE <логич_выраж>. До тех пор, пока выра- жение <логич_выраж> остается истинным, выполняются операторы, находящиеся между DO WHILE и ENDDO. * Каждому оператору DO WHILE должен соотвтетствовать опера- тор ENDDO. * Коментарии, следующие за ENDDO игнорируются. EXIT является необязательным оператором, который передает управление из цикла DO WHILE...ENDDO первой команде, следующей за ENDDO. Команда EXIT должна быть размещена в любом месте внут- ри цикла DO WHILE...ENDDO. LOOP является необязательным оператором, который может быть размещен в любом месте структуры DO WHILE. При обанружении ко- манды LOOP вызывает переход выполнения программы обратно к ко- мандной строке DO WHILE <выраж>. Пример программы: USE Video DO WHILE .NOT. EOF() IF .NOT. Available SKIP LOOP ENDIF IF Cost_rent > 2.99 DO Saleitem ELSE DO Nosale ENDIF SKIP ENDDO В этом примере используется база данных Video. Команда DO WHILE начинает анализ признака конца файла EOF(). До тех пор, пока выражение в составе DO WHILE остается истинным, структура DO WHILE будет выполняться. Если Available ложно, указатель записи перемещается к сле- дующей записи в в файле и выолнение программы в соответствии с оператором LOOP переходит к командной строке DO WHILE. Если же Available истинно, то остальная чать блока команды IF...ENDIF игнорируется и программа переходит к выполнению пер- вого выражения, следующего за ENDIF. В данном случае анализируется текущая запись с целью опре- деления соотношения между содержанием поля Cost_rent и величиной 2.99. Если Cost_rent больше, выполняется процедура Saleitem, указатель записи в соответствии с командой SKIP переходит к сле- дующей записи и выполнение программы в соответствии с оператором LOOP переходит к команде DO WHILE .NOT. EOF(). Если же Cost_rent не больше 2.99, указатель записи переме- щается к следующей записи и программа в соответствии с операто- ром LOOP переходи к команде DO WHILE. Когда функция EOF() станет истинной, (достигнут конец фай- ла), выражение DO WHILE будет проанализировано, как ложное и программа продолжит свое выполнение с первой инструкции, следую- щей за оператором ENDDO. 4.43 EDIT --------------------------------------------------------------- Редактировать записи базы данных в полноэкранном режиме Формат: EDIT [<диапазон>] [FIELDS <список>] [FOR <логич_выраж>] [WHILE <логич_выраж>] Команда EDIT является полноэкранной командой, которая поз- воляет редактировать содержимое отедльных записей в составе ак- тивной базы данных. Диапазоном по умолчанию является ALL (все), если отсутству- ют операторы диапазон, FOR или WHILE. Поскольку эта команд является полноэкранной, с ней исполь- зуются стандартные назначения клавишей управления курсором. Нап- ример, PgUp перемещает вас к предыдущей записи, а PgDn - к пол- седующей записи в файле. Назначения дополнительных клавиш, кото- рые могут быть использованы в процессе редактирования, выводятся на экран в справочных целях при редактировании записи. Пример: *.USE Video *.EDIT NEXT 5 FIELDS Title,Descript, Rating,Type В этом примере в целях редактирования выводится база данных Video. Диапазон NEXT 5 позволяет выполнить редактирование только 5 следующих записей, а список полей FIELDS список позволяет вы- полнять редактирование только четырех перечисленных полей. Смотри также: CHANGE, MODIFY COMMAND, SET FIELDS, SET FORMAT 4.44 EJECT --------------------------------------------------------------- Перевести принтер к началу следующей страницы Формат: EJECT Команда EJECT посылает на принтер команду прогона формата. Команда EJECT выполняет сброс значений функций PCOL() и PROW(). Пример программы: *Распечатка фразы "THIS IS PAGE" совместно с номером страницы *на верхней строке трех страниц при печати на непрерывной *бумажной ленте SET DEVICE TO PRINT STORE 1 TO Mpgnmbr DO WHILE Mpgnmbr <= 3 @ 5,34 SAY "THIS IS PAGE" = STR(Mpgnmbr,3) EJECT STORE Mpgnmbr + 1 TO Mpgnmbr ENDDO SET DEVICE TO SCREEN RETURN Смотри также: SET DEVICE, SET PRINT, PCOL(), PROW() 4.45 ERASE --------------------------------------------------------------- Стереть файл с диска Формат: ERASE <файл> Команда ERASE удаляет файл с диска. Файл <файл> должен иметь полную спецификацию и указание маршрута: * Расширение имени файла должно быть указано в составе имени файла <файл>. * Если файл <файл> расположен не на дисководе по умолчанию, должно быть также указано имя дисковода. Для удаления файла с диска может быть также использована команда DELETE FILE. Примеры: *.ERASE Video2.DBF File has been deleted *.ERASE Title2.NDX File has been deleted *.ERASE Tape_lib.BAK File has been deleted *.ERASE C:\FOX\DATA\Cust.DBF File has been deleted Смотри также: DELETE FILE 4.46 EXIT --------------------------------------------------------------- Выход из цикла DO WHILE Формат: EXIT Команда EXIT передает управление из цикла DO WHILE...ENDDO команде, следующей за ENDDO. Пример программы: USE Video DO WHILE .NOT. EOF() DISPLAY Title SKIP IF Title = "FRIDAY THE 13TH" EXIT ENDIF ENDDO @ SAY "Control is transfered to this line when FRIDAY THE ; 13TH is encountered." В приведенном выше примере будет выводиться название каждо- го фильма в составе базы данных Video до тех пор, пока не будет обнаружено название :FRIDAY THE 13TH". После того, как будет найдено это название, управление будет передано команде, следую- щей за командой ENDDO. Смотри также:DO WHILE 4.47 FIND --------------------------------------------------------------- Найти запись в базе данных Формат: FIND <симв_выраж>/ Для использования команды FIND текущая база данных должна быть индексированной, а к индексам должен быть доступ. Она пере- мещает указатель записи на первую запись базы данных, индексный ключ которой совпадает со строкой символов. Соответствие должно быть полным, если не было установлено SET EXACT OFF. Если в начале индексного файла имеются пробелы, символичес- кая строка должна быть заключена в кавычки. Если вы хотите провести поиск содержимого для переменных памяти, перед переменной памяти необходимо указать функцию макро (&). Примеры: *.USE Video INDEX Title *.FIND MURDER BY DEATH *.? RECNO() 15 *.FIND Murder by Death No find. *.? RECNO() 36 *.STORE "MURDER BY DEATH" TO Xtitle *.FIND &Xtitle *.? RECNO() 15 *.DISPLAY Title Record# TITLE 15 MURDER BY DEATH В этом примере активной является база данных Video с индек- сным файлом. Поиск командой FIND производится по колючевому полю Title, содержащему "MURDER BY DEATH". При нахождении соответст- вующей записи не выдается никакого сообщения. Вторая команда FIND выодит сообщение No find (не найдено), поскольку заглавие "Murder by Death" введено не заглавными бук- вами, как это имеет место в поле Title. В ответ на функцию RECNO() выводится значение, на единицу превышающее количество записей в базе данных. В третьем случае для поиска соответствующей записи исполь- зуется макро-функция с переменной памяти. Смотри также: SEEK, LOCATE, FOUND(), INDEX, RECNO(), EOF(), SET EXACT. 4.48 FLUSH --------------------------------------------------------------- Перенести буфера на диск Формат: FLUSH Команда FLUSH переносит все активные буфера на диск, не требуя при этом от пользователя закрытия всех открытых файлов. Смотри также: CLOSE 4.49 GATHER --------------------------------------------------------------- Собрать элементы массива в поля базы данных Формат: GATHER FROM <массив> [FIELDS <список_полей>] Команда GATHER перемещает данные из массива переменных па- мяти в текущую запись базы данных в выбранной базе данных. Эле- менты массива перемещаются начиная с элемента 1 в соответствую- щие поля записи. Если количество элементов массива меньше, чем количество полей в базе данных, поля модифицируются до исчерпания всех эле- ментов массива. Если количество элементов массива превосходит количество полей в базе данных, остальные элементы массива игно- рируются. Если тип данных элементиов массива и полей записи не совпа- дают, выводится сообщение об ошибке Error#9, "Data type mismatch". /Несоответствие типов данных/. В процессе выполнения GATHER игнорируются поля мемо. Смотри также: DIMENSION, SCATTER 4.50 GO --------------------------------------------------------------- Установить указатель записи Формат: GO|GOTO <выраж>|TOP|BOTTOM Команда GO/GOTO устанавливает указатель записи на указанную запись в активной базе данных. GO <выраж> В этом формате команда GO устанавливает указатель записи активной базы данных на физический номер записи, полученный из выражения <выраж>. GO TOP|BOTTOM В этом формате команды GO указатель записи устанавливается на первую или последнюю запись базы данных, соответственно, ак- тивной базы данных. Если база данных используется с индексным файлом, первой записью является запись с наименьшим значением ключа, а послед- няя запись - это запись с максимальным значением ключа. Примеры: *.USE Video *.GO 22 *.? RECNO() 22 *.GO TOP *.? RECNO() 1 *.GO BOTTOM *.? RECNO() 35 4.51 HELP --------------------------------------------------------------- Вывести вспомогательную информацию по командам и фукнциям Формат: HELP [<тема>] Полноэкранная команда HELP выводит информацию о различных функциях и командах FoxBASE+. Если <тема> указана, то она немедленно появляется на экра- не. Если <тема> опущена, команда HELP выводит на экран меню, в котором с помощю светящегося маркера можно выбрать нужную тему. Тему можно указать с помощью клавиш, управляющих курсором, или указав такое количество букв из ее названия, которое необходимо для однозначной идентификации этой темы. Выбрав нужную тему, нажмите клавишу ВВОД. Если в данной теме имеются дополнительные подтемы, то HELP то HELP выводит их список внизу экрана. Подтемы могут иметь свои подтемы. Для возврата к подтеме более высокого уровня пользуй- тесь клавишей PgUp. Для выхода из команды HELP нажимайте клавишу PgUp пока не появится подсказка в виде точки. Для выхода из ко- манды HELP не очищая экрана, нажмите клавишу ESC. 4.52 IF...ELSE...ENDIF --------------------------------------------------------------- Выполнять команды в зависимости от условия Формат: IF <выраж> <операторы> [ELSE <операторы>] ENDIF В команде структурного программирования этого типа выражение IF <выраж> анализируется с целью определения, истинно оно или ложно. Если оно истинно, все выражения, следующие за IF <выраж> и до ELSE или ENDIF, (в зависимости от того, что встретится ранее), будут выполнены. Если выражение IF <выраж> ложно, и был использован дополнительный оператор ELSE, тогда будут выполнены все выражения, начиная с ELSE и до ENDIF. Если выражение IF <выраж> ложно, и оператор ELSE отсутствует, все выражения между IF <выраж> и ENDIF игнорируются. В этом случае программа продолжит свою работу выполнением первой инструкции, стоящей за ENDIF. Выражения IF <выраж> могут быть вложены одно в другое, если для каждого IF имеется соответствующее ENDIF. Пример программы: IF Action = "Rental" IF Payment = "Cash" STORE 1 TO Terms ELSE charge STORE 2 TO Terms ENDIF ELSE purchase IF Payment = "Cash" STORE 3 TO Terms ELSE charge STORE 4 TO Terms ENDIF ENDIF В приведенном выше примере Action анализируется с точки зрения его соотношения с Rental. Если они равны, программа переходит к проверке типа Payment /выплата/ (cash /наличность/ или charge /начисление/).Если Payment равно "Cash", то 1 заносится в переменную памяти Terms. В противном случае, если Payment равно "Charge", 2 заносится в переменную памяти Terms. Если Action равно Purchase, то программа переходит к проверке типа Payment /выплата/ (cash /наличность/ или charge /начисление/).Если Payment равно "Cash", то 3 заносится в переменную памяти Terms. В противном случае, если Payment равно "Charge", 4 заносится в переменную памяти Terms. Смотри также: DO CASE, IIF 4.53 INDEX --------------------------------------------------------------- Создать индексный файл Формат: INDEX ON <выраж> TO <файл> [FOR <логич_выраж>] [UNIQUE] Команда INDEX используется для формирования индексного фай- ла для активного файла базы данных. <выраж> - это общее выражение, которое обычно, но не всегда включает поля текущей базы данных. Значение <выраж> должно быть числовым, символьным или датой. Не разрешены значения мемо и ло- гические. ______________________________________________ ! Заданные пользователем фукнции не могут ! ! быть использованы в индексных выражениях. ! !____________________________________________! Созданным индексным файлам присваивается принятое по умол- чанию расширение "IDX". Это расширение может быть заменено дру- гим, данным явным образом, или записанным в файл CONFIG. При присвоении файлу имени надо пользоваться стандартными правилами MS-DOS. Выражение FOR <логич_выраж> может быть определено при соз- дании индексного файла, и созданный индекс будет действовать как фильтр в существующей базе данных. Это означает, что лучше соз- давать фильтр лучше с помощью команды SET FILTER TO. Объединение изощренной индексной техники FoxBASE с выражениями для фильтров позволяет резко ускорять поиск по индексу в базе данных. Факти- чески, поиск происходит немедленно. Параметр [UNIQUE] указывает, что при наличии нескольких за- писей с одинаковым значением ключевого поля <выраж>, только пер- вое из них будет включено в индексный файл. Все последующие за- писи в аналогичным значением ключевого поля <выраж> не будут включены в индексный файл. Параметр UNIQUE команды INDEX по своему действию аналогичен выполнению команды SET UNIQUE ON перед командами INDEX или REINDEX. Примеры: USE Video INDEX ON Title TO Ndxfile FOR rating="PG" Первая из приведенных команд делает активным файл базы дан- ных Video. Вторая команда индексирует базу данных (в возрастающем порядке) по содержимому поля Title и создает индексный файл с именем Ndxfile.idx, имеющий входы только для тех записей, кото- рые имеют "PG". Ту же самую базу можно проиндексировать отрицанием числа записей. Пример: USE Video INDEX ON - RECHNO() TO Reverse Поcледняя команда выполняет индексирование ту же базу дан- ных по отрицательному номеру записи. При работе с базой данных с использованием этого индекса записи будут обрабатываться в об- ратном порядке, самой старшей по номеру станет запись с номером 1. Если был включен TALK, FoxBASE+ сообщает, сколько записей проиндексировано. Для продолжения работы с базой данных, однако без индексно- го файла, в физическом порядке, введите команду: *. SET ORDER TO 0 Теперь база данных упорядочена по номерам записей, индекс- ный файл будет корректироваться, если будет изменено ключевое поле для какой-либо записи. Смотри также: CLOSE, FIND, REINDEX, SEEK, SET INDEX, SET UNIQUE, SET ORDER, USE 4.54 INPUT --------------------------------------------------------------- Ввести данные с экрана в переменную памяти. Формат: INPUT [<подсказка>] TO <перем_пам> Команда INPUT предосталвяет пользователю подсказку о том, что необходимо вводить в переменную памяти <перем_пам>. Если пе- ременная памяти <перем_пам> ранее не была определена, команда INPUT определит ее. При включении в состав команды подсказки [подсказка] сооб- щение "подсказка" будет выведено на экран. Если "подсказка" является символическим выражением, оно должно быть ограничено одинарными кавычками, двойными кавычками или скобками. Тип выражения, введенного в ответ на эту команду, определя- ет тип создаваеомй переменной памяти <перем_пам>. Если в ответ вы введете просто цифры, будет создана числовая переменная памя- ти. Примеры: *.INPUT TO Num_exp 38 *.INPUT TO Movie "BLAZING SADDLES" *.STORE "Enter a movie here: " TO Prompt *.INPUT Prompt TO Movie2 Enter a monie here: "STAR WARS" *.INPUT TO Date DATE() *.DISPLAY MEMORY NUM_EXP Pub N 38 ( 38.00000000) MOVIE Pub C "BLAZING SADDLES" PROMPT Pub C "ENTER A MOVIE HERE:" MOVIE2 Pub C "STAR WARS" DATE Pub D 06/27/86 5 variables defined 68 bytes used 251 variables available 5932 bytes available Смотри также: ACCEPT, @ SAY/GET, READ,WAIT 4.55 INSERT --------------------------------------------------------------- Вставить запись в базу данных Формат: INSERT [BEFORE] [BLANK] Простая команда INSERT вставляет в базу данных запись, но- мер которой на единицу больше, чем номер текущей записи. Затем INSERT выводит эту запись для полноэкранного редактирования. Команда INSERT BEFORE вставляет в текущую базу данных за- пись, номер которой на единицу меньше, чем номер текущей записи. Затем эта запись выводится для полноэкранного редактирования. Команда INSERT [BEFORE] BLANK вставляет в текущую базу дан- ных пустую запись, номер которой на единицу больше или меньше (в зваисимости от того, имеется ли оператор BEFORE) номера текущей записи. Запись не выводится для полноэкранного редактирования. Новая запись выводится для полноэкранного ввода или коррек- тировки. Данные могут быть введены только в эту запись. Ввод данных в поле мемо производится путем установки курсо- ра на слове Memo и нажатием Ctrl-Pgdn. После того, как ввод дан- ных в поле мемо будет выполнен, нажмите Ctrl-End для сохранения данных или Esc для выхода без сохранения внесенных изменений. Для вывода меню управляющих клавиш, в котором приведена дополни- тельная информация об управляющих клавишах, нажмите F1 Help. Если установлено SET CARRY ON, и параметр BLANK отсутствует в составе команды, данные предыдущей записи автоматически пере- носятся во вставленную запись. Если файл индексирован, действие команды INSERT будет ана- логично действию команды APPEND. __________________________________________________ ! Не рекомендуется использовать команду INSERT с ! ! большими неиндексированными базами данных, ! ! поскольку введение записи в начале базы данных ! ! приводит к перезаписи почти каждой записи. Это ! ! может занять много времени: рекомендуем вместо ! ! этого использовать команду APPEND. ! !________________________________________________! Смотри также: APPEND, CHANGE, EDIT, SET CARRY, SET FORMAT 4.56 JOIN --------------------------------------------------------------- Объединить две базы данных Формат: JOIN WITH <псевдоним> TO <файл> FOR <логич_выраж> [FIELDS <список>] Команда JOIN создает новую базу данных <файл> из двух дру- гих баз данных. Одна из баз данных должна быть активной базой данных, а вторая база данных указывается посредством псевдонима <псевдоним>. Команда JOIN устанавливает указатель записи на пер- вую запись активной базы данных и ведет поиск среди записей в базе данных <псевдоним>. Команда JOIN анализирует выражение FOR <выраж> для каждой записи. Если выражение FOR <выраж> истинно, новая запись заносится в новый файл <файл>, затем команда JOIN переходит ко второй записи в активной базе данных и повторяет процедуру. Если оператор FIELDS <список> отсутствует, все поля актив- ной базы данных, а также все поля базы данных <псевдоним>, кото- рые могут быть включены в файл в пределах допустимого в FoxBASE+ количества полей, будут занесены в новый файл <файл>. Если опе- ратор FIELDS <список> задан, только поля, перечисленные в списке <список> будут включены в новый файл <файл>. ___________________________________________________ ! Предупреждения: ! ! * Время выполнения этой команды может быть ! ! очень значительным, в зависимости от размеров ! ! двух баз данных, которые объединяются командой ! ! JOIN. ! ! * Существует возможность превышения объема па- ! ! мяти диска при выполнении команды JOIN даже в ! ! том случае, если размеры объединяемых файлов не ! ! очень велики. ! !_________________________________________________! Пример: *.SELECT 1 *.USE Employee *.DISPLAY STRUCTURE Structure for database: C:\FOX\EMPLOYEE.DBF Number of data records: 100 Date of last update : 06/27/86 Field Field Name Type Width Dec 1 NAME Character 25 2 EMP_NUM Character 6 3 ADDRESS Character 30 4 CITY Character 20 5 STATE Character 2 6 ZIP Character 5 **Total** 89 *.SELECT 2 *.USE Salary *.DISPLAY STRUCTURE Structure for database: C:\FOX\SALARY.DBF Number of data records: 100 Date of last update : 06/27/86 Field Field Name Type Width Dec 1 EMP_NUM Character 6 2 CUR_SAL Numeric 8 2 3 STRT_DATE Date 8 **Total** 23 *.JOIN WITH A TO Emp_sal FOR Emp_num = a ->Emp_num 100 records joined *.USE Emp_sal *.DISPLAY STRUCTURE Structure for database: C:\FOX\EMP_SAL.DBF Number of data records: 100 Date of last update : 06/27/86 Field Field Name Type Width Dec 1 NAME Character 25 2 EMP_NUM Character 6 3 ADDRESS Character 30 4 CITY Character 20 5 STATE Character 2 6 ZIP Character 5 7 CUR_SAL Numeric 8 2 8 STRT_DATE Date 8 **Total** 105 Смотри также: SET FIELDS, SET RELATION 4.57 KEYBOARD --------------------------------------------------------------- Занесение данных в буфер клавиатуры Формат: KEYBOARD<симв_выраж> Команда KEYBOARD позволяет заполнить буфер клавиатуры стро- кой символов. Эти данные остаются в буфере до тех пор, пока FoxBASE+ не потребуется какой-либо ввод данных. В этот момент будут прочитаны данные из буфера клавиатуры и выполнены, как ес- ли бы они были введены с клавиатуры. Эта команда может быть использована, например, при создании самостоятельных демонстрационных программ для ваших прикладных систем. 4.58 LABEL --------------------------------------------------------------- Создает ярлыки из файла базы данных и файла ярлыков Формат: LABEL FORM <файл> [<диапазон>] [SAMPLE] [WHILE <логич_выраж>] [FOR <логич_выраж>] [TO PRINT]|[TO FILE <файл>] Команда LABEL выводит и печатает ярлыки из файла ярлыков <файл>. Файлы ярлыков <файл> создаются при помощи команд MODIFY LABEL или CREATE LABEL. Расширением файла ярлыков по умолчанию является .LBL. Если файл расположен не на принятом по умолчанию дисководе, необходи- мо также указать имя дисковода. Умалчиваемое расширение имени файла TO <файл> .TXT. Ярлыки будут распечатаны для всех записей в файле <файл>, если не указан диапазон [диапазон], WHILE <выраж> или FOR <вы- раж>. Парметр SAMPLE может быть использован для проверки структу- ры ярлыка. После каждого запуска команды LABEL будет выводиться подсказка для пользователя: "Do you want more samples?" /Нужны ли вам еще образцы/ Для повторного вывода образца ярлыка просто введите "Y". Если в составе команды LABEL использован оператор TO FILE <файл>, ярлыки будут занесены в текстовый файл. Смотри также: MODIFY LABEL, CREATE LABEL. 4.59 LIST --------------------------------------------------------------- Смотри DISPLAY Форматы: LIST [<диапазон>] [FIELDS <выраж_список>] [FOR <логич_выраж>] [WHILE <логич_выраж>][OFF][TO PRINT] LIST FILES [ON <дисковод/кат>] [LIKE <скел>] [TO PRINT] LIST HISTORY [LAST <выраж>] [TO PRINT] LIST MEMORY [TO PRINT] LIST STATUS [TO PRINT] LIST STRUCTURE [TO PRINT] Команда LIST является эквивалентом команды DISPLAY со сле- дующими отличиями: Для команды LIST: * [диапазон] по умолчанию имеет значение ALL * Отсутствуют паузы для команд продолжения после вывода каждых 15 записей * Команда LIST не выведет записи, помеченные для удаления командой включенной командой DELETE. Смотра также: DISPLAY 4.60 LOAD --------------------------------------------------------------- Загрузить двоичный файл в память. Формат: LOAD <файл> Команда LOAD загружает программы на языке Ассемблера с дис- ка в память. Единовременно в память могут быть загружены шест- надцать файлов (32 000 байтов каждый). По умолчанию расширением имени файла для файлов ассемблер- ных программ принято .BIN. Когда вы вводите команду CALL в отно- шении программы на Ассемблере, расширение имени файла указывать не нужно, поскольку имя файла (без расширения) и обозначает фак- тически загруженный модуль. При этом, если загружаемый файл <файл> имеет то же имя, что и ранее загруженный файл, но другое расширение, то ранее загруженный файл будет им стерт. При создании файла программы на Ассемблере для FoxBASE+ следует выполнить следующие шаги: MASM <файл> - ассемблирует программный файл и создает объект- ный файл. LINK <файл> - скомпонует объектные файлы и создаст выполняе- мый файл. EXE2BIN <файл> - создаст двоичный файл, который может рабо- тать в FoxBASE+. При создании файлов программ на Ассемблере в двоичном фор- мате для FoxBASE+ следует придерживаться следующих правил: * Первая выполняемая инструкция должна иметь нулевое смещение. * Программа Ассемблера не должна изменять переданных ей в качестве аргументов переменных памяти. * Объем использованной или отведенной памяти не должен превышать фактический размер программы, поскольку размер файла используется для определения необходимого объема памяти. * Содержимое регистров SS и CS должно быть восстановлено перед передачей управления FoxBASE+. * После того, как программа будет выполнена посредством команд LOAD и CALL управление должно передаваться FoxBASE+ при помощи дальнего возврата (far return). * Если программа заканчивается выходом в систему, ее необходимо запускать командой RUN/!. __________________________________________________ ! Внимательно прочтите следующие рекомендации по ! ! работе с Ассемблером: ! !________________________________________________! * При использовании символьных переменных не изменяйте дли- ну строки. Существует возможность того, что таблица свободной памяти будет повреждена, если длина символьной переменной будет изменена хотя бы на один байт. * Если вы используете "dBASE Tools for C" существует воз- можность, что переменные памяти могут быть перемещены в памяти системой управления памятью FoxBASE+. В связи с этим необходимо восстанавливать адрес, по которому будет сохранена символьная переменная, непосредственно перед использованием этой перемен- ной. * При сохранении адреса строки между вызовами необходимо также восстанавливать адрес сохранения перед использованием сим- вольной переменной. Смотри также: CALL, RELEASE 4.61 LOCATE --------------------------------------------------------------- Найти запись в базе данных Формат: LOCATE [<диапазон>] [FOR <логич_выраж>] [WHILE <логич_выраж>] [команды FoxBASE+] [CONTINUE] Команда LOCATE производит поиск в активной базе данных пер- вой записи, для которой истинно выражение WHILE/FOR <выраж>. Ес- ли задан диапазон [диапазон], то LOCATE производит поиск только среди указанного количества записей, начиная с текущей записи. Если [диапазон] не указан, LOCATE производит поиск во всей базе данных. Повторяющаяся процедура поиска записей и совершения с ними указанных действий может быть организзована при помещении раз- личных предложений FoxBASE+ между командами LOCATE и CONTINUE. После выполнения команды CONTINUE продолжается процуесс поиска, начиная с того места, где он остановился. Этот процесс может повторяться до тех пор, пока не будет обнаружен признак конца файла, или до конца указанного для команды LOCATE диапазона [ди- апазон] в данной рабочей области. Повторяющаяся команда LOCATE...CONTINUE специфична той ра- бочей области, для которой она определена. Если выбрана другая рабочая область, поисковый процесс приостанавливается до тех пор, пока снова не будет выбрана рабочая область. Потом его мож- но продолжить. Примеры: *.USE Video *.LOCATE FOR Title = "TOOTSIE" Record = 22 *.DELETE RECORD 22 && пример команды FoxBASE+ 1 record deleted *.CONTINUE End of Locate диапазон *.LOCATE NEXT 10 FOR Rating = "PG" Record = 1 *.LIST RECORD 1 Title,Rating Record# TITLE RATING 1 AMADEUS PG Смотри также: CONTINUE, FOUND(), EOF() 4.62 MENU --------------------------------------------------------------- Создание открываемого меню Формат: MENU BAR <массив> <числ_выраж> MENU <числ_выраж1> <массив> <числ_выраж> [,<числ_выраж>] READ MENU BAR TO <перем1> <перем2> SAVE] Эта команда состоит из нескольких команд, создающих откры- вающиеся меню. Открывающиеся меню состоят из полосы меню (распо- ложенной в верхнем ряду экрана), содержащей заголовки меню. В каждм меню находится массив опций. Для перемещения светового маркера по пунктам меню использу- ются клавиши управления курсором. Когда курсор находится на за- головке меню, он немедленно выделяется ярким светом, а под ним открываются расположенные в нем опции. Клавиши управления курсо- ром также используются для перемещения светового маркера по ко- лонке опций меню. Прип нажатии левой или правой стрелок управле- ния курсором открывается сосоднее меню. Если в меню содержится больше названий, чем может помес- титься на экране, то остальные располагаются на следующих экран- ных страницах. При создании новой полосы меню первым шагом надо указать ее размерность (DIMENSION) и инициализировать соответствующий ей массив. Это заголовки меню, такие как File, Edit и Data (см. пример). Затем указать размерность и инициализировать массив для каждой опции меню. Затем инсталировать полосу меню, используя команду MENU BAR, а также инсталировать каждое отдельное меню в полосе меню, используя несколько команд меню - по одной на каж- дое. И наконец, запустить новую систему меню, вызвав команду READ MENU BAR. MENU BAR <массив> <числ_выраж> Команда MENU BAR используется для инсталяции массива <мас- сив> полосы меню. Опции <массив> должны быть символьного типа. По умолчанию все элементы <массив> становятмя заголовками меню. <массив> - Двухмерный массив символьных строк. <массив(i,1) - это заголовок меню, который появится в полосе меню в позиции 1. Если <массив(i,2) - ненулевая строка симво- лов, то она используется как длинное описание команды, которая появится в области SET MESSAGE TO. <числ_выраж> - Число заголовков меню, помещаемых в полосе меню. MENU <числ_выражN1>,<массив>,<числ_выражN2> [,<числ_выражN3>] Команда MENU помещает меню в полосу меню. <числ_выражN1> - Указывает позицию в полосе меню, в которую бу- дет помещено определяемое меню. <массив> - Одномерный массив, содержащий символьные строки, ис- пользуемые как опции меню. Если первым знаком опции является обратная косая черта (\), то это значит, что данную опцию выбрать нельзя. Если опция задается с по- мощью "\-", то в этом меню изображается графический курсор. Это позволяет группировать опции в меню. <числ_выражN2> - Число опций меню в меню. <числ_выражN3> - Необязательная величина - указывает число опций меню, которые будут выводиться на экран в конкретный момент. Если опций больше, чем одновременно выводится на экран, то меню прокручивается. READ MENU BAR TO <перем1>,<перем2> [SAVE] Эта команда включает всю структуру меню, определенную дан- ными выше двумя командами. <перем1-2> - Переменные памяти, используемые для двух различных целей. Во-первых, они определяют заголовок меню и оп- цию меню, на которой будет находиться курсор в момент вывода меню на экран. (Если их значения не соответст- вуют опции меню, первоначальным местом считается опция 1 в заголовке меню 1). Во-вторых, они используются возврата выбранного в результате работы операции READ значений массива подписей к заголовкам меню и опциям меню. Если в меню ничего не выбрано, обе переменные возвращают значение 0. SAVE - Если не использована опция SAVE, то после выбора опции меню очищается, а экран возвращается к первоначальному виду. Если опция SAVE была определена, то меню остает- ся на экране после выбора опции. Пример программы: *** *** A program example of PULL-DOWN VENUS**** *** SET STATUS OFF SET ECHO OFF SET TALK OFF SET MESSAGE TO 24 *** ***Intialize the array for the menu bar*** *** DIMENSION top (3,2) top(1,1) = ' FILE ' top(2,1) = ' EDIT ' top(3,1) = ' DATA ' top(1,2) = 'FILE SELECTIONS' top(2,2) = 'EDIT SELECTIONS' top(3,2) = 'DATA SELECTIONS' *** ***Dimension and intialize an array ***for the File menu*** *** DIMENSION file(7) file(1) = 'NEW' file(2) = 'OPEN' file(3) = 'CLOSE' file(4) = '\-' &&Insert a line between menu items file(5) = 'SAVE' file(6) = 'PRINT' file(7) = 'QUIT' *** ***Dimension and intialize an array ***for the Edit menu*** *** DIMENSION edit(5) edit(1) = 'COPY' edit(2) = 'FIND' edit(3) = 'REPLACE' edit(4) = 'UNDO' edit(5) = 'CLEAR' *** ***Dimension and intialize an array ***for the Data menu*** *** DIMENSION data(9) data(1) = 'BROUSE' data(2) = 'APPEND' data(3) = 'SORT' data(4) = 'JOIN' data(5) = '\-' && Insert a line between menu items data(6) = 'TOTAL' data(7) = 'AVERAGE' data(8) = 'COUNT' data(9) = 'SUM' *** *** Install the pull-dwn menu systems *** MENU BAR top,3 && Install the menu bar MENU 1,file,7,7 && Install the file menu into the menu bar MENU 2,edit,5,6 && Install edit menu into the menu bar MENU 3,data,9,5 && Install data menu into the menu bar *** ***Initialaize the placement of the light-bar *** row=1 col=1 *** ***Activate the pull-down menu system *** READ MENU BAR TO row,col SAVE Смотри также: @<ряд>,<кол>MENU, MENU TO, READ MENU 4.63 MENU TO --------------------------------------------------------------- Вызвать меню со световой полосой Формат: MENU TO <перем. памяти> Команда MENU - это одна из трех команд, используемых в FoxBASE+ для создания меню со световой полосой. Группа команд @...PROMPT используется для вывода опций меню в определенных позициях на экране. Команда MENU TO <перем. памя- ти> загружает меню со световой полосой для текущих команд PROMPT, работающее под управлением клавиш, управляющих курсором. По мере передвижения пользователя по опциям меню, каждый PROMPT выделяется подсветкой. При этом в позиции, определенной с помощью SET MESSAGE TO <числ_выражN> может появляться относящее- ся к нему необязательное сообщение. Опции выбираются одним из двух способов: - нажав клавишу ВВОД, когда световая полоса находится на нужном PROMPT - нажав первую букву нужного PROMPT. Переменная памяти <перем.памяти> используется для двух раз- личных целей. Во-первых, она определяют опцию меню, на которой будет находиться курсор в момент вывода меню на экран. (Если их значения не соответствуют опции меню, первоначальным местом счи- тается опция 1 в заголовке меню 1). Во-вторых, она используются возврата выбранного в результате работы операции READ опции ме- ню. Если в меню ничего не выбрано, обе переменные возвращают значение 0. READKEY - устанавливается при выходе из меню со световой полосой. Смотри также: @...PROMPT,@@<ряд>,<кол>MENU, MENU TO, READ MENU, SET MESSAGE TO 4.64 MODIFY COMMAND/FILE --------------------------------------------------------------- Корректировать/создать файл Формат: MODIFY COMMAND/FILE [<файл>] Этот формат команды MODIFY заносит указанный файл [файл] в текстовый редактор FoxBASE+. С опцией COMMAND подразумевается расширение имени файлов .PRG. Это используется для редактирова- ния командных файлов. MODIFY FILE не подразумевает расширения .PRG. Если в файле CONFIG с помощью TEDIT не указан какой-либо внешний редактор, то используется редактор, встроенный в FoxBASE+. Встроенный редактор позволяет редактировать файлы, размер которых не превышает 64К. Когда закончится внесение изменений в файл, измененная вер- сия записывается на диск, а соответствующий файл .FOX автомати- чески удаляется и старая версия программы (если таковая имеется) автоматически выгружается из внутреннего буфера команд FoxBASE+. Редактор FoxBASE+ в это же время создает копию с расширением .BAK. ________________________________________________ ! Если вы выполняете редактирование процедуры ! ! в составе процедурного файла, необходимо ис- ! ! пользовать команду CLEAR PROGRAM для удале- ! ! ния процедуры из памяти. Дополнительная ин- ! ! формация по этому вопросу приведена в описа- ! ! нии команды CLEAR PROGRAM. Также, если су- ! ! ществует соответствующий файл с расширением ! ! .FOX, то его следует удалить. ! !______________________________________________! Информация об использовании управляющих клавиш в редакторе MODIFY COMMAND приведена в разделе "Клавиши управления курсором" в главе 3. 4.65 MODIFY LABEL/REPORT --------------------------------------------------------------- См CREATE Этот формат команды MODIFY используется для модификации файлов ярлыков и отчетов. Дополнительная информация по этому вопросу приведена в описании команды CREATE LABEL и CREATE REPORT. 4.66 MODIFY STRUCTURE --------------------------------------------------------------- Корректировать структуру базы данных Формат: MODIFY STRUCTURE Команда MODIFY STRUCTURE выводит структуру активного файла базы данных. Затем может быть выполнено редактирование структуры в полноэкранном режиме, включая введение новых и удаление старых полей, изменение имен, размеров и типов полей. FoxBASE+ выполняет автоматическое копирование файла <файл> перед изменением структуры. Когда процесс редактирования будет завершен, данные, содержащиеся в скопированном файле базы данных (.BAK) будут введены в отредактированную структуру файла. Будет также создана копия файла мемо (.DBT) с расширением .TBK, если в файле <файл> изменяется количество полей мемо. ____________________________________________________ ! ПРЕДУПРЕЖДЕНИЕ: Записи из копии файла не будут ! ! введены в новую структуру, если единовременно ! ! будут изменены и имя и длина поля (или общая ! ! длина записи). В связи с этим рекомендуется при ! ! первом сеансе работы в MODIFY STRUCTURE изменять ! ! имена полей, а затем со второго прохода изменять ! ! длину полей и/или вводить новые поля. ! !__________________________________________________! Смотри также: CREATE <файл>. 4.67 NOTE/*/&& --------------------------------------------------------------- Внести комментарий в командную строку Форматы: NOTE [<комментарии>] *[<комментарии>] &&[<комментарии>] Команда NOTE позволяет вводить комментарии в командную строку. FoxBASE+ проигнорирует все символы, следующие за коман- дой NOTE или символом *. Если вы хотите продолжить комментарий на следующей строке, в конец первой строки комментария необходи- мо ввести точку с запятой (;). Комментарии могут быть также введены в конец командной строки посредством введения перед текстом комментария двух сим- волов (&&). Использование комментариев для обозначения конца структур IF и DO значительно повышает читаемость программы. Примеры: NOTE Инициализация переменной памяти; номера страницы STORE 1 TO Mpgnmbr * Задание цикла DO WHILE Mpgnmbr <= 25 && цикл 25 раз Mpgnmbr = Mpgnmbr + 1 ENDDO && DO WHILE Mpgnmbr <= 25 4.68 ON --------------------------------------------------------------- Отслеживание условия при выполнении программы Формат: ON ERROR/ESCAPE/KEY [<команда>] ON KEY = <числ_выраж>[<команда>] Команда ON отслеживает указанное условие при выполнении программы. При выполнении указанного условия выполняется указан- ная команда. Этим условием может быть ошибка FoxBASE+ (ERROR), нажатия клавиши Escape (ESCAPE), нажатие любой клавиши (KEY) или опреде- ленной клавиши (KEY = <числ_выраж>). Если используется несколько команд ON, их приоритет установлен в следующем порядке: ERROR, ESCAPE, KEY. Все команды ON остаются активными до тех пор, пока не будет обнаружена следующая команда ON, использующая то же условие. Но- вая введенная <команда> отменяет ранее введенную команд, кроме того ранее введенная команда может быть отменеа вводом команды ON без указания команды. После выполнения <команды> выполнение программы продолжает- ся со строки, следующей за строкой, с которой был произведен пе- реход. Однако если <команда> является командой DO <файл>, и вы- ход из <файла> производится при помощи команды RETRY, выполнение команды продолжается с той же строки, с которой был выполнен пе- реход. За исключением команды ON KEY=<числ_выраж>, код нажатой клавиши сохраняется в буфере клавиатуры. Этот код может быть удален из буфера при помощи команды INKEY() или аналогичной ей. ____________________________________________________ ! Команда ON ESCAPE не будет выполняться, если ус- ! ! тановлено SET ESCAPE OFF. ! !__________________________________________________! Пример: ON ERROR DO Proc1 PROCEDURE Proc1 <команды> ON ERROR RETURN В этом примере программа перейдет к выполнению процедуры Proc1, если пройзойдет ошибка FoxBASE+. После того, как <коман- ды> в программном файле будут выполнены, команда ON ERROR выклю- чается второй командой ON ERROR. Команда ON KEY назначает определенную клавишу в качестве рабочей. Это позволяет разработчику вводить вспомогательную ин- формацию, зависящую от контекста, например, путем переназначения клавиши F1. Функции SYS(16) и SYS(18) могут быть использованы для вывода названия активной процедуры и имени поля при нажатии назначенной клавиши. Может быть назначена клавиша, имеющая скэн-код любой функ- циональной клавиши, а не только F1. Назначенаая клавиша может использоваться в процессе работы с файлом форматов (.FMT) вместе с командами EDIT, APPEND, CHANGE, INSERT, И READ. Клавиша, которой соответствует графический образ, может быть назначена рабочей посредством использования значения кода ASCII в выражении <числ_выраж>. Фукнциональная клавиша или уп- равляющая клавиша могут быть назначены рабочими посредством ис- пользования соответствующего кода клавиши, плюс 256 в выражении <числ_выраж>. Таблица этих значений приведена в приложении Е. Пример: SET PROCEDURE TO exampl DO vdeosale PROCEDURE vdeosale SET TALK OFF CLEAR vname = SPACE(10) buyrent = "B" * *Trap F! for help 'hot-key' * ON KEY=315 DO userhelp; WITH SYS(16), SYS(18) * *Draw input screen * @ 10,10 SAY "VIDEO NAME:" GET vname; PICTURE "AAAAAAAAAA" @ 12,10 SAY "(B)UY OR (R)ENT:"; GET buyrent VALID (buyrent $'BRbr') READ PROCEDURE userhelp * *Recieve program name and field name * PARAMETERS pgmname, fldname SAVE SCREEN CLEAR * Strip drive name off pgmname pgmname = substr(pgmname,3) IF pgmname="VDEOSALE.PRG" @ 2,0 TO 5,79 DOUBLE &&draw a box DO CASE CASE fldname = "VNAME" @ 3,10 SAY "Enter the name of the; video." CASE fldname = "BUYRENT" @ 3,10 SAY "Enter 'B' if Buing the; video or 'R' if Renting it." ENDCASE @ 4,10 SAY "Press a key to continue..." WAIT "" ENDIF RESTORE SCREEN RETURN Далее приведены несколько рекомендаций по использованию процедур ON KEY= для организации контекстно зависимой помощи пользователю. * Процедура HELP не должна использовать команды READ, @...GET, или CLEAR GETS. При попытке их использования будет выдано сообщение "A READ is currently in effect". * Для упродения ваших процедур help вводите команду SAVE SCREEN при входе и RESTORE SCREEN при выходе для сохранения образа части экрана, в которой была выведена информация. * При использовании фукнции SYS(16) для вывода имени процедуры используйте фукнцию SUBSTR() для удаления имени дисковода из начала имени процедуры с тем, чтобы ваша программа могла быть установлена на любом дисководе. Смотри также: INKEY(), READKEY, SET ESCAPE, RETURN, RETRY, SYS(18) 4.69 PACK --------------------------------------------------------------- Физически удаляет логически удаленные записи Формат: PACK Команда PACK окончательно удаляет все записи в активном файле базы данных, помеченные для удаления командой DELETE. _________________________________________ ! После выполнения команды PACK невоз- ! ! можно восстановить записи, помеченные ! ! для удаления командой DELETE. ! !_______________________________________! Если активная база данных используется совместно с одним или несколькими индексными файлами, команда PACK переформирует ин- дексные файлы. Несмотря на установку команды SET ESCAPE, нажатие клавиши ESC не прервет выполнение команды PACK. Пример: *.USE Video *.COUNT 35 records *.DELETE FOR RECNO() = 2 1 record deleted *.COUNT 35 records *.PACK 34 records copied *.COUNT 34 records Смотри также: DELETE, RECALL, ZAP. 4.70 PARAMETERS --------------------------------------------------------------- Определяет переменные памяти в качестве параметров процедуры Формат: PARAMETERS <список_парам> Команда PARAMETERS позволяет назначить данным, передаваемым вызывающей программе, имена локальных переменных. Эта команда должна быть первой в вызванной программе. Пара- метром в списке параметров <список_парам> может быть любая пере- менная памяти с допустимым именем. Параметры в списке параметров <список_парам> разделяются запятыми и должны соответствовать ко- личеству параметров, приведенных в списке вызывающей программы. Если имя переменной памяти изменяется в вызванной программе, из- мененное значение передается в вызвавшую программу. Пример: * Salestax.PRG PARAMETERS Sub,Tot,Tax Tot=(Sub*Tax)+Sub * End Salestax.PRG Для выполнения программы Salestax.PRG: *.USE Video *.STORE 0.00 TO Total *.STORE Cost_buy TO Subtotal *.STORE .055 TO Taxrate *.? Cost_buy 59.95 *.DO Salestax WITH Subtotal,Total,Taxrate *.? Total 63.24725 Смотри также: DO, PRIVATE, PUBLIC, PROCEDURE 4.71 PRIVATE --------------------------------------------------------------- Описать локальную переменную памяти Форматы: PRIVATE <список_перем_пам> PRIVATE ALL [LIKE/EXCEPT <скел>] Команда PRIVATE позволяет совместно использовать одну пере- менную памяти как переменную, которая была создана в вызвавшей программе или была описана ранее, как переменная памяти PUBLIC. При выполнении программы, содержащей переменные памяти PRIVATE, все переменные, имеющие те же имена, будут "спрятаны" от пользователя до тех пор, пока не завершится выполнение прог- раммы. Когда программа, содержащая переменные памяти PRIVATE, завершит свою работу, все переменные, имеющие имена, дублирующи- еся в команде PRIVATE, будут восстановлены. Может быть объявлен определенный список переменных памяти PRIVATE (формат а), или для указания переменных памяти PRIVATE может быть использован трафарет (формат b). Смотри также: DO, PARAMETERS, PUBLIC 4.72 PROCEDURE --------------------------------------------------------------- Обозначить начало процедуры Формат: PROCEDURE <имя процедуры> Команда PROCEDURE является первым оператором в составе проце- дуры. Эта команда идентифицирует начало каждого процедурного файла. Имя процедуры может содержать до 8 символов. Оно должно начинаться с буквы и может содержать буквы, цифры и символы под- черкивания. Может быть также выполнен косвенный вызов, если команда PROCEDURE обнаруживается в командном файле и эта процедура не является частью команды SET PROCEDURE TO <файл>, которая была выполнена ранее. Пример программы: * Total.PRG SET TALK OFF USE Video STORE 0.00 TO Subtotal STORE " " TO Subtotal @ 5,0 SAY "RENT OR BUY:" GET Action PICTURE "!!!!!" READ SET PROCEDURE TO Subtotal && открыть процедурный файл IF Action = "RANT" DO Rent && выполнить процедуру Rent ELSE Action = "BUY" DO Buy && выполнить процедуру Buy ENDIF CLOSE PROCEDURE && закрыть процедурный файл * End ещефдюЗКП * Procedure файл Subtotal.PRG PROCEDURE Buy Subtotal=Cost_buy RETURN PROCEDURE Rent Subtotal=Cost_rent RETURN *End Procedure файл Subtotal.PRG Смотри также: SET PROCEDURE TO. 4.73 PUBLIC --------------------------------------------------------------- Описать переменную памяти общего пользования Форматы: PUBLIC <список_перем_пам> PUBLIC <перем_пам> (<числ_выраж1>[,<числ_выраж2>]) [,<перем_пам> (<числ_выраж>[,<числ_выраж>])...] Команда PUBLIC позволяет вам описывать глобальные переменные памяти. Переменные памяти PUBLIC могут быть использованы в любом программном файле в текущем сеансе работы с FoxBASE+. Перем енные памяти, создаваемые командой PUBLIC, инициализи- руются как ".F.", за исключением глобальной переменной FOX, ко- торая автоматически инициализируется ".Т.". Глобальная перемен- ная FOX позволяет использовать в программном файле FoxBASE+ ко- манды и функции, не поддерживаемые самим FoxBASE+. Важно помнить, что все переменные памяти, которые вы хотите описать, как PUBLIC, должны быть объявлены PUBLIC перед занесе- нием в них значений. _________________________________________ ! Если вы попытаетесь присвоить значе- ! ! ние переменной памяти, а затем попы- ! ! таетесь описать эту переменную, как ! ! PUBLIC, будет выведено сообщение о ! ! синтаксической ошибке. ! !_______________________________________! Вы можете объявить любую переменную памяти PRIVATE в качестве PUBLIC. При использовании формата 2 может быть сформирован одномерный или двумерный массив. Смотри также: DIMENSION, PRIVATE, DO, PARAMETERS 4.74 QUIT --------------------------------------------------------------- Прервать сеанс работы в FoxBASE+ Формат: QUIT Команда QUIT позволяет вам окончить текущий сеанс работы в FoxBASE+. _________________________________________ ! Для окончания работы с FoxBASE+ всег- ! ! да используйте команду QUIT. Выключе- ! ! ние компьютера без команды QUIT может ! ! привести к повреждению открытых фай- ! ! лов и потере информации. ! !_______________________________________! Дополнительная информация по этому вопросу приведена в главе 3 в разделе "Прочтите этот раздел ПЕРЕД работой в FoxBASE+". 4.75 READ --------------------------------------------------------------- Считать данные из @...GET Формат: READ [SAVE] Использованием команды READ начинается полноэкранное редактирование или ввод данных для всех операторов @ GET. Курсор может быть перемещен в любую позицию @ GET, после чего могут быть введены или отредактированы данные. Любые введенные или измененые данные будут считаны командой READ в соответствующее поле или переменную памяти с помощью оператора @GET. Если коман- да READ встречается в тот момент, когда не задействована никакя команда GET, FoxBASE+ ожидает нажатия любой клавиши, после чего родолжает выполнение. Данные, введенные или отредактированные командой READ, должны относиться к определенным ранее переменным памяти или именам по- лей файла базы данных в области USE. Переменные памяти могут быть описаны, как пустые строки символов (" ") или с нулевым числовым значением (0) для выполнения этого требования команды READ. В обычной ситуации все операторы GET будут очищены вслед за выполнением команды READ. Использование команды SAVE совместно с командой READ позволит избежать очистки операторов GET. Обяза- тельно введите команду CLEAR GETS во избежание достижения пре- дельного количества операторов GET. Смотрите раздел 6 для полу- чения информации об установке количества количества активных оперторов GET с помощью параметра BUCKET в файле CONFIG.FX. Примеры: *.STORE " " TO Class *.@ 5,0 SAY "What type of Movie do you like?" GET Class *.READ SAVE *.USE Video *.@ 6,0 GET Title *.READ В первом примере команды READ переменная памяти Class может быть отредактирована. Во втором примере команды READ может быть отредактировано поле Title базы данных Video. В связи с тем, что после первой команды GET была выполнена команда READ SAVE, когда выполняется вторая команда READ, переменная памяти Class может быть вновь отредактирована. Смотри также: CLEAR GETS, CLEAR MEMORY, @ 4.76 READ MENU --------------------------------------------------------------- Активизация вынимаемого меню Формат: READ MENU TO <перем> [SAVE] Эта команда активизирует вынимаемое меню, определенное коман- дой @<коорд> MENU. <перем> - Переменная, определяющая начальную позицию световой полосы в меню и возвращающая номер выбранной опции меню. Смотри также: @<перем> MENU 4.77 RECALL --------------------------------------------------------------- Отменить логическое удаление записей Формат: RECALL [<диапазон>] [FOR <логич_выраж>] [WHILE <логич_выраж>] Команда RECALL отменяет пометку записей для удаления. Любая команда DELETE может быть отменена последующей командой RECALL. Команда RECALL может быть использована для отмены удаления, если по отношению к файлу не были использованы команды PACK или ZAP. ______________________________________ ! Если была использована команда ! ! PACK или ZAP, все записи, которые ! ! были ранее помечены для удаления, ! ! безвозвратно удалены. ! !____________________________________! Пример: *.USE Video *.DELETE FOR .NOT. Available 15 recjrds deleted *.RECALL FOR .NOT. Available 15 records recalled Смотри также: DELETE, DELETED(), PACK, SET DELETED, ZAP 4.78 REINDEX --------------------------------------------------------------- Переформировать активные индексные файлы Формат: REINDEX Команда REINDEX используется для кооректировки индексных фа- лов, которые не были активными в процессе внесения изменений в ключевые поля активной базы данных. Для выполнения операции переиндексирования, введите команду USE <база данных>INDEX <индексный файл> а затем введите команду REINDEX. При этом будет откорректирован индексный файл. Команда REINDEX сохраняет текущий статус UNIQUE индексного файла при его переформировании. Пример: *.USE Video INDEX Title *.REINDEX Reindexing index file - C:\FOX\TITLE.NDX 35 records indexed Смотри также: INDEX, SET INDEX, SET UNIQUE, USE 4.79 RELEASE --------------------------------------------------------------- Освободить память, занятую переменными памяти Формат: RELEASE <список_перем_пам> RELEASE ALL [LIKE/EXCEPT <скел>] Команда RELEASE используется для удаления из памяти перемен- ных и программ на Ассемблере. Команда RELEASE <список_перем_пам> используется для удаления только тех переменных, которые приведены в списке. Команда RELEASE ALL удаляет из памяти все сохраняемые в ней переменные памяти. Команда RELEASE ALL LIKE/EXCEPT <скел> используется либо для удаления всех переменных памяти, аналогичных приведенному скеле- ту <скел>, либо всех переменных памяти, кроме тех, которые ана- логичны приведенному скелету <скел>. <скел> имеет ту же форму, что и в формате команды DISPLAY FILES. Примеры: *.STORE 59.95 TO T:cost *.STORE 49.95 TO M:cost *.STORE 39.95 TO Cost *.STORE "THE BLUE BROTHERS" TO T:movie *.STORE "THE COTTON CLUB" TO M:movie *.STORE "SOUNDER" TO Movie *.DISPLAY MEMORY T:COST Pub N 59.95 ( 59.95000000) M:COST Pub N 49.95 ( 49.95000000) COST Pub N 39.95 ( 39.95000000) T:MOVIE Pub C "THE BLUES BROTHERS" M:MOVIE Pub C "THE COTTON CLUB" MOVIE Pub C "SOUNDER" 6 variables defined 64 bytes used 250 variables available 5936 bytes available *.RELEASE ALL LIKE T:* *.DISPLAY MEMORY M:COST Pub N 49.95 ( 49.95000000) COST Pub N 39.95 ( 39.95000000) M:MOVIE Pub C "THE COTTON CLUB" MOVIE Pub C "SOUNDER" 4 variables defined 38 bytes used 252 variables available 5962 bytes available *.RELEASE ALL EXCEPT M:* *.DISPLAY MEMORY M:COST Pub N 49.95 ( 49.95000000) COST Pub N 39.95 ( 39.95000000) M:MOVIE Pub C "THE COTTON CLUB" 2 variables defined 23 bytes used 254 variables available 5977 bytes available *.RELEASE ALL *.DISPLAY MEMORY 0 variables defined 0 bytes used 256 variables available 6000 bytes available Смотри также: CLEAR MEMORY, RETURN, SAVE, STORE 4.80 RELEASE MODULE --------------------------------------------------------------- Освобождает область памяти, занятую программным модулем в двоичном формате Формат: RELEASE MODULE <файл> Команда RELEASE MODULE <файл> удаляет из памяти программы на Ассемблере, которые были ранее загружены в память при помощи ко- манды LOAD. Смотри также: CLEAR MEMORY, LOAD, CALL 4.81 RENAME --------------------------------------------------------------- Переименовать дисковый файл Формат: RENAME <стар_файл> TO <нов_файл> Команда RENAME используется для переименования файла и назна- чения ему вместо его текущего имени <стар_файл> нового имени <нов_файл>. Расширения имен файлов должны быть ведены как для старого имени файла <стар_файл>, так и для нового имени <нов_файл>. Могут быть приведены указатели дисководов, если фай- лы расположены не на принятом по умолчанию дисководе. Для работы команды RENAME должны выполняться несколько усло- вий. Первое, файл с именем <нов_файл> не должен существовать. Второе, файл с именем <стар_файл> должен существовать и быть закрытым. Смотри также: CLOSE, COPY 4.82 REPLACE --------------------------------------------------------------- Корректировка записей базы данных Формат: REPLACE [<диапазон>] <поле> WITH <выраж> [,<поле2> WITH <выраж2>...] [FOR <логич_выраж>] [WHILE <логич_выраж>] Для активного файла базы данных команда REPLACE выполняет за- мену данных, находившихся в поле <поле> на данные, приведенные в выражении <выраж>. При необходимости может быть указан параметр диапазона [диапазон]. Диапазоном по умолчанию является одна те- кущая запись. _________________________________________ ! В связи с тем, что команда REPLACE ! ! производит корректировку активных ин- ! ! дексных файлов при каждом своем вы- ! ! полнении, корректировки не должны вы- ! ! полняться в отношении ключевого поля ! ! индексированного файла с использова- ! ! нием операторов [диапазон], FOR <вы- ! ! раж> или WHILE <выраж>. ! !_______________________________________! Если это предупреждение проигнорировано, то существует веро- ятность, что будет произведена только часть необходимых замен. В числовых полях в случае, когда выражение WITH по своей дли- не превосходит ширину поля, команда REPLACE согласует их следую- щим образом: * Дробные десятичные знаки будут отброшены, а остальные зна- чащие цифры округлены. Если значения все же не согласуются * Cодержимое указанного поля будет заменено на числа в науч- ном формате (с фиксированной запятой)(При этом уменьшится точ- ность). Если и в этом случае не будет достигнута согласованность * Содержимое поля будет заменено на звездочки (*). Пример: *.USE Video *.REPLACE ALL Cost_rent WITH Cost_rent+.25 35 replacements 4.83 REPORT --------------------------------------------------------------- Создать отчет Формат: REPORT [FORM <файл>] [<диапазон>] [FOR <логич_выраж>] [WHILE<логич_выраж>] [PLAIN/HEADING <симв_выраж>] [NOEJECT] [TO PRINT] [TO FILE <файл>] [SUMMARY] Команда REPORT используется для создания отчетов по активной в текущий момент базе данных. Отчетные форматы следует создавать при помощи команд CREATE или MODIFY REPORT. Отчеты могут быть направлены на принтер, на экран, или в текстовый файл ASCII. Для форматных файлов отчета расширением по умолчанию принято .FRM. Будут распечатаны все записи в составе базы данных, если не заданы операторы диапазона [диапазон], FOR или WHILE <выраж>. Если задан дополнительный параметр PLAIN, FoxBASE+ будет по- давлять печать номеров страниц и даты в верхней части каждой страницы отчета. Заголовок страницы будет выведен только в нача- ле отчета. Парметр HEADING используется для указания дополни- тельной строки заголовка, которая печатается на каждой странице отчета. Если указаны оба параметра, PLAIN и HEADING, параметр PLAIN будет иметь более высокий приоритет. Параметр NOEJECT подавляет начальный прогон формата перед на- чалом печати отчета. Параметр TO PRINT указывает, что отчеты будут направляться и на экран и на принтер. Если этот параметр отсутствует, отчеты направляются только на экран. Параметр TO FILE направляет отчет в текстовый файл ASCII. Параметр SUMMARY позволяет подавлять вывод каждой строки от- чета. Будут выводиться только промежуточные и окончательные ито- ги. Смотри также: CREATE REPORT, MODIFY REPORT 4.84 RESTORE FROM --------------------------------------------------------------- Восстановить переменные памяти из файла .MEM Формат: RESTORE FROM <файл> [ADDITIVE] Команда RESTORE восстанавливает значения переменных памяти, сохраненных ранее командой SAVE в файл .MEM и помещает их в па- мять. При вводе команды RESTORE переменные памяти, находящиеся в памяти в текущий момент, будут удалены, если в строке команды не указано управляющее слово ADDITIVE. Если количество переменных памяти, вводимых в память с использованием параметра ADDITIVE, превышает максимально разрешимое в FoxBASE+ количество перемен- ных памяти, то из файла .MEM будет перенесено в память столько переменых памяти, сколько является допустимым. Когда команда RESTORE вводится в составе программного файла .PRG, все переменные памяти восстанавливаются со статусом PRIVATE. Если вы вводите команду RESTORE от точечной подсказки, переменные памяти восстанавливаются со статусом PUBLIC. Примеры: *.STORE "GREMLINS" TO Movie *.STORE 49.95 TO Cost *.LIST MEMORY COST Pub N 49.95 ( 49.95000000) MOVIE Pub C "GREMLINS" 2 variables defined 16 bytes used 254 variables available 5984 bytes available *.SAVE TO Movie *.RELEASE ALL *.LIST MEMORY 0 variables defined 0 bytes used 256 variables available 6000 bytes available *.RESTORE FROM Movie *.LIST MEMORY COST Pub N 49.95 ( 49.95000000) MOVIE Pub C "GREMLINS" 2 variables defined 16 bytes used 254 variables available 5984 bytes available Смотри также: SAVE, RELEASE 4.85 RESTORE SCREEN --------------------------------------------------------------- Восстановить образ экрана из памяти Формат: RESTORE SCREEN [FROM <перем_пам>] Команда RESTORE SCREEN востанавливает текущий вид экрана из буфера или переменной памяти. Образ экрана долен быть ранее за- несен в буфер или переменную памяти командой SAVE. Переменные памяти, содержанием которых является образ экрана, при выводе командой DISPLAY MEMORY обозначаются "S". Образы эк- рана, сохраненные в переменных памяти, могут заноситься и вызы- ваться из файлов переменных памяти аналогично другим переменным памяти. Возможность сохранять и восстанавливать образы экрана при помощи команд SAVE и RESTORE избавляет вас от необходимости последовательно восстанавливать вид экрана каждый раз при необ- ходимости вывода. Смотри также: SAVE SCREEN 4.86 RESUME --------------------------------------------------------------- Возобновляет выполнение приостановленной программы Формат: RESUME Команда RESUME вызывает продолжение выполнения программы, прерванное командой SUSPEND. Выполнение приостановленной программы будет продолжено со строки, на которой было приостановлено выполнение. Использование команд SUSPEND и RESUME поможет разработчикам при отладке программ. Когда выполнение программы приостановлено командой SUSPEND, можно увидеть текущий статус конфигурации FoxBASE+, чтобы понять, из-за чего возникло затруднение. Рекомендуется вводить команду CLEAR или команды SAVE и RESTORE перед командой RESUME, с тем, чтобы команды, введенные в период, когда программа была приостановлена, не мешали своим ви- дом при вводе/выводе на экран. Смотри также: CANCEL, RETURN, SUSPEND 4.87 RETRY --------------------------------------------------------------- Повторить выполнение предыдущей команды Формат: RETRY Команда RETRY возвращает управление вызвавшей программе. Строка, которая была выполнена последней в вызвавшей программе, выполняется вновь. Команда RETRY аналогична команде RETURN с той разницей между ними, что в случае команды RETURN выполняется следующая строка вызвавшей программы, а в случае команды RETRY, как было указано, повторяется выполнение последней строки. Команда RETRY особенно полезна в случае, когда некоторый на- бор команд должен повторяться до тех пор, пока не будет выполне- но некоторое условие, или в процедурах обработки ошибок. Смотри также: RETURN 4.88 RETURN --------------------------------------------------------------- Возвратить управление вызвавшей процедуре Формат: RETURN [TO MASTER/<выраж>] Команда RETURN является командой, завершающей командный файл. Затм эта команда возвращает управление вызвавшему файлу, в инте- рактивный режим или в операционную систему. Использование команды RETURN в конце программы не является обязательным, поскольку выполнение последнего выражения програм- мы автоматически приведет к выполнению оператора RETURN. При выполнении команды RETURN будут удалены все переменные памяти PRIVATE. Если использован параметр TO MASTER, управление передается в вызвавшую программу самого верхнего уровня. Если программа будет рассматриваться, как заданная пользова- телем фукнция, после слова RETURN должно следовать выражение <выраж>. Если программа, которая рассматривается в качестве за- данной пользователем функции используется также и с командой DO <файл>, возвращенное командой RETURN значение игнорируется. Смотри также: UFD's, PRIVATE, PUBLIC 4.89 RUN|! Выполнить команду DOS Форматы: RUN <команда> ! <команда> Команда RUN выполянет команду операционной системы, а затем возвращает управление в FoxBASE+. _________________________________________________________ ! Предупреждения: ! ! 1. Для использования команды RUN в MS-DOS должен ! ! быть сделан доступным посредством переменной среды ! ! MS-DOS PATH файл COMMAND.COM. ! ! 2. Находясь в FoxBASE+ не запускайте программы реор- ! ! ганизации файловой структуры, такие, как например, ! ! CHKDSK. Изменяя содержимое дисков, эти программы мо- ! ! гут нарушить работу FoxBASE+ ! !_______________________________________________________! Для получения дополнитель ной информации о работе SET COMSPEC смотрите ваше руководство по DOS. Примеры: *.RUN FOXCOMP Tape=lib.PRG *.STORE "07/03/86" TO Today *.? DATE() 06/22/86 *.! DATE &Today && изменение системной даты *.? DATE() 07/03/86 4.90 SAVE SCREEN --------------------------------------------------------------- Сохранить образ экрана в памяти Формат: SAVE SCREEN [TO <перем_пам>] Команда SAVE SCREEN сохраняет образ текущего экрана в буфер или в переменную памяти с тем, чтобы восстановить его в дальней- шем командой RESTORE. Переменные памяти, содержанием которых является образ экрана, при выводе командой DISPLAY MEMORY обозначаются "S". Образы эк- рана, сохраненные в переменных памяти, могут заноситься и вызы- ваться из файлов переменных памяти аналогично другим переменным памяти. Возможность сохранять и восстанавливать образы экрана при помощи команд SAVE и RESTORE избавляет вас от необходимости последовательно восстанавливать вид экрана каждый раз при необ- ходимости вывода. Смотри также: RESTORE SCREEN 4.91 SAVE TO --------------------------------------------------------------- Формат: SAVE TO <файл> [ALL LIKE/EXCEPT <скел>] Команда SAVE сохраняет текущие переменные памяти в файл памя- ти. Расширением имени файла памяти по умолчанию принято .MEM. Если задан параметр ALL LIKE <скел>, сохраняются только те переменные памяти, которые аналогичны приведенному скелету <скел>. Если задан параметр ALL EXCEPT <скел>, сохраняются все переменные памяти, кроме тех, которые аналогичны приведенному скелету <скел>. При задании <скел> вопросительный знак (?) обозначает любой отедльный символ, а звездочка (*) обозначает наличие или отсутс- твие любого символа. Используйте команду RESTORE для обратной загрузки в память сохраненных командой SAVE переменных памяти. Примеры: *.STORE "GREMLINS" TO Movie *.STORE 49.95 TO Cost *.LIST MEMORY COST Pub N 49.95 ( 49.95000000) MOVIE Pub C "GREMLINS" 2 variables defined 16 bytes used 254 variables available 5984 bytes available *.SAVE TO Movie *.RELEASE ALL *.LIST MEMORY 0 variables defined 0 bytes used 256 variables available 6000 bytes available *.RESTORE FROM Movie *.LIST MEMORY COST Pub N 49.95 ( 49.95000000) MOVIE Pub C "GREMLINS" 2 variables defined 16 bytes used 254 variables available 5984 bytes available Смотри также: RESTORE, RELEASE, SET SAFETY 4.92 SCATTER --------------------------------------------------------------- Перемещать данные из базы данных в массив Формат: SCATTER [FIELDS <список_полей>] TO <массив> Команда SCATTER позволяет перемещать данные из текущей записи базы данных в массив переменных памяти. Поля записи перемещаются начиная с первого указанного поля в массив, заполняя последова- тельно элементы массива. Если оператор FIELDS отсутствует, пере- мещаются все поля. Если количество элементов массива превосходит количество пе- ремещаемых полей, остальные элементы массива сохраняют значения, которые они имели до выполнения операции SCATTER. Если соответс- твующий массив не существует или количество элементов массива меньше, чем количество полей, автоматически создается и описыва- ется командой DIMENSION новый массив. Типы даных элементов массива задаются в соответствии с типами соответствующих им полей в записи. Поля MEMO при выполнении команды SCATTER игноирруются. Смотри также: GATHER, DIMENSION 4.93 SCROLL --------------------------------------------------------------- Прокручивание экрана Формат: SCROLL <коорд1>, <коорд2>, <числ_выраж> По этой команде прямоугольная область экрана прокручивается вверх или вниз. <коорд1> - Экранные координаты верхнего левого угла прямоуголь- ника <коорд2> - Экранные координаты нижнего правого угла прямоуголь- ника <числ_выраж> - Количество строк, на которое должна быть прокру- чена прямоугольная область. Если эта величина отри- цательна, то происходит прокручивание вниз на <числ_выраж> строк, если положительна - то вверх. 4.94 SEEK --------------------------------------------------------------- Поиск в индексированной базе данных Формат: SEEK <выраж> Команда SEEK производит поиск в индексированной базе данных первого вхождения указанного выражения <выраж>, которое соответ- ствует ключевому выражению. Для ввода символьного выражения <выраж> должны быть использо- ваны одиночные кавычки ('), двойные кавычки (") или квадратные скобки ([ ]). Команда SEEK аналогична команде FIND; однако комнда SEEK не ограничена выполнением поиска только для строк символов, и может быть использована для поиска произвольных выражений. Пример: *.USE Video *.SEEK UPPER("south pacific") *.DISPLAY TITLE Record# TITLE 30 SOUTH PACIFIC Смотри также: FIND, INDEX, USE 4.95 SELECT --------------------------------------------------------------- Активировать рабочую область Формат: SELECT <рабочая область/псевдоним> Команда SELECT используется для осуществления переходов между 10 различными рабочими областями. FoxBASE+ автоматически начина- ет работу в области 1. Рабочая область <рабочая область> может быть указана цифрами с 1 по 10 или буквами с A по J. Когда база данных открыта в рабочей области, рабочая область может также выбираться командой SELECT с помощью псевдонима. Аргументом команды SELECT может быть ноль. Если указан ноль, то выбирается еще неиспользованная рабочая область с наименьшим номером. Переменные полей базы данных доступны в любой рабочей облас- ти. При доступе к полям, которые расположены в другой рабочей области, отличной от выбранной в текущий момент командой SELECT рабочей области, слледует использовать следующий формат: <псевдоним> -> <поле> Обычно указатель записи перемещается только в текущей рабочей области. Дополнительная информация об одновременном перемещении указателя записи в нескольких рабочих областях приведена в опии- сании команды SET RELATION. В каждой из рабочих областей могут быть открыты различные форматные файлы; однако отдельный форматный файл может быть отк- рыт только в одной рабочей области. Дополнительная информация по этому вопросу приведена в главе 3 в разделе "Использование псевдонимов при вводе команд". Примеры: *.SELECT 1 *.USE Video *.SELECT 2 *.USE Transaction *.SELECT 1 *.? DBF() C:\FOX\VIDEO.DBF Смотри также: SET RELATION 4.96 SET --------------------------------------------------------------- Вызвать управляемую меню команду SET Формат: SET Команда SET, введенная без аргументов, это управляемая меню команда, которая позволяет вам выводить и корректировать различ- ные значения параметров команды SET. В меню команды SET представлены 7 возможностей: Options/Пара- метры/, Screen/Экран/, Keys/Клавиши/, Disk/Диск/, Files/Файлы/, Margin/Поле/, Decimals/Дробные знаки/. Options - Эта строка меню позволяет вывести список параметров команды SET, имеющих только 2 возможных значения (ON и OFF). Значение SET переключается при нажатии кла- виши ВВОД. Screen - Эта строка меню позволяет изменять цвета и другие пара- метры вывода на экран. Keys - Эта строка меню позволяет изменять назначения функцио- нальных клавиш F2 - F10. Строка символов, представ- ляющая соответствующую функцию, может иметь длину до 254 символов. Disk - Эта строка меню позволяет вам указывать принимаемый по умолчанию дисковод и маршрут (path). Files - Эта строка меню позволяет вам открывать файлы форматные, индексные и накопления (для буферизации экранного вывода). Margin - Эта строка меню позволяет вам задавать размер левого поля в отчетах и ширину поля вывода в полях мемо. Decimals - Эта строка меню позволяет вам задавать максимальное количестов дробных десятичных знаков, выводимых при распечатке числовой функции или результатов расче- тов. 4.97 Команды SET --------------------------------------------------------------- Команды управления конфигурацией FoxBASE+ Команда SET может быть использована с большим количеством ар- гументов для изменения параметров, управляющих работой FoxBASE+. В следующем далее разделе первыми в командной строке приведены параметры, заданные по умолчанию. Косая черта (/) используется просто для разделения различных значений параметров, их не сле- дует вводить, как часть команды. SET ALTERNATE TO [файл] или SET ALTERNATE OFF/ON Команда SET ALTERNATE TO [файл] позволяет вам создавать файл, который может быть использован для сохранения на диске информа- ции, выведенной на экран. Если файл [файл] не указан в составе команды, эта команда закрывает файл вывода. Расширение имени та- кого файла по умолчанию .TXT. Команда SET ALTERNATE ON/OFF используется для переключения записи выводимой на экран информации в выходной файл, созаднный командой SET ALTERNATE TO [файл]. ON разрешает такую запись; OFF выключает этот режим. SET BELL ON/OFF Эта команда SET включает (ON) или выключает (OFF) режим пода- чи терминалом звукового сигнала при достижении или прохождении конца поля или при вводе недопустимых данных. SET CARRY OFF/ON Этот флажок дает/отменяет возможность переносить информацию из ранее введенной записи в новую (текущую) запись при использо- вании полноэкранных команд APPEND или INSERT. ON разрещает такой перенос; OFF выключает его. Вставленная запись, которая была перенесена в следующую за- пись, не будет сохранена, если она не изменена каким-либо обра- зом. SET CENTURY OFF/ON Эта команда SET позволяет вводить и выводить век при работе с переменными даты. Параметр ON выводит год в четырезразрядном формате. OFF выводит год в двухразрядном формате, при этом в вы- числениях подразумевается двадцатый век. При установленном SET CENTURY ON длина выведенной даты сос- тавляет 10 символов, а длина поля базы данных - 8 символов. SET CLEAR OFF/ON Команда SET CLEAR определяет, очищается ли экран при выполне- нии команд: * SET FORMAT TO <имя файла>, и * QUIT Эта команда предоставляет возможность разработчику наклады- вать образы экранов данных FORMAT на существующий образ экрана. Если установить SET CLEAR OFF перед вводом команды QUIT, то об- раз экрана выхода из FoxBASE+ будет сохранен на экране даже пос- ле выполнения этого выхода. SET COLOR TO [ [/[,]]] SET COLOR ON/OFF Команда SET COLOR позволяет вам задавать параметры экрана,ис- пользуемые с цветным или монохромным монитором. Команда SET COLOR TO... может быть исользована в форматных файлах. Команда SET COLOR ON/OFF позволяет вам переключаться между цветным и монохромным режимами вывода. Команда SET COLOR TO восстанавливает параметры экрана к их принятым по умолчанию значениям - черно-белому режиму. Команда SET COLOR TO [ [/[,]]] [,]] задает различные параметры для цветных и монох- ромных мониторов. Обычный или особый режим вывода определяются выбором двух кодов цветов, разделенных косой чертой (/). Парметр рамки (только для цветных мониторов) представляется одним цвето- вым кодом. ------------------------------------- | Цвет Код Цвет Код | | | |Черный N Зеленый G | |Пусто X Пурпур RB | |Голубой B Красный R | |Коричневый GR Белый W | |Морск.волна BG Желтый GR+ | ------------------------------------ Звездочка (*) используется для обозначения мигания, а знак плюс (+) обозначает повышенную интенсивность. Для монохромных мониторов U является дополнительным парамет- ром, обозначающим подчеркивание, а l обозначает вывод в инверс- ном режиме. Параметр цвета "Пусто" удобен при вводе пароля. SET CONFIRM OFF/0N Обычно, при вводе последнего символа в поле в полноэкранном режиме операция ввода автоматически завершается. Затем курсор перемещается к следующему полю, и выдается звуковой сигнал, если установлено SET BELL ON. Этот принятый по умолчанию режим (CONFIRM OFF) очень удобен для полей, в которые вводится всегда одинаковое количество сим- волов, например, почтовые коды, личный номер, номер телефона и т.д. Если задано SET CONFIRM ON, пользователь должен ввести огра- ничивающий символ (CR, PgUp, и т.д.) для указания, что ввод в поле закончен. Это особенно полезно при вводе в поле информации переменной длины. SET CONSOLE ON/OFF В режиме ON весь вывод направляется на экран. В режиме OFF вывод на экран прекращается. Команда SET CONSOLE не оказывает влияния на выполнение команд @...SAY и @...GET. Вывод команды @...SAY контролируется установ- кой DEVICE. SET DATE <тип даты> Эта команда задает формат дат для выражений даты. Ниже приве- ден список имеющихся типов и форматов дат: AMERICAN === mm/dd/yy ANSI === yy.mm.dd BRITISH === dd/mm/yy ITALIAN === dd-mm-yy FRENCH === dd/mm/yy SET DEBUG OFF/ON Эта команда определяет, направляется ли результат команды SET ECHO на печать или на экран. Параметр OFF направляет вывод на экран. Параметр ON направляет вывод на принтер. Одновременное включение DEBUG и ECHO ON удобно при отладке прикладных прог- рамм, позволяя выводить трассировку программы на принтер, не на- рушая нормального вывода на экран. SET DECIMALS TO <числ_выраж> Эта команда SET позволяет вам задавать минимальное количество дробных десятичных знаков, выводимых в результате выполнения числовых функций и вычислений. Команда SET DECIMALS влияет на операции деления, EXP(), LOG(), и SQRT(). По умолчанию выводятся два знака после запятой. Количество выводимых дробных знаков определяется в соответст- вии с видом констант и производимыми вычислениями. SET DEFAULT TO [<дисковод>] Эта команда указывает FoxBASE+ считать названный дисковод принятым по умолчанию для дальнейших операций ввода/вывода. ____________________________________________________________ ! Необходимо заметить, что FoxBASE+ сохраняет в памяти ко- ! ! мандные файлы для дальнейшего использования, в связи с ! ! этим командный файл, находящийся в памяти в текущий мо- ! ! мент, будет выполнен независимо от изменений назначения ! ! принятого по умолчанию дисковода. ! !__________________________________________________________! Для удаления командного файла, сохраненного в памяти в теку- щий момент, необходимо выполнить команду CLEAR PROGRAM. После выполнения команды CLEAR PROGRAM новое принятое по умолчанию на- занчение дисковода будет соблюдаться во всех случаях. Дополнительная информация об этой команде приведена в главе 3, в разделе "Поддержка маршрута". SET DELETED OFF/ON Если в этом случае выбрано ON, любая команда, работающая с записями с использованием параметра диапазона, будет игнориро- вать записи, помеченные для удаления. Команды, работающие с те- кущей записью или имеющие диапазон, заданный выражением RECORD <числ>, игнорируют команду SET DELETED ON. Задание значения OFF предоставит таким командам возможность работать со всеми записями, независимо от того, помечены они для удаления, или нет. Команды INDEX и REINDEX работают со всеми записями в файле базы данных независимо от статуса команда SET DELETED. Команда RECALL ALL не отменит пометку никаких записей, если задано SET DELETED ON. SET DELIMITERS ON/OFF или SET DELIMITERS TO <симв_выраж>/DEFAULT Команда SET DELIMITERS позволяет вам указать, выделяете ли вы поля, заключая их в символы ограничители в полноэкранном режиме и тип символов, которые вы при этом используете в качестве огра- ничителей. Состояние SET DELIMITERS OFF является состоянием по умолча- нию. В этом режиме для выделения полей используется режим инвер- сной видеозасветки. В состоянии SET DELIMITERS ON поля ограничи- ваются двоеточиями (:) или другими ограничивающими символами, которые были выбраны командой SET DELIMITERS TO. Команда SET DELIMITERS TO <симв_выраж> позволяет вам назна- чить другой тип ограничителей для вывода полей. Символическое выражение <симв_выраж> может содержать один или два символа. Ес- ли указывается один символ, этот символ будет использован для ограничения полей и в начале, и в конце. Если указываются два символа, первый символ ограничивает начало поля, а второй символ является завершающим. Команда SET DELIMITERS TO DEFAULT устанавливает тип символов ограничителей, заданных по умолчанию (двоеточие). SET DEVICE TO SCREEN/PRINT Эта команда SET управляет выводом, заданным командами @...SAY. Этот вывод может производиться на экран или на принтер. Когда значения <коорд>, заданные в команде @...SAY, меньше заданных в предыдущей команде @...SAY, пропускается страница. SET DOHISTORY OFF/ON Эта команда SET позволяет вам определить, сохраняются ли в буфере HISTORY команды из программных файлов. Эти команды могут быть отредактированы и выполнены, когда они помещены около приг- лашающего знака "точка", точно таким же образом, как если бы они были введены в интерактивном командном режиме. ____________________________________________________________ ! Необходимо заметить, что хотя команда SET DOHISTORY ON ! ! помогает разработчикам при отладке программ, но она зна- ! ! чительно замедлит выполнение программы. Пэтому на расп- ! ! ространяемых прикладных программах эта команда должна ! ! быть обязательно выключена (OFF). ! !__________________________________________________________! SET ECHO OFF/ON Если задано SET ECHO ON, каждая строка выполняемой программы будет выводиться на экран в процессе ее выполнения. В состоянии ECHO OFF эта информация не выводится. Одновременное включение ECHO и DEBUG является удобным средст- вом при отладке программ. В рабочей версии FoxBASE+ режим SET ECHO ON отсутствует. ____________________________________________________________ ! Рекомендация для пользователей рабочей версии FoxBASE+: ! ! В качестве дополнительной меры защиты текстов ваших ис- ! ! ходных программ мы рекомендуемвам вводить команду SET ! ! ECHO OFF в качестве самой первой строки программ, кото- ! ! рые вы предполагаете поставлять совместно с рабочей вер- ! ! сией FoxBASE+. ! !__________________________________________________________! SET ESCAPE ON/OFF Состояние OFF предотвращает использование клавиши Esc для прерывания выполнения программы. В состоянии ON выполнение прог- раммы может быть прервано при помощи нажатия клавиши Esc. Если вы нажмете клавишу Esc при выполнении команды в интерак- тивном режиме, на экран будет выведено сообщение : ***INTERRUPTED*** /ПРЕРВАНО/. Если вы нажмете клавишу Esc в процессе выполнения командного файла, на экран будет выведено следующее сообщение: Called from <файл> xxxxxxxx - Cancel, Ignore, Suspend? /Прервано выполнение файла <файл> - Отменить, игнорировать, приостановить?/ Пользователь может выбрать одно из перечисленных действий, нажав соответственно C, I или S. Дополнительная информация при- ведена в главе 3, разделе "Сообщения об ошибках". SET EXACT OFF/ON Если задано EXACT OFF, могут сравниваться две строки даже в том случае, есил у них разная длина. При этом, если строки сопа- дают до конца более короткой из них, они считаются равными. Если задано EXACT ON, строки должны совпадать посимвольно, и быть одинаковой длины для того, чтобы они могли считаться равными. SET EXCLUSIVE Конфигурация: Многопользовательская Команда SET EXCLUSIVE позволяет вам задать статус совместного использования для открытых файлов баз данных. В состоянии SET EXCLUSIVE ON никакой другой пользователь не может работать с используемыми вами файлами базы данных. В сос- тоянии SET EXCLUSIVE OFF все открываемые файлы баз данных могут использоваться многими пользователями (до тех пор, пока в коман- де USE отсутствует опция EXCLUSIVE). Изменение состояния EXCLUSIVE не влияет на состояние ранее открытых баз данных. SET FIELDS OFF/ON Если задано SET FIELDS OFF, то все поля активной в текущий момент базы данных доступны пользователю. Если задано SET FIELDS ON, то пользователю будут доступны только те поля, которые пере- числены в списке в команде SET FIELDS TO. SET FIELDS TO [<список_полей>/ALL] Эта команда определяет поля, которые будут доступны в актив- ной в текущий момент базе данных. Заданный список полей <спи- сок_полей> будет активирован при вводе команды SET FIELDS ON. Команда SET FIELDS TO (без списка полей <список_полей> или параметра ALL) удаляет из списка полей <список_полей> все поля, которые имеются в активной в текущий момент базе данных. Команда SET FIELDS TO ALL вводит в список полей <список_по- лей> все поля, имеющиеся в составе активной в текущий момент ба- зы данных. Команда SET FIELDS TO <список_полей> определяет поля, которые будут доступны в активных в текущий момент файлах баз данных. Для расширения списка доступных полей могут вводиться дополни- тельные команды SET FIELDS TO <список_полей>. Команда SET FIELDS TO <список_полей> автоматически задает ре- жим SET FIELDS ON. В следующих случаях с именем поля должен быть указан псевдо- ним: * При обращении к полю в базе данных, не занесенной в текущую рабочую область. * Если в связанных файлах имеются поля с одинаковыми именами. SET FILTER TO [<выраж>] Команда SET FILTER используется для указания группы записей в активной базе данных, которая соответствует указанному условию <выраж>. Если введена эта команда, база данных для пользователя будет выглядеть так, как-будто в ней есть только записи, соот- ветствующие указанному условию. Условие SET FILTER оказывает влияние на все команды, работающие с записями активной базы дан- ных. Команда SET FILTER TO (без выражения <выраж>) выключает отбор записей в соответствии с ранее введенным выражением. Для каждого из активных файлов базы данных может быть уста- новлен отдельный фильтр FILTER. Необходимо заметить, что фильтр не действует до тех пор, пока указатель записи в файле базы данных не будет перемещен. SET FIXED OFF/ON Эта команда SET позволяет вам указывать количество дробных десятичных знаков после запятой, выводимых при выводе чисел. Если задано SET FIXED OFF, количество дробных знаков при вы- воде определяется видом констант, переменных и операторов, ис- пользованных в выражении. Поля базы данных выводятся с указанным количеством дробных знаков. Если задано SET FIXED ON, количество выводимых дробных деся- тичных знаков определяется командой SET DECIMALS. По умолчанию задано два дробных десятичных знака. SET FORMAT TO [<файл>] Эта команда SET использует дополнительно созданные форматы вывода с командами APPEND, EDIT, INSERT, READ и т.д. Если имя файла <файл> в составе команды SET опущено, соответ- ствтующий форматный файл более не используется. Расширение файла <файл> по умолчанию .FMT. Путем введения команды READ в конец каждой страницы могут быть созданы многостраничные форматные файлы. В одном форматном файле могут быть до 128 страниц. Клавиши PgUp и PgDn могут быть использованы для перехода между страницами в пределах форматного файла. При использовании команды READ с форматным файлом имеется возможность редактирования полей MEMO. (Обычно команде READ поля мемо недоступны). SET FUNCTION <выраж> TO <симв_строка>/<симв_выраж> Эта команда SET позволяет вам назначить строку символов (дли- ной до 254 символов) функциональной клавише. FoxBASE+ преобразу- ет точки с запятой (;) в составе строки в символы возврата ка- ретки. Значение выражения <выраж> может быть в диапазоне от F2 до F10, включительно. Хотя клавиша F1 не может быть переназначена таким способом, но еена можнот определить как "hot key"и тем самым иметь возмож- ность изменить ее функцию. Текущее назначение функциональных клавиш может быть выведено при помощи команды LIST STATUS. Если не производилось переназна- чение, при этом будет выведено назначение функциональной клавиши по умолчанию. Ниже приведены назначения функциональных клавиш по умолчанию: Клавиша Функция Клавиша Функция F1 help; F6 display status; F2 resume; F7 display memory F3 list; F8 display; F4 dir; F9 append; F5 display structure; F10 edit; SET HEADING ON/OFF В этой команде SET вы можете указать, выводятся ли заголовки столбцов для каждого поля при работе в командах DISPLAY, LIST, SUM, и AVERAGE. SET HELP ON/OFF Эта команда SET используется для совместимости с dBASE, одна- ко в FoxBASE+ она не выполняет никаких функций. SET HISTORY ON/OFF Команда SET HISTORY ON/OFF позволяет включить и выключить за- несение команд в буфер HISTORY для их дальнейшего использования. В состоянии SET HISTORY ON все введенные команды будут сохра- няться в буфере HISTORY для вызова, редактирования и повторного выполнения в дальнейшем. Дополнительные сведения даются в главе 3, разделе "Интерактивный ввод и редактирование командной стро- ки". В состоянии SET HISTORY OFF запись команд в буфер прекращает- ся. Однако команды, занесенные в буфер перед введением этой ко- манды могут все же быть вызваны для редактирования и повторного выполнения. SET HISTORY TO <числ_выраж> Эта команда задает количество команд, которые будут выведены при вводе команд DISPLAY HISTORY. Она не оказывает влияния на количество сохраняемых команд. Последний параметр задается пере- менной HMEMORY в файле CONFIG. По умолчанию сохраняются 20 команд. SET INDEX TO [<список_файлов>] Эта команда SET выбирает один или несколько индексных файлов для использования с текущим файлом базы данных. Эти индексные файлы автоматически корректируются при добавлении или удалении записей в базе данных. Первый файл в списке индексных файлов бу- дет управляющим индексным файлом. Для изменения управляющего ин- дексного файла в списке <список_файлов> может быть использована команда SET ORDER TO. С одним файлом базы данных может быть связано до семи индекс- ных файлов. Если в составе команды опущен список файлов <список_файлов>, база данных используется без индексного файла; все ранее исполь- зованные индексные файлы при этом деактивируются. SET INTENSITY ON/OFF Команда SET INTENSITY указывает, используется ли особый атри- бут экрана для вывода вводимых полей в полноэкранном режиме. Обычно атрибутом экрана является черный на белом, но его можно изменять с помощью команды SET COLOR. В состоянии SET INTENSITY ON осбый атрибут экрана использует- ся для подсветки вводимых полей. В состоянии SET INTENSITY OFF используется обычный атрибут экрана. Команда SET INTENSITY гказывает воздействие и на вывод на эк- ран статусной строки. Поля могут быть также выделены при помощи ограничивающих сим- волов посредством использования команды SET DELIMITER TO. SET MARGIN TO <числ_выраж> Эта команда устанавливает размер левого поля <числ_выраж> для принтера. Размер левого поля по умолчанию равен 0. SET MEMOWIDTH TO <числ_выраж> Эта команда SET позволяет вам задать ширину поля мемо при вы- воде в командах LIST и DISPLAY и ширину по умолчанию для команды REPORT. Ширина вывода поля мемо по умолчанию равна 50 символам. SET MENU ON/OFF Эта команда SET позволяет вам включать и выключать меню кла- виш управления курсором при работе в полноэкранных командах. Для включения и выключения этого меню может быть также ис- пользована клавиша F1. SET MESSAGE TO [симв_выраж>/<числ_выраж>] Эта команда SET позволяет вам вывести заданную пользователем строку символов на последней строке экрана при работе в режиме SET STATUS ON. Строка символов может содержать до 79 символов. Строка должна быть ограничена одиночными кавычками (' '), двойными кавычками (" ") или квадратными скобками ([ ]). Это сообщение выводится при работе в интерактивном режиме или в процессе выполнения команд редактирования в полноэкранном ре- жиме. Команда SET MESSAGE TO <числ_выраж> назначает строку экрана, на которой может выводиться дополнительное сообщение MESSAGE в процессе выполнения команды MENU TO. Если числовое выражение имеет значение 0, сообщения выводиться не будут. Команда SET MESSAGE TO ( без строки символов [симв]) заменяет введенную строку символов нулевой строкой. SET ODOMETER TO <числ_выраж> Команда SET ODOMETER используется для изменения интервалов, используемых командой TALK. Интервал, принятый по умолчанию, ра- вен 100. SET ORDER TO [<числ_выраж>] Эта команда SET позволяет вам указать управляющий индексный файл, из выбранных ранее, как управляющий индексный файл для ба- зы данных, находящейся в текущей рабочей области. Числовое выражение <числ_выраж> ссылается на позицию, соот- ветствующую индексному файлу в списке индексов, как он был опре- делен командой SET INDEX TO или USE... Числовое выражение <числ_выраж> может быть числом в пределах от 0 до 7 в зависимос- ти от количества задействованных индексов. Если <числ_выраж> имеет значение 0, режим работы с индексаци- ей выключен. При этом записи в файле при работе с командами LIST и т.п. будут обрабатываться в порядке их следования в соответст- вии с номерами. Режим работы с индексированием может быть также выключен при помощи команды SET ORDER TO (без числового выраже- ния <числ_выраж>). При выполнении команды SET ORDER перемещение указателя записи не происходит. Эта команда позволяет корректировать все индекс- ные файлы всеми командами, которые приводят к изменению ключевых полей без потерь в скорости работы, связанных с отслеживанием структуры по индексу. SET PATH TO [<список_маршрутов>] Эта команда используется для задания списка каталогов, в ко- торых FoxBASE+ будет производить поиск файлов, не найденных в текущем рабочем каталоге. Каталоги, перечисленные в списке каталогов <список_маршру- тов>, должны быть разделены запятыми или точками с запятой. Необходимо заметить, что FoxBASE+ сохраняет командные файлы в памяти для дальнейшего выполнения; в связи с этим командный файл, сохраненный в памяти в текущий момент, будет выполнен не- зависимо от изменений, внесенных в список каталогов <список_мар- шрутов>. Для удаления из памяти сохраненного командного файла может быть использована команда CLEAR PROGRAM. Текущее назначе- ние списка каталогов будет выполняться во всех случаях только после команды CLEAR PROGRAM. Дополнительная информация по этому вопросу приведена в описании команды CLEAR PROGRAM. SET PRINT OFF/ON В состоянии ON разрешен вывод на принтер; в состоянии OFF вы- вод на принтер запрещен. Вывод, который формируется посредством команд @...SAY не обязательно направляется на принтер в состоя- нии PRINT ON. Для направления соответствующей информации на принтер необходимо использовать команду SET DEVICE TO PRINT. SET PRINTER TO <устройство/файл> FoxBASE+ позволяет назначить принтером либо устройство, либо файл. Если задано SET PRINTER TO <файл>, должна быть приведена полная идентификация файла. Если в качестве принтера задано печатающее устройство, весь вывод, который обычно направляется на принтер, направляется на устройство <устройство>. Устройством печати по умолчанию задано устройство PRN: для MS/PC-DOS. SET PROCEDURE TO [<файл>] Эта команда SET открывает указанный процедурный файл <файл>. Подразумевается расширение имени файла .PRG, если оно не ука- зано явно в имени файла <файл>. В любой момент времени может быть открыт только один проце- дурный файл. Команда SET PROCEDURE TO (без имени файла <файл>) закрывает любой открытый процедурный файл. SET RELATION TO[<выраж>INTO<псевдоним>][ADDITIVE] Эта команда SET связывает два открытых файла базы данных пос- редством ключевого выражения <выраж>, совместимого с обоими ба- зами данных. Одна из баз данных является активной в текущий мо- мент, а вторая база данных является открытой базой данных в дру- гой рабочей области. Эта вторая база данных указывается операто- ром INTO <псевдоним>. Всякий раз, когда в выбранной базе переме- щается указатель записи, то он перемещается и в связанной базе данных на соответствующую запись. Если соответствующая запись не находится в связанной базе данных, указатель записи этой базы данных устанавливается на конец записи. Ниже описаны два способа связывания баз данных: Ключевой выражение может быть следующим: * Индексировнные <псевдоним> файлы - когда файл <псевдоним> является индексипованным, то для определения индексного ключа во второй базе должна быть возможность оценки <выраж> при использовании констант и полей выбранной в данной мо- мент базы данных. База данных <псевдоним> должна быть ин- дексирована <выраж> (которое может быть символом, числом или датой); в противном случае возникает сообщение об ошиб- ке. * неиндексированные <псевдоним> файлы - когда <псевдоним> файл не индексирован, <выраж> должно быть числовым. Выраже- ние оценивается для текущей записи, и результат использует- ся как номер записи в связанной базе данных. С командой SET RELATION TO ... может быть указано новое ключевое слово ADDITIVE. Если в составе команды введено ключевое слово ADDITIVE, ранее созданные связи останутся без изменений. Примеры: *.SELECT 1 *.USE Employee *.SELECT 2 *. USE Salary INDEX Emp_num *.SELECT 3 *.USE Department INDEX Dept_num *.SELECT 1 *.SET RELATION TO Emp_num INTO B *.SET RELATION TO Emp_num INTO C ADDITIVE Приведенные выше примеры позволяют связать активную базу данных с двумя другими базами данных. Затем при просмотре базы данных Video пользователю будет автоматически будет предоставляться информация из баз данных Salary и Department. SET RELATION TO[<выраж>INTO<псевдоним>] [,<выраж>INTO<псевдоним>]...[,<выраж>INTO<псевдоним>][ADDITIVE] Этот вариант команды SET RELATION позволяет создавать множес- твенные связи с одной командой. Соответствующие выражения разде- ляются запятыми. Если связь уже установлена, то можно определить ключевое слово ADDITIVE, и существующая связь останется неизмен- ной. Эта команда дает другой способ для установки множественных связей. SET SAFETY ON/OFF Эта команда SET позволяет вам устанавливать и отменять допол- нительные средства защиты в FoxBASE+. Если установлено SAFETY ON, пользователю выдается предупреж- дение перед выполнением любой команды, которая может произвести запись на существующую базу данных или разрушить файл базы дан- ных. Если установлено SAFETY OFF, пользователю не выдается сообще- ние о потенциально опасных командах перед их выполнением. SET SCOREBOARD ON/OFF Эта команда вместе с командой SET STATUS позволяют задать место вывода сообщений FoxBASE+ на экране. Информация о состоянии выводится на строке номер 0, если задано SET SCOREBOARD ON, а STATUS OFF. Однако, если задано SET STATUS ON, информация о сос- тоянии выводится в строке 22, вне зависимости от установки SCOREBOARD. Если выключены и STATUS и SCOREBOARD, информация о состоянии на экран не выводится. Информация о состоянии включает индикаторы текущей конфигура- ции (т.е. состояния клавиатуры и записей), а также сообщения FoxBASE+ (т.е. сообщения об ошибках @... GET RANGE). Дополнительная информация по этому вопросу приведена в описа- нии команды SET STATUS. SET STATUS ON/OFF Если установлено SET STATUS ON, строка статуса выводится в нижней части экрана на строке 22. Информация, выведенная на строке статуса, включает в себя те- кущую команду, которая выполняется, рабочий каталог, активный файл базы данных, положение указателя записи, количество записей в файле и информацию о сотоянии (CAPS - включен верхний регистр, и т.д.). Строка статуса корректируется каждый раз при выполнении команды, изменяющей информацию о статусе. Если задано SET STATUS OFF, а SCOREBOARD установлено ON, ин- формация состояния выводится на строке 0. Если и STATUS и SCOREBOARD установлено OFF, информация о статусе не будет выво- дится на экран. Дополнительная информация по этому вопросу приведена в описа- нии команды SET SCOREBOARD. SET STEP ON/OFF Эта команда SET используется в режиме отладки. Если задано SET STEP ON, выполнение программы приостанавлива- ется после каждого оператора, и пользователю выдается сообщение: Press SPACE to step, S to suspend, or Esc to cancel... /Нажмите ПРОБЕЛ для выполнения шага, S для приостановки, или Esc для прекращения выполнения .../ В этой точке вы можете нажать S для приостановки выполнения программы и проверки занчений переменных памяти, или выполнения каких-либо промежуточных команд. Для продолжения выполнения программы в этом случае достаточно вветси команду RESUME. Допол- нительная информация по этому вопросу приведена в описании ко- манды RESUME. SET TALK ON/OFF Если установлено SET TALK ON, результаты выполнения всех ко- манд (таких как SORT, PACK и пр.) выводятся на экран. Если уста- новлено SET TALK OFF, результаты выполнения команд не выводятся. Интервал между сообщениями, по умолчанию равный 100, может быть изменен с помощью команды SET ODOMETER. Скорость работы программы значительно понижается, если установлено SET TALK ON, поскольку при этом на экрант должен быть выведен значительный объем информации. SET TYPEAHEAD TO <числ_выраж> Эта команда SET используется для установки, включения и вык- лючения буфера клавиатуры. Если установлено SET TYPEAHEAD TO 0, в буфер клавиатуры не смогут быть занесены никакие символы. Если задано SET TYPEAHEAD в пределах от 1 до 32 000 (максимально допустимое значение), то в буфер клавиатуры могут быть занесены до 128 символов. Если вы установили SET TYPEAHEAD TO 0, функция INKEY и команда ONKEY функционировать не смогут. Дополнительная информация по этому вопросу приведена в описаниях функции INKEY() и команды ON KEY. SET UNIQUE OFF/ON Эта команда SET определяет, сохраняются ли во вновь создавае- мом индексном файле записи с дублирующимися значениями ключа. Если установлено SET UNIQUE ON, все записи с дублирующимся значением ключа не будут включены в индексный файл. В индексный файл в этом случае будут включаться только первые из записей с дублирующимся значением индексного ключа. Файл сохраняет свой статус UNIQUE при выполнении переиндекса- ции командой REINDEX. Дополнительная информация по этому вопросу приведена в описа- нии команды INDEX ON. SET VIEW<файл_для_просмотра> Команда SET VIEW TO <файл_для_просмотра> восстанавливает кон- фигурацию FoxBASE+ в состояние, которое у нее было, когда созда- вался файл <файл_для_просмотра>. 4.98 SKIP --------------------------------------------------------------- Переместить указатель записи в базе данных Формат: SKIP [<числ_выраж>] Команда SKIP перемещает указатель записи с его текущего поло- жения. Простая команда SKIP перемещает указатель записи на сле- дующую запись. Если используется индексирование, порядок следо- вания записей соответствует порядку следования значений ключа в активном индексном файле базы данных. Если числовое выражение <числ_выраж> является положительным числом, указатель записи перемещается вперед по файлу на <числ_выраж> записей. Если числовое выражение <числ_выраж> явля- ется отрицательным числом, указатель записи перемещается назад по файлу на <числ_выраж> записей. Если указатель записи установлен на последнюю запись в файле и выполняется команда SKIP, функция RECNO() принимает значение, на единицу превышающее номер последней записи в файле и функция EOF() принимает значение "Истинно". Если указатель записи уста- новлен на первой записи в файле и выполняется команда SKIP -1, функция RECNO() принимает значение 1, а функция BOF() принимает значение "Истинно". Примеры: *.USE Video *.? RECNO() 1 *.SKIP Record No. 2 *.SKIP 15 Record No. 17 *.SKIP -2*3 Record No. 11 *.SKI[P -15 Record No. 1 Смотри также: SET DELETED, SET FILTER, RECNO() 4.99 SORT --------------------------------------------------------------- Сортировать базу данных Формат: SORT TO <файл> ON <поле> [/A][/C][/D] [,<поле> [/A][/C][/D]...] [<диапазон>] [FOR <логич_выраж>] [WHILE <логич_выраж] [FIELDS<список_полей>] Команда SORT сортирует активную базу данных по указанному по- лю <поле>. Отсортированная база данных записывается в файл <файл>. Команда SORT выполняется в возрастающем порядке [/A], если не указан убывающий порядок [/D]. Параметр [/C] задает сортировку с игнорированием верхнего и нижнего регистра. Параметр /C может быть использован совместно с параметрами /A и /D. Если вводятся два параметра, используется только одна косая черта (напр. /AC). В команду SORT может быть включен дополнительный параметр FIELDS со списком полей. Это позволяет создавать файлы, содежа- щие лишь некоторые из полей исходных файлов. Поля в списке полей могут быть как из активной базы данных, так и из открытых, но не активных в текущий момент баз данных. Поля из неактивных в теку- щий момент баз данных должны упоминаться с указанием псевдонима. ______________________________________________________________ ! Убедитесь, что на вашем диске достаточно места для записи ! ! выходного файла <файл> и рабочих файлов перед выполнением ! ! команды SORT. Для выполнения этой команды необходимо приб- ! ! лизительно в три раза больше места, чем занимает активный ! ! файл базы данных. ! !____________________________________________________________! Смотри также: INDEX 4.100 STORE --------------------------------------------------------------- Занести данные в переменную памяти Формат: STORE <выраж> TO <список_перем_пам>/<имя_массива> или <перем_пам>/<имя_массива> = <выраж> Команда STORE устанавливает значение каждой переменной памяти в списке переменных памяти <список_перем_пам> равным значению выражения <выраж>. Если при этом переменная памяти существует, команда STORE заменяет ее прежнее значение на новое значение вы- ражения <выраж>. Если переменная памяти не существует, она соз- дается и инициализируется значением выражения <выраж>. Команда STORE может быть также использована для инициализации каждого элемента массива переменных памяти указанным значением. Для выполнения этой операции массив должен быть предварительно описан командой DIMENSION. 4.101 SUM --------------------------------------------------------------- Вычислить сумму для числовых полей Формат: SUM [<диапазон>] [<список_выраж>] [TO <список_перем_пам>] [FOR <логич_выраж>] [WHILE <логич_выраж>] Команда SUM суммирует значения числовых полей в активном фай- ле базы данных. Суммируются все записи активной базы данных, ес- ли не указан параметр диапазона [диапазон] или условные выраже- ния FOR/WHILE <выраж>. В списке врыажений [список_выраж] могут быть указаны одно или несколько полей. Полученные суммы могут быть занесены в переменные памяти, если в состав команды включе- на конструкция TO <список_перем_пам>. Если переменная памяти до этого не существовала, FoxBASE+ задаст ее. Если не указан список выражений [список_выраж], суммируются все числовые поля. Смотри также: AVERAGE 4.102 SUSPEND --------------------------------------------------------------- Приостановить выполнение программы Формат: SUSPEND Эта команда позволяет приостановить выполнение программы для выполнения промежуточных команд или проверки содержимого пере- менных памяти. Эта команда очень удобна для отладки прикладных программ FoxBASE+. Все переменные памяти, которые создаются в приостановленном состоянии программы имеют статус PRIVATE. Команда RESUME позволяет продолжить выполнение программы со строки кода программы, на которой ее выполнение было приостанов- лено. Cмотри также: RESUME, RETRY, CANCEL, SET ECHO, SET STEP 4.103 TEXT...ENDTEXT --------------------------------------------------------------- Выводит строки текста Формат: TEXT <строки текста> ENDTEXT Эти команды структурного программирования вызывают вывод строк текста на экран или на принтер. Команда TEXT указывает FoxBASE+ начать точное копирование приведенных далее строк текста на текущее устройство вывода. Этот процесс продолжается либо до появление выражения ENDTEXT, либо до конца текущего командного файла, в зависимости от того, что произойдет ранее. 4.104 TOTAL --------------------------------------------------------------- Вычислить итоги для числовых полей Формат: TOTAL TO <файл> ON <ключ> [<диапазон>] [FIELDS <список>] [FOR <логич_выраж>] [WHILE <логич_выраж>] Команда TOTAL суммирует значения числовых полей активной базы данных и заносит полученные результаты и ключ <ключ> в файл <файл>. В файле TO <файл> создается по одной записи для каждого вст- реченного ключевого выражения <ключ>. Числовые поля активной ба- зы данных суммируются и результат заносится в эту запись. Для данных нечислового типа значение поля первой из встреченных в соответствии с ключевым выражением <ключ> записей будет перене- сено в эту запись файла <файл>. Активная база данных должна быть либо отсоритрована командой SORT, либо индексирована по ключу <ключ>. Если файл <файл> еще не существует, FoxBASE+ создаст его. Будут суммироваться все записи, если не указан параметр диа- пазона [диапазон] или условные операторы FOR/WHILE <выраж>. По умолчанию суммируются все числовые поля, если в состав ко- манды не включен оператор FIELDS. Расширение имени файла <файл> по умолчанию .DBF. Пример: *.USE Video INDEX Rating *.TOTAL TO V_stotal ON Rating FIELDS Rating,Num_sold *.* V_stotal was not predefined. *.USE V_stotal *.LIST Record# RATING NUM_SOLD 1 G 675 2 N/R 2205 3 PG 21244 4 R 14351 4.105 TYPE --------------------------------------------------------------- Вывести файл ASCII Формат: TYPE <файл> [TO PRINT] Команда TYPE служит для вывода стандартных файлов ASCII. Для файла <файл> должно быть указано расширение имени. Для вывода ифнормации на принтер в составе команды может быть использован параметр TO PRINT. 4.106 UNLOCK --------------------------------------------------------------- Откменить запрет на доступ к записям и файлам Формат: UNLOCK [ALL] Конфигурация: Многопользовательская. Команда UNLOCK позволяет вам отменить запрет на доступ ко всем записям и/или файлам активной базы данных. Текущие состоя- ния доступа к записям определяются последними использованными функциями FLOCK(), LOCK() или RLOCK() в отношении файла базы данных в используемой в текущий момент рабочей области. Команда UNLOCK ALL отменяет запрет на доступ ко всем записям и файлам во всех рабочих областях. 4.107 UPDATE --------------------------------------------------------------- Скорректировать базу данных данными из другой базы Формат: UPDATE ON <ключ> FROM <псевдоним> REPLACE <поле> WITH <выраж> [,<поле> WITH <выраж>...] [RANDOM] Команда UPDATE позволяет откорректировать данные в активном файле базы данных с использованием файла FROM <псевдоним>. Файл FROM <псевдоним> должен быть занесен в одну из невыбранных рабо- чих областей. Корректировка производится на основании значений ключевого поля <ключ>. Имя ключевого поля <ключ> должно совпа- дать в обоих базах данных. При отсутствии параметра RANDOM активный файл базы данных обязательно должен быть индексированным по полю <ключ> или отсо. ртирован по полю <ключ>. Записи в файле FROM <псевдоним> должны быть индексированы или рассортированы по полю <ключ>. При наличии параметра RANDOM активная база данных должна быть проиндексирована или отсортирована по полю <ключ>. 4.108 USE --------------------------------------------------------------- Задать активную базу данных Формат: USE [<файл>] [INDEX <список_файлов_ndx>] [ALIAS <псевдоним>] [EXCLUSIVE] Команда USE делает файл <файл> активным в текущей рабочей об- ласти. Файл <файл> должен быть сформирован ранее. Если команда USE вводится без указания файла <файл>, активный файл базы дан- ных закрывается. Активный файл базы данных закрывается и в том случае, если вводится команда USE для другого файла. Конструкция INDEX в составе команды позволяет использовать один или несколько индексных файлов. Активными одновременно мо- гут быть до семи индексных файлов. Очередность доступа к записям в файле базы данных в процессе выполнения команд FIND, SKIP и т.д. будет определяться только одним индексным файлом (по умол- чанию - первым в списке индексных файлов), однако при изменении ключа будут автоматически корректироваться все активные индекс- ные файлы.Индексный файл должен быть создан ранее при помощи ко- манды INDEX. Для указания псевдонима для файла <файл> может быть использо- ван дополнительный оператор ALIAS <псевдоним>. Оператор EXCLUSIVE указывает должна открываться для исключи- тельного использования. Для получения дополнительной информации смотрите главу "Многопользовательский FoxBASE+". Дополнительная информация по этому вопросу приведена в глав 3, в разделе "Использование псевдонимов при вводе команд". Смотри также: INDEX, SELECT, SET INDEX 4.109 WAIT --------------------------------------------------------------- Ожидать ввода с клавиатуры Формат: WAIT [подсказка][TO <перем_пам>] Команда WAIT приостанавливает работу FoxBASE+ до ввода с кла- виатуры символа. При этом не нужно нажимать клавишу ВВОД (хотя он может быть введенным символом). Символ может быть сохранен, если в состав команды введен параметр TO <перем_пам>; в против- ном случае этот символ будет потерян. Команда WAIT TO <перем_пам> заносит в переменную памяти <пе- рем_пам> символ, введенный с клавиатуры. Если переменная памяти не была задана ранее, она будет создана при выполнении команды. Если с клавиатуры введен символ, не имеющий графического анало- га, он будет сохранен, как нуль. Подсказка по умолчанию, выводимая при этом на экран, гласит: "Press any key to continue..."/Нажмите любую клавишу для продол- жения.../, однако может быть задана и любая другая подсказка [подсказка]. Смотри также: ON 4.110 ZAP --------------------------------------------------------------- Удалить все записи из базы данных Формат: ZAP Команда ZAP удаляет все записи из активной базы данных. Ко- манда ZAP аналогична использованию последовательно команд DELETE ALL и PACK. ______________________________________________________________ ! Записи, удаленные из активной базы данных командой ZAP, не ! ! смогут быть восстановлены командой RECALL. ! !____________________________________________________________! Смотри также: DELETE, PACK, SET SAFETY . 5 ФУНКЦИИ --------------------------------------------------------------- На следующих далее страницах приведены все функции, имеющиеся в FoxBASE+. Эта же информация может быть получена при использо- вании команды HELP. В составе FoxBASE+ имеется большое количество функций, кото- рые могут быть использованы в ваших программах. Эти функции воз- вращают символические, числовые, логические или даты значения, которые могут быть использованы в выражениях соответствующих ти- пов данных. Некоторые из функций FoxBASE+ не требуют никаких ар- гументов, другие используют один или несколько аргументов. Аналогично разделу, в котором описаны команды FoxBASE+, ин- формация в этом разделе предназначена в основном для справок, а не для изучения материала. Продается много хороших учебников, которые будут полезны тем, кто не знаком с FoxBASE+ или dBASE III PLUS. Дюбой учебник, описывающий работу dBASE III PLUS может быть использован для изучения FoxBASE+. 5.1 Фукнции, заданные пользователем (UDF) --------------------------------------------------------------- Хотя FoxBASE+ содержит около 100 встроенных фукнций, бывают случаи, когда желательно иметь специальные фукцнии для использо- вания в прикладных программах. Эти фукнции называются кратко UDF. UDF - это просто программа FoxBASE+, которая содержит набор допустимых в FoxBASE+ выражений и возвращает соответствующее значение в вызвавшую программу. Как и в случае обычных программ, UDF может быть включена в процедурный файл и/или компилирована. Кроме того, UDF может быть вызвана как программа командой DO из одних мест прикладной программы, и как фукнция - из других мест. ______________________________________________________________ ! Программа, которая будет использоваться в качестве UFD, ! ! должна возвращать значение вызвавшей программе; в против- ! ! ном случае будет зафиксирована синтаксическая ошибка. ! !____________________________________________________________! Ссылка на UDF делается по имени (имя модуля программы или процедуры), затем в скобках могут следовать аргументы. Если ар- гументы включаются в ссылку на UDF, первым оператором в составе UDF должен быть соответствующий оператор PARAMETER. Если имя UDF совпадает с именем встроенной фукнции (или его сокращением), приоритетом будет пользоваться встроенная фукнция. Ссылки на UDF могут быть сделаны только в: * выражениях STORE * выражениях REPLACE * управляющих выражениях (IF, WHILE, CASE, и т.д.) * выражениях вывода (?, ??) * Display, List * @...GET...VALID В приведенной далее программе приведен простой пример UDF, SQUARE.PRG, которая выполняет возведение в квадрат: **** SQUARE.PRG **** PARAMETER v RETURN v*v Ссылка на UDF может быть сделана при помощи выражения: STORE square(x) TO y В этом примере значение аргумента x в ссылке на UDF назнача- ется параметру фукнции SQUARE.PRG v, и результат выражения v*v возвращается и заносится в y. В следующем примере UDF генерирует последовательность псев- дослучайных чисел. PUBLIC Seed STORE Val(SYS(2)) TO Seed *** Генерация псевдослучайного числа от 1 до 10 STORE RND()*10 + 1 TO x && Вызов UDF RND **** **** Процедура RND **** PROCEDURE RND STORE MOD (Seed*7137421+21132487,10000000) TO Seed *** Возвращаемое значение RETURN Seed/10000000 ______________________________________________________________ ! Выражения в составе UDF не должны изменять состояние отк- ! ! рытой базы данных. Например, следует избегать изменения ! ! фильтров или связей, смены активной базы данных, запись на ! ! экран. Хотя выражения такого типа допустимы в UDF, они мо- ! ! гут стать причиной нежелательных побочных эффектов. ! !____________________________________________________________! 5.2 & --------------------------------------------------------------- Формат: &<перем_пам>[.<симв_выраж>] Функция & указывает FoxBASE+ произвести макрозамену. Этот символ должен стоять перед именем переменной памяти символичес- кого типа. Значение переменной памяти <перем_пам> заменяет сим- вол & и следующее за ним имя переменной памяти. После этого ко- манда выполняется так, как если бы в ее состав были введены со- ответствующие символы, а не имя переменной, содержащей эти сим- волы. Обычно за символами, вставлеными при помощи функции &, следу- ет один или несколько пробелов. Использование ограничителя типа точки (.) позволяет включить в состав макро дополнительные сим- волы. Строка символов, подставленная вместо функции & может в свою очередь содержать функции &. Если имеется переменная памяти с вложенными функциями &, такие функции также заменяются на со- держимое соответствующих переменных перед выполнением команды. Функции & могут быть вложены таким образом в соответствии с пот- ребностями. Примеры: *.STORE "Hello" TO xyz *.STORE "z" TO m *.STORE "y&m" TO n *.? x&n Hello *.STORE "Hello" TO Hi *.STORE "Hi" TO Salute *.? &Salute Hello *.STORE Video TO File *.USE &File *.? DBF() C:\FOX\VIDEO.DBF Недопустима рекурсивная ссылка на переменную в макрофункции. Например, следующая комбинация команд вызовет сообщение об ошиб- ке: *.STORE "&x" TO x *.? &x Кроме того полная длина макрофункции не должна превышать мак- симально разрешенную в FoxBASE+ длину выражения. Эта величина ограничена 255 байт. 5.3 $ --------------------------------------------------------------- Формат: <симв_выраж1>$<симв_выраж2> Эта фукнция возвращает значение .T., если выражение <симв_вы- раж1> содержится в выражении <симв_выраж2>, и .F., если не со- держится. Пример: *. STORE 'FOX' TO fastvar *. ? fastvar $ 'A QIUCK BROWN FOX JUMPED OVER A LAZY DOG' *.T. Смотри также: AT() 5.4 ABS --------------------------------------------------------------- Формат: ABS(<числ_выраж>) Фукнция ABS выводит абсолютное значение числового выражения. Примеры: *.? ABS(-45) 45 *.? ABS(10-30) 20 *.? ABS(30-10) 20 *.STORE 40 TO Num1 *.STORE 2 TO Num2 *.? ABS(Num2-Num1) 38 5.5 ALIAS --------------------------------------------------------------- Формат: ALIAS([числ_выраж]) Функция ALIAS возвращает псевдоним для указанной рабочей об- ласти. Если аргумент опущен, эта функция возвращает псеводним для текущей рабочей области. Если в текущей рабочей области от- сутствует открытая база данных, возвращается нулевая строка. Пример: *.SELECT A *.USE Video *.SELECT B *.USE Customer ALIAS Cust *.? ALIAS() CUST *.? ALIAS(1) VIDEO 5.6 ASC --------------------------------------------------------------- Формат: ASC(<симв_выраж>) Функция ASC выводит значение кода ASCII для самого левого символа в символическом выражении. Примеры: *.USE Video *.DISPLAY Title RECORD# TITLE 1 AMADEUS *.? ASC(Title) 65 *.? ASC("A") 65 *.? ASC("a") 97 5.7 AT --------------------------------------------------------------- Формат: AT(<симв_выраж1>,<симв_выраж2>) Функия AT требует в качестве аргументов двух символических выражений или двух строк симвлов. Она ведет в символическом вы- ражении <симв_выраж2> поиск первого вхождения символического вы- ражения <симв_выраж1> и выводит в целом виде номер позиции, в которой это вхождение было найдено. Если <симв_выраж1> не входит в <симв_выраж2>, выводится нулевое значение. Примеры: *.STORE "Now is the time" TO Str2 *.STORE "is" TO Str1 *.? AT(Str1,Str2) 5 *.STORE "IS" TO Str1 *.? AT(Str1,Str2) 0 Смотри также: LEFT(), RIGHT(), SUBSTR() 5.8 BOF --------------------------------------------------------------- Формат: BOF([<числ_выраж>]) Функция BOF используется для проверки условия начала файла в файле базы данных. Будет выведено значение .T., если вы попытае- тесь переместить указатель записи далее первой логической записи в активном файле базы данных. Фукнция BOF поддерживает дополнительный аргумент, который указывает номер рабочей области, к которой будет относиться эта фукнция. Если в указанной рабочей области нет открытой базы дан- ных, выводится значение .F. Если аргумент опущен, выводится ста- тус для выбранной в текущий момент рабочей области. Примеры: *.USE Video *.? RECNO() 1 *.? BOF() *.F. *.SKIP -1 Record No.1 *.? RECNO() 1 *.? BOF() *.T. Смотри также: EOF() 5.9 CDOW --------------------------------------------------------------- Формат: CDOW(<числ_выраж_даты>) Функция CDOW функция дня недели, выводит название дня недели, соответствующего выражению <числ_выраж_даты>. Числовое выражение даты может быть функцией системной даты, переменной памяти или полем базы данных. Примеры: *.STORE CTOD("06/12/86") TO Bdate 06/12/86 *.? CDOW(Bdate) Thursday *.? CDOW(Date()) Wednesday *.? "Your book was due last ", CDOW(Date()-2_ Your book was due last Monday Смотри также: DAY(), DOW(), SYS() 5.10 CHR --------------------------------------------------------------- Формат: CHR(<числ_выраж>) Фукнция CHR анализирует числовое выражение <числ_выраж> и вы- водит один символ, чей код ASCII соответствует значению выраже- ния. Примеры: *.? CHR(65) A *.? CHR(97) a Смотри также: ASC(), INKEY() 5.11 CMONTH --------------------------------------------------------------- Формат: CMONTH(<числ_выраж_даты) Фукнция CMONTH, функция месяца, выводит название месяца, со- ответствующего выражению <числ_выраж_даты>. Числовое выражение даты может быть системной функцией даты, переменной памяти или полем базы данных. Примеры: *.? CMONTH(DATE()) June *.STORE CTOD("6/25//85") TO Due 06/25/85 *.? "Your payment was due last", CMONTH(Due) Your payment was due last June *.STORE DATE() + 60 TO Final 08/24/85 *.? "You maust pay by", CMONTH(Final) You must pay by August Смотри также: MONTH(), SYS() 5.12 COL --------------------------------------------------------------- Формат:COL() Функция COL выводит номер столбца в текущем положении курсо- ра. Функция COL особенно полезна при относительной адресации эк- рана в программе. Дополнительная информация приведена в описании фукнции ROW(). Пример: @ ROW( ), COL( ) +12 SAY "Movie Title" Смотри также: @, PCOL(), PROW(), ROW() 5.13 CTOD --------------------------------------------------------------- Формат: CTOD(<симв_выраж_даты>) Функция CTOD преобразует символические данные в данные типа даты, выводя переменную даты, которая соответствует выражению <симв_выраж_даты>. Формат выражения <симв_выраж_даты> по умолчанию mm/dd/yy. Ко- манды SET DATE и SET CENTURY могут быть использованы для измене- ния этого формата. Если век не указывается при вводе даты, (как в символичесокм выражении "12/25/85"), подразумевается двадцатый век. Дата, заданная стрококй символов, должна быть в разрешенном для дат диапазоне. Допустимым является диапазон от "1/1/100" до "12/31/9999". Примеры: *.STORE "7/4/1776 TO Indep 7/4/1776 *.? CTOD(Indep) 07/04/76 *.STORE DATE() TO Today 05/25/85 *.STORE CTOD("12/25/85") TO Xmas 12/25/85 *.STORE STR(Xmas-Today,3) TO Dleft 214 *.? "There are",Dleft, "days until Christmas" There are 214 days until Christmas Смотри также: SET CENTURY, SET DATE, DTOC(), SYS() 5.14 DATE --------------------------------------------------------------- Формат: DATE() В качестве значения функции DATE выводится текущее значение системной даты. DATE можно изменить при помощи команды SET DATE. Пример: *.? DATE() 05/15/84 Смотри также: SET DATE, SET CENTURY, SYS() 5.15 DAY --------------------------------------------------------------- Формат: DAY((<числ_выраж_даты>) Фукнция дня месяца DAY выводит день месяца, соответствующий числовому выражению даты <числ_выраж_даты>. День выводится в ви- де числа. Числовое выражение даты может быть системной функцией даты, переменной памяти или полем базы данных. Примеры: *.STORE CTOD("06/12/86") TO Bdate 06/12/86 *.? DAY(Bdate) 12 *.? "Today is", CMONTH(DATE()),STR(DAY(DATE()),2) Today is November 25 Смотри также: CDOW(), DOW(), SYS() 5.16 DBF --------------------------------------------------------------- Формат: DBF([<числ_выраж>]) Функция DBF выводит имя активного в текущий момент файла базы данных, открытого в конкретной рабочей области. Фукнция DBF поддерживает дополнительный аргумент, который указывает номер рабочей области, к которой будет относиться эта фукнция. Если в указанной рабочей области нет открытой базы дан- ных, выводится нулевая строка. Если аргумент опущен, выводится статус для выбранной в текущий момент рабочей области. Примеры: *.USE Video C:\FOX\VIDEO.DBF *.CLOSE DATABASE *.? DBF() *._ Смотри также: FIELD(), NDX(), SYS(7) 5.17 DELETED --------------------------------------------------------------- Формат: DELETED([<числ_выраж>]) Функция DELETED выводит логическое значение. Она выводит ло- гическое значение "Истинно", если текущая запись помечена для удаления, и "Ложно", если не помечена. Фукнция DELETED поддерживает дополнительный аргумент, который указывает номер рабочей области, к которой будет относиться эта фукнция. Если в указанной рабочей области нет открытой базы дан- ных, выводится нулевая строка. Если аргумент опущен, выводится статус для выбранной в текущий момент рабочей области. Примеры: *.USE Video *.DELETE FOR RECNO() = 1 1 record deleted *.GO TOP &&Установить на запись #1(удаленная запись) *.? DELETED() *.T. *.SKIP &&Установить на запись #2 Record No.2 *.? DELETED() *.F. *.SKIP -1 Record No.1 *.RECAL L && Отменить пометку для удаления *.? DELETED() *.F. Смотри также: SET DELETED 5.18 DISKSPACE --------------------------------------------------------------- Формат: DISKSPACE() Функция DISKSPACE выводит объем свободного места в байтах, имеющегося в текущий момент на принятом по умолчанию дисководе. Функция DISKSPACE особенно удобна при расчетах места, необхо- димого для выполнения копирования на диск и различных команд FoxBASE+, например, SORT. Пример программы: IF DISKSPACE() > 200000 DO Backup ELSE @ 5,0 SAY "Insufficient diskspace. Backup Aborted." ENDIF 5.19 DOW --------------------------------------------------------------- Формат: DOW(<числ_выраж_даты>) Функция дня недели DOW выводит день недели, соответствующий числовому выражению даты <числ_выраж_даты>. День выводится в ви- де числа в диапазоне от 1 (воскресенье) до 7 (суббота). Примеры: *.STORE CTOD("05/14/86") TO Dnum 05/14/86 *.? DOW(Dnum) 4 *.? CDOW(Dnum) Wednesday Смотри также: CDOW(), DAY(), SYS() 5.20 DTOC --------------------------------------------------------------- Формат: DTOC(<числ_выраж_даты>[,1]) Функция DTOC преобразования даты в символические данные, вы- водит дату, соответствующую выражениию <числ_выраж_даты>. Формат вывода дат контролируется текущей включенной опцией SET DATE. Числовое выражение даты может быть системной функцией даты, переменной памяти или полем базы данных. Дополнительный аргумент позволяет выводить дату в виде, при- годном для проведения индексации или сортировки. Это особенно удобно при совместном использовании с функцией TIME. Например, база данных с упорядочением по очереди ввода может быть индексирована следующим образом: REPLACE INVDATE WITH DATE( ); INVTIME WITH TIME( ) INDEX ON DTOC(INVDATE,1)+INVTIME TO Timeindx для обеспечения доступа к базе в порядке ввода. Примеры: *.STORE CTOD("11/23/80") TO Datev 11/23/80 *.? DTOC(Datev) 11/23/80 *.STORE DTOC(DATE()) TO Expire 02/02/86 *.? "Your 90-day warranty expires ", Expire Your 90-day warranty expires 02/02/86 *.? DTOC(DATE(),1) 19870109 Смотри также: CTOD(), SET CENTURY, SYS() 5.21 EOF --------------------------------------------------------------- Формат: EOF([<числ_выраж>]) Функция EOF выводит логическое значение "Истинно", если была пройдена последняя запись в активной в текущий момент базе дан- ных; это значит, что был достигнут конец файла. Функция EOF вы- водит логическое значение "Ложно", если конец файла не достиг- нут. Фукнция EOF поддерживает дополнительный аргумент, который указывает номер рабочей области, к которой будет относиться эта функция. Если в указанной рабочей области нет открытой базы дан- ных, выводится значение .F. Если аргумент опущен, выводится ста- тус для выбранной в текущий момент рабочей области. Примеры: .USE Video *.GO BOTTOM *.? EOF() *.F. *.SKIP && переместиться далее последней записи Record N0. 36 *.? EOF() *.T. Смотри также: BOF() 5.22 ERROR --------------------------------------------------------------- Формат:ERROR() Функция ERROR выводит число, которое соответствует ошибке, вызвавшей выполнение условного оператора ON ERROR. Для того, чтобы функция ERROR выводила значение, отличное от 0, необходи- мо, чтобы была активна команда ON ERROR. Ошибка отслеживается, таким образом могут быть приняты меры по исправлению ситуации. Выведенное значение может быть проана- лизировано и может быть предприняты соответствующие действия (например, удаление файлов с дисков). Пример программы: ON ERROR DO Errhand WITH ERROR(), MESSAGE() **** PROCEDURE Errhand PARAMETER Errnum,Message @ 23,0 Message+"ERROR: "+STR(Error) Смотри также: MESSAGE(), ON ERROR, RETRY, RETURN 5.23 EXP --------------------------------------------------------------- Формат: EXP(<числ_выраж> Функция EXP выводит значение е**A. Значение числового выраже- ния <числ_выраж> является показателем степени X в экспоненциаль- ной функции e**X. Пример: *.? EXP(0) 1.00 *.? EXP(1) 2.72 *.STORE 1 TO Num *.? EXP(Num) 2.72 Смотри также: SET DECIMALS 5.24 FCOUNT --------------------------------------------------------------- Формат: FCOUNT([<числ_выраж>]) Функция FCOUNT выводит количество полей в открытой базе дан- ных. FCOUNT поддерживает дополнительный числовой аргумент, который указывает номер рабочей области, к которой должна быть приложена фукнция. Если в указанной рабочей области нет открытой базы дан- ных, возвращается 0. Пример: *.USE Video *.SELECT 2 *.USE Customer *.? FCOUNT( ) && Количество полей в Customer.dbf 10 *.? FCOUNT(1) && Количество полей в Video.dbf 12 Смотри также: DBF(), NDX(), SYS(7) 5.25 FIELD --------------------------------------------------------------- Формат: FIELD(<числ_выраж1>[,<числ_выраж2>]) Функция FIELD выводит имя поля в активной в текущий момент базе данных, которое соответствует положению, указанному число- вым выражением <числ_выраж>. Если числовое выражение <числ_выраж> указывает номер поля, превышающий количество полей в активной в текущий момент базе данных, будет выведено нулевое значение. Имена полей выводятся в верхнем регистре. Фукнция FIELD поддерживает второй дополнительный аргумент, который указывает номер рабочей области, к которой будет отно- ситься эта фукнция. Если в указанной рабочей области нет откры- той базы данных, выводится нулевая строка. Если аргумент опущен, выводится статус для выбранной в текущий момент рабочей области. Пример: *.USE Video *.STORE FIELD(1) TO Field *.DISPLAY &Field Record# TITLE 1 amadeus *.? FIELD(7) COST_RENT *.? FIELD(13) && в файле VIdeo.DBF только 12 полей *.? FIELD(12) LENGTH 5.26 FILE --------------------------------------------------------------- Формат: FILE(<файл>) Эта функция выводит логическое значение "Истинно", если сим- волическое выражение <файл> является именем существующего файла. Если такой файл не существует, выводится логическое значение "Ложно". В составе выражения <файл> может быть указано любое расшире- ние имени файла. Вместо этого для поиска файла в каталоге, отличном от теекущего рабочего каталога, может быть введено полное указание адреса в формате MS-DOS. Выражение <файл> может быть строкой литералов, заключенной в двойные кавычки, значением символьной переменной памяти или сим- вольным выражением. Если <файл> является строкой литералов, кавычки обязательны. Примеры: *.? FILE("Video.DBF") *.T. *.? FILE("Movie.DBF") *.F. 5.27 FKLABEL --------------------------------------------------------------- Формат: FKLABEL(<числ_выраж>) Функция FKLABEL выводит название функциональной клавиши, ко- торой соответствует числовое выражение <числ_выраж>. Значение <числ_выраж> должно лежать в пределах от 1 до FKMAX(). Примеры: *.? FKLABEL(1) F2 *.? FKLABEL(45) *.? FKLABEL(5) F6 Смотри также: FKMAX(), SET FUNCTION 5.28 FKMAX --------------------------------------------------------------- Формат: FKMAX() Функция FKMAX выводит общее количество программируемых функ- циональных клавиш, имеющихся на вашем терминале. Пример: *.? FKMAX() 9 Смотри также: FKLABEL(), SET FUNCTION 5.29 FLOCK --------------------------------------------------------------- Формат: FLOCK() Конфигурация: Многопользовательская. При обнаружении функции FLOCK() FoxBASE+ предпринимает попыт- ку запереть весь выбранный файл базы данных. Если попытка запереть файл успешно выполняется, функция FLOCK() выводит логическое значение .T., и вам предоставляется доступ для чтения и записи во все записи файла базы данных в ис- ключительном режиме. Если попытка запереть не удалась, функция FLOCK() выводит ло- гическое значение .F.. Это означает, что либо вся база данных была заперта другим пользователем, либо другим пользователем бы- ла заперта хотя бы одна запись. В обоих случаях исключительный доступ к файлу не предоставляется. Пример программы: USE Video IF FLOCK() COPY TO Video2 UNLOCK ELSE ? "Database is not available" ENDIF Как указано в приведенном выше фрагменте программы, команда UNLOCK отпирает запертую базу данных. Запертая база данных авто- матически отпирается при закрытии ее командами USE, CLEAR ALL, CLOSE DATABASE или QUIT. Также файл автоматически отпирается, когда запирается другой файл. 5.30 FOUND --------------------------------------------------------------- Формат: FOUND([<числ_выраж>])) Функция FOUND выводит логическое значение. Значение "Истинно" выводится, если последняя команда CONTINUE, FIND, LOCATE или SEEK выполнена успешно. Значение "Ложно" выводится, если послед- няя команда поиска в FoxBASE+ не закончилась нахождением записи, или если указатель записи был перемещен командой, отличной от команд поиска (напр. GOTO). В каждой рабочей области может существовать свое значение функции FOUND(). Фукнция FOUND поддерживает второй дополнительный аргумент, который указывает номер рабочей области, к которой будет отно- ситься эта функция. Если в указанной рабочей области нет откры- той базы данных, выводится нулевая строка. Если аргумент опущен, выводится статус для выбранной в текущий момент рабочей области. Это особенно полезно при работе со связанными файлами, пос- кольку позволяет получить необходимые значения без выбора соот- ветствующих рабочих областей. Примеры: *.USE Video *.LOCATE FOR Title = "EYEWITNESS" Record = 18 *.? FOUND() *.T. *.GO TOP *.? FOUND() *.F. Смотри также: CONTINUE, EOF(), FIND, LOCATE, SEEK 5.31 GETENV --------------------------------------------------------------- Формат: GETENV(<симв_выраж>) Функция GETENV выводит строку символов, которая является со- держимым переменной конфигурации указанной операционной системы. Если указанная переменная конфигурации не существует, будет выведена нулевая строка. Дополнительная информация по переменным конфигурации приведе- на в руководстве по операционной системе. Пример: *.? GENENV("PATH") C:\COMMAND;C:\FOX Смотри также: DISKSPACE(), OS(), VERSION() 5.32 IIF --------------------------------------------------------------- Формат: IIF(<логич_выраж>,<выраж1>,<выраж2>) Функция IIF выводит значение выражений <выраж1> или <выраж2> в зависимости от логического значения логического выражения <ло- гич_выраж>. Если логическое выражение <логич_выраж> имеет значе- ние "Истинно", функция IIF выводит <выраж1>. Если логическое вы- ражение <логич_выраж> имеет значение "Ложно", функция IIF выво- дит выражение <выраж2>. Эта функция может быть использована вместо структурной коман- ды IF...ENDIF для программирования простых условных выражений. Эта функция особенно удобна в командах CREATE REPORT и CREATE LABEL для условного указания содержания полей. Кроме того, при использовании функции IIF сокращается время выполнения программы (по сравнению со случаем использования оператора IF...ENDIF). Пример: *.STORE 10 TO Num *.Char = IIF(Num > 9,STR(Num,2), STR(Num,1)) *.? Char 10 *.STORE 9 TO Num *.Char = IIF(Num > 9,STR(Num,2), STR(Num,1)) *.? Char 9 Смотри также: IF...ENDIF 5.33 INKEY --------------------------------------------------------------- Формат: INKEY([<числ_выраж>]) Функция INKEY выводит целое числовое значение. Это значение соответствует коду ASCII для клавиши, нажатой пользователем. Вы- веденное целое число будет заключено в диапазоне от 0 до 255. Если пользователь не нажал никакую клавишу, будет выведено нулевое значение. Если в буфере клавиатуры находятся значения нескольких кла- виш, будет выведено значение для первой из введенных в буфер клавиш. Это позволяет вам закладывать в свою программу FoxBASE+ кла- виши, не имеющие графического образа. Ниже приведен список таких клавиш и соответствующих им кодов ASCII. Специальные Возможные Вывод клавиши замены INKEY() Home Ctrl-A 1 Ctrl--> Ctrl-B 2 PgDn Ctrl-C 3 -> Ctrl-D 4  Ctrl-E 5 End Ctrl-F 6 Del Ctrl-G 7 PgUp Ctrl-R 18 <- Ctrl-S 19 Ins Ctrl-V 22 End Ctrl-W 23  Ctrl-X 24 Ctrl-<- Ctrl-Z 26 Home Ctrl-] 29 Ctrl-PgDn Ctrl-Ctrl 30 Ctrl-PgUp Ctrl-- 31 Фукнция INKEY поддерживает второй дополнительный аргумент, который указывает, сколько секунд программа убдет ожидать нажа- тия клавиши (допускаются и доли секунды). Если вызывается функ- ция INKEY без аргумента, она выводит значение нажатой клавиши, если же никакая клавиша нажата не была, выводится 0. Если вызы- вается INKEY с нулевым аргументом, время ожидания нажатия клави- ши не ограничено. Эта возможность может быть использована для выхода из прик- ладной программы, если в течение указанного времени не будет вы- полнен выбор в меню. Пример: STORE CHR(INKEY(600)) TO Chjice IF Choice == "" CLOSE ALL QUIT ELSE DO Menu_Opt ENDIF В приведенной выше программе система будет ожидать в течение 10 минут ввода с клавиатуры. Если никакая клавиша не будет нажа- та, в переменную Choice будет занесена нулевая строка и система будет закрыта. Если будет нажата клавиша, будет выполнена прог- рамма Menu_Opt. Смотри также: CHR(), ON KEY, READKEY(), SET TYPEAHEAD 5.34 INT --------------------------------------------------------------- Формат: INT(<числ_выраж>) Эта функция вычисляет числовое выражение и возвращает целую часть от этого значения. Примеры: *.? INT(12.5) 12 *.? INT(-12.5) -12 *.STORE -12.5 TO Num *.? INT(Num) -12 Смотри также: ROUND() 5.35 ISALPHA --------------------------------------------------------------- Формат: ISALPHA(<симв_выраж>) Функция ISALPHA выводит логическое значение. Значение "Истин- но" выводится, если <симв_выраж> начинается с буквы. Значение "Ложно", если <симв_выраж> начинается не с буквы. Примеры: *.USE Video *.? ISALPHA(Title) *.T. *.DISPLAY Title Record# TITLE 1 AMADEUS *.GO 23 *.? ISALPHA(Title) *.F. *.DISPLAY Title Record# TITLE 23 48 HRS. Смотри также: ISLOWER(), ISUPPER(), LOWER(), UPPER() 5.36 ISCOLOR --------------------------------------------------------------- Формат: ISCOLOR() Функция ISCOLOR выводит логическое значение. Значение "Истин- но" выводится, если вы работаете с FoxBASE+ на цветном мониторе. Значение "Ложно" выводится, если вы работаете с FoxBASE+ на мо- нохромном мониторе. Смотри также: SET COLOR 5.37 ISLOWER --------------------------------------------------------------- Формат: ISLOWER(<симв_выраж>) Функция ISLOWER выводит логическое значение. Значение "Истин- но" выводится, если первым символом строки символов <симв_выраж> является буква в нижнем регистре. Значение "Ложно" выводится, если первым символом строки символов <симв_выраж> является любой символ, но не буква в нижнем регистре. Примеры: *.? ISLOWER("perrysburg") *.T. *.? ISLOWER("Perrysburg") *.F. Смотри также: ISALPHA(), ISUPPER(), LOWER(), UPPER() 5.38 ISUPPER --------------------------------------------------------------- Формат: ISUPPER(<симв_выраж>) Функция ISUPPER выводит лоигческое значение. Значение "Истин- но" выводится, если первый символ символического выражения <симв_выраж> является буквой в верхнем регистре. Значение "Лож- но" выводится, если первым символом является любой символ, кроме буквы в верхнем регистре. Примеры: *.? ISUPPER("perrysburg") *.F. *.? ISUPPER("Perrysburg") *.T. Смотри также: ISALPHA(), ISLOWER(), LOWER(), UPPER() 5.39 LEFT --------------------------------------------------------------- Формат: LEFT(<симв_выраж>,<числ_выраж>) Функция LEFT выводит указанное количество символов, начиная с левого края строки символов. Функция LEFT работает аналогично функции SUBSTR с начальной позицией (1). Если числовое выражение <числ_выраж> больше, чем длина симво- лического выражения <симв_выраж>, функция LEFT выведет всю стро- ку символов. Если числовое выражение <числ_выраж> меньше или равно нулю, функцией LEFT будет выведена нулевая строка. Пример: *.USE Video *.GO 30 *.DISPLAY Title Record# TITLE 30 SOUTH PACIFIC *.? LEFT(Title,5) SOUTH Смотри также: AT(), LTRIM(), RTRIM(), RIGHT(), SUBSTR() 5.40 LEN --------------------------------------------------------------- Формат: LEN(<симв_выраж>) Эта функция выводит длину символического выражения. Пример: *.? LEN ("hello") 5 Смотри также: TRIM() 5.41 LOG _______________________________________________________________ Формат: LOG(<числ_выраж>) Функция LOG выводит значение натурального логарифма для ар- гумента <числ_выраж>. ___________________________________________________ ! С функцией LOG недопустимы аргументы меньше или ! ! равные нулю. ! !_________________________________________________! Примеры: *.? LOG(10) 2.30 *.STORE 1 TO Num *.? LOG(Num) 0.00 *.? LOG (5-Num) 1.39 Смотри также: EXP(), DECIMALS(), SET FIXED 5.42 LOWER _______________________________________________________________ Формат: LOWER(<симв_выраж>) Функция LOWER преобразует все буквы в верхнем регистре в буквы нижнего регистра в указанном символическом выражении. Примеры: *.USE Video *.? Title AMADEUS *.? LOWER(Title) amadeus Смотри также: ISALPHA(), ISLOWER(), ISUPEER(0, UPPER() 5.43 LTRIM _______________________________________________________________ Формат: LTRIM(<симв_выраж>) Функция LTRIM удаляет пробелы, стоящие в начале указанного символического выражения <симв_выраж>. Эта функция особенно удобна для удаления ведущих пробелов, которые образуются в результате выполнения функции STR. Пример: *.STORE " Perrysburg" TO City *.? City Perrysburg *.? LTRIM(City) Perrysburg Смотри также: LEFT(), RIGHT(), RTRIM(), SUBSTR(), TRIM() 5.44 LUPDATE _______________________________________________________________ Формат: LUPDATE() Функция LUPDATE выводит дату последней корректировки актив- ной в текущий момент базы данных. Эта функция может быть использована при проверке, выполня- лась ли ежедневная процедура корректировки. Пример: *.USE Video *.? LUPDATE() 07/12/86 5.45 MAX _______________________________________________________________ Формат: MAX(<выраж>,<выраж>) Фукнция MAX выводит большее из двух приведенных числовых выражений или из двух выражений даты. Пример: *.? MAX(54,39) 54 *.? MAX (CTOD("07/12/86"), CTOD("DATE()")) 07/14/86 Смотри также: MIN() 5.46 MESSAGE _______________________________________________________________ Формат: MESSAGE() Функция MESSAGE без аргументов выводит текущее сообщение об ошибке. Этот вариант функции MESSAGE может быть использован сов- местно или независимо от условия ON ERROR. При наличии условия ON ERROR, фукнции MESSAGE и ERROR полезны в процедурах обработки ошибок для выдачи пользователю сообщений, содержащих рекоменда- ции. Эта фукнция с аргументом, равным 1, выводит исходный код для строки, которая вызвала ошибку при установленном условии ON ERROR. Пример: ON ERROR DO errhand **** PROCEDURE ERRHAND USE ERRHAND USE ERRORS && база данных для ошибок APPEND BLANK REPLACE errnum WITH ERROR() REPLACE errmes WITH MESSAGE() REPLACE source WITH MESSAGE(1) REPLACE program WITH SYS(16) Смотри также: ERROR(), ON ERROR 5.47 MIN _______________________________________________________________ Формат: MIN (<выраж>,<выраж>) Функция MIN выводит меньшее из двух указанных числовых вы- ражений или из двух выражений даты. Пример: *.? MIN(54,39) 39 *.? MIN (CTOD("07/12/86"), CTOD("DATE()")) 07/12/86 Смотри также: MAX() 5.48 MOD _______________________________________________________________ Формат: MOD(<числ_выраж1>,<числ_выраж2>) Функция MOD выводит остаток от деления. Выведенное число является остатком от деления числового выражения <числ_выраж1> на числовое выражение <числ_выраж2>. Если <числ_выраж2> положительно, то выводится положительное число; отрицательное число выводится, если <числ_выраж2> отрица- тельно. Пример: *.? MOD (4*9,90/9) 6 5.49 MONTH _______________________________________________________________ Формат: MONTH(<числ_выраж_даты>) Функция MONTH выводит значение месяца, которое соответству- ет указанноу числовому выражению даты <числ_выраж_даты>. Месяц выводится в виде чисел от 1 до 12. Первым месяцем является ян- варь, двенадцатым месяцем года является декабрь. Числовое выражение даты может быть системной функцией даты, переменной памяти или полем базы данных. Примеры: *.? MONTH(DATE()) 3 *.STORE CTOD("05/23/86" TO Buy 05/23/86 *.STORE MONTH(Buy+30) TO Mon 6 Смотри также: CMONTH, DAY, YEAR, SYS() 5.50 NDX _______________________________________________________________ Формат: NDX(<числ_выраж>) Фукнция NDX выводит имя открытого индексного файла для выб- ранной в текущий момент рабочей области. Выводимое имя индексного файла определяется по его положе- нию в списке имен индексных файлов. Если числовое выражение <числ_выраж> имеет значение 1, то выводится имя певрого индекс- ного файла в списке индексных файлов. Числовое выражение <числ_выраж> должно иметь значение в пределах от единицы до семи. Если в позиции, указанной числовым выражением <числ_выраж> нет открытого индексного файла, FoxBASE+ выведет нулевую строку. Пример: *.USE Video INDEX Title,Cost *.? NDX(1) C:\FOX\TITLE.NDX *.STORE 2 TO Num *.? NDX(Num) C:\FOX\COST.NDX Смотри также: DBF(), FIELD(), SYS(7) 5.51 OS _______________________________________________________________ Формат:OS() Функция OS выводит имя операционной системой, под которой запущен FoxBASE+. Пример: *.? OS() DOS 03.10 Смотри также: DISKSPACE() GETENV(), VERSION() 5.52 PCOL _______________________________________________________________ Формат: PCOL() Функция PCOL выводит текущий номер столбца для принтера. Функция PCOL особенно полезна при использовании относитель- ной адресации при выводе на принтер. Смотри также: @, COL(), ROW(), PROW() 5.53 PROW _______________________________________________________________ Формат: PROW() Функция PROW выводит текущий номер строки для принтера. Функция PROW особенно полезна при использовании относитель- ной адресации при выводе на принтер. Смотри также: @, COL(), PCOL(), ROW() 5.54 READKEY _______________________________________________________________ Формат: READKEY() Функция READKEY выводит целое число. Выведенное целое число представляет клавишу, нажатую пользователем для выхода из полно- экранной команды. --------------------------------------------------------------------- | | | Таблица значений для функции READKEY | |==================================================================== | | |Клавиша Альтернатива Код Код при Значение | | выхода корректировке | |==================================================================== |Ctrl-H Backspace 0 Назад на один символ | |Ctrl-S <- 0 Назад на один символ | |Ctrl-D -> 1 257 Вперед на один символ | |Ctrl-L 1 257 Вперед на один символ | |Ctrl-A Home 2 258 Назад на одно слово | |Ctrl-F End 3 259 Вперед на одно слово | |Ctrl-E стрелка вверх 4 260 Назад на одно слово | |Ctrl-K 4 260 Назад на одно слово | |Ctrl-X стрелка вниз 5 261 Вперед на одно поле | |Ctrl-J 5 261 Вперед на одно поле | |Ctrl-R PgUp 6 262 Назад на один экран | |Ctrl-C PgDn 7 263 Вперед на один экран | |Ctrl-Z Ctrl-<- 8 264 Сместиться налево | |Ctrl-B Ctrl--> 9 265 Сместиться направо | |Ctrl-U 10 266 Удалить что-либо | |Ctrl-N 11 267 Вставить что-либо | |CTRL_Q Esc 12 268 Выйти без сохранения | |Ctrl-W Ctrl-End 14 270 Выйти с сохранением | |Ctrl-M 15 271 Заполнено, печатать далее| |<-' 16 272 APPEND, | | 16 272 MODIFY STRUCTURE/REPORT | |Ctrl-] Ctrl-Home 33 289 Вкл/выкл вывод меню | |Ctrl-- Ctrl-PgUp 34 290 Сигнал выключить | |Ctrl-^ CTRL_Pgdn 35 291 Сигнал включить | |F1 36 292 Клавиша функции HELP | |Ctrl-G Del N/A N/A N/A | |Ctrl-V Ins N/A N/A N/A | -------------------------------------------------------------------- К полноэкранным командам относятся следующие: APPEND, BROWSE, CHANGE, CREATE, EDIT, INSERT, MODIFY, READ. Возврфщаемое целое число находится между 0 и 36 или между 256 и 292. Если в процессе выполнения команды данные не изменя- лись, то возвращаемое значение находится между 0 и 36. Если в процессе выполнения команды данные изменялись, возвращаемое зна- чение будет находиться между 256 и 292. Другими словами, при из- мении данных в процессе выполнения команды возвращаемое значение увеличивается на 256. Смотри также: INKEY(), ON KEY, READ 5.55 RECCOUNT _______________________________________________________________ Формат: RECCOUNT([<числ_выраж>]) Функция RECCOUNT выводит количество записей в базе данных в выбранной в текущий момент рабочей области. Если в выбранной в текущий момент рабочей области нет ак- тивного файла базы данных, функция RECCOUNT выведет нулевое зна- чение. В активном файле базы данных будут подсчитаны все записи независимо от сотояния команд SET DELETE и SET FILTER. Фукнция RECCOUNT поддерживает дополнительный аргумент, ко- торый указывает на рабочую область, к которой должна относиться функция. Если аргумент опущен, выведенное значение будет отно- ситься к выбранной в текущий момент рабочей области. Пример: *.USE Video *.? RECCOUNT() 35 Смотри также: RECSIZE() 5.56 RECNO _______________________________________________________________ Формат: RECNO([<числ_выраж>]) Функция RECNO выводит номер текущей записи. Номер записи - это физическое положение записи в выбранном в текущий момент файле базы данных. Если база данных пуста, RECNO() = 1 и EOF() = .T. Функция RECNO выведет число на единицу больше, чем текущее количество записей в файле, если указатель записи перемещен да- лее последней записи в файле. Функция RECNO выведет единицу, если указатель записи уста- новлен ранее первой записи в файле. Фукнция RECNO поддерживает дополнительный аргумент, который указывает на рабочую область, к которой должна относиться функ- ция. Если в указанной рабочей области нет открытой базы данных, то выводится значение 0. Если аргумент опущен, выведенное значе- ние будет относиться к выбранной в текущий момент рабочей облас- ти. rechno (0) "мягкий поиск" После неуспешного поиска (SEEK) в индексированной базе дан- ных, функция RECHNO (0) использует логику "мягкого поиска" для определения возвращаемого номера текущей записи. Другими слова- ми, она возвращает номер записи, предшествующей значению выраже- ния SEEK относительно индекса. Если значение выражения SEEK на- ходится за пределами последнего ввода индекса, то функция RECHNO (0) возвращает значение 0. Примеры: *.USE Video *.? RECNO() 1 *.SKIP -1 *.? RECNO() 1 *.GO BOTTOM *.? RECNO() 35 *.SKIP *.? RECNO() 36 5.57 RECSIZE _______________________________________________________________ Формат: RECSIZE([<числ_выраж>]) Функция RECSIZE выводит размер текущей записи базы данных в выбранной в текущий момент рабочей области. Будет выведен нуль, если открытых файлов базы данных нет. Фукнция RECSIZE поддерживает дополнительный аргумент, кото- рый указывает на рабочую область, к которой должна относиться функция. Если аргумент опущен, выведенное значение будет отно- ситься к выбранной в текущий момент рабочей области. Пример: *.USE Video *.? RECSIZE() 92 Смотри также: RECCOUNT() 5.58 REPLICATE _______________________________________________________________ Формат: REPLICATE(<симв_выраж>,<числ_выраж>) Функция REPLICATE копирует символическое выражение <симв_выраж> количество раз, указанное числовым выражением <числ_выраж>. Максимальнаяч длина полученной строки символов может быть не более 254 символов. Эта функция может быть использована при создании диаграмм или графических форм. Пример: *.? REPLICATE (" HELLO ", 5) HELLO HELLO HELLO HELLO HELLO 5.59 RIGHT _______________________________________________________________ Формат: RIGHT(<симв_выраж>,<числ_выраж>) Функция RIGHT выводит правую часть строки символов. Число- вое выражение <числ_выраж> определяет количество выведенных сим- волов. Если числовое выражение <числ_выраж> меньше или равно нулю, будет выведена нулевая строка. Если числовое выражение <числ_выраж> больше длины символи- ческого выражения <симв_выраж>, будет выведено все символичесоке выражение. Пример: *.? RIGHT("Perrysburgh, OH",2) OH Смотри также: LEFT(), LTRIM(), RTRIM(), SUBSTR(), TRIM() 5.60 RLOCK или LOCK _______________________________________________________________ Формат: RLOCK() или LOCK() Конфигурация: Одно- или многопользовательская. Функции RLOCK() и LOCK() идентичны. Приведенное ниже пояс- нение относится к фукнции RLOCK(), однако оно может быть отнесе- но и к фукнции LOCK(). При обнаружении функции RLOCK(0), если текущая запись базы данных еще не заперта, FoxBASE+ предпринима- ет попытку закрыть эту запись. В любом случае фукнция RLOCK() или LOCK() выводит значение .T. или .F.. Если функция RLOCK() выводит .T., это означает, что вам предоставлены права чтения и записи в запись. В дополнение при необходимости RLOCK() прочитает текущую запись базы данных для проверки того, не изменилось ли ее содержание. Если функция RLOCK() выводит .F., это означает, что запись была закрыта другим пользователем, и вы можете только читать запрошенную запись. Ваши действия в такой ситуации зависят от запросов вашей прикладной программы. Пример: SEEK custname IF RLOCK() SET FORMAT TO custfile READ ELSE ? "Customer record is not available" ENDIF Запертая запись автоматически отпирается, если содержащий ее файл базы данных закрывается командами USE, CLEAR, CLOSE или QUIT. Перемещение с запертой записи не отменяет запирание этой записи. 5.61 ROUND _______________________________________________________________ Формат: ROUND(<числ_выраж1>,<числ_выраж2>) Функция ROUND позволяет вам округлять числовое выражение до определенного количества дробных разрядов. Числовое выражение <числ_выраж1> задает число, которое вы хотите округлить. Число- вое выражение <числ_выраж2> задает количество дробных разрядов, которое вы хотите сохранить. Если <числ_выраж2> имеет отрицательное значение, в результате округления будет получено число с соответствующим количеством нулей. Например, если <числ_выраж> равно -2, результат будет ок- руглен до сотен. Пример: *.? ROUND (1024.1962,2) 1024.2000 *.? ROUND (1024.1962,0) 1024.0000 *.? ROUND (1024.1962,-1) 1020 Смотри также: INT() 5.62 ROW _______________________________________________________________ Формат: ROW() Функция ROW выводит текущий номер строки в позиции курсора. Эта функция особенно полезна при относительной адресации курсора в командных файлах. Смотри также: @, COL, PCOL(), PROW() 5.63 RTRIM _______________________________________________________________ Формат: RTRIM(<симв_выраж> Символическое выражение <симв_выраж> анализируется и выво- дится выражение, аналогичное исходному, в котором отсутствуют все завершающие его пробелы. Если символическое выражение <симв_выраж> состоит целиком из пробелов, функция RTRIM выводит нулевую строку. Функция RTRIM аналогична функции TRIM. Смотри также: LTRIM(), TRIM() 5.64 SELECT _______________________________________________________________ Формат: SELECT() Функция SELECT выводит номер выбранной в текущий момент ра- бочей области. Пример: *.SELECT 1 *.USE Video *.? SELECT( ) 1 5.65 SOUNDEX _______________________________________________________________ Формат: SOUNDEX(<симв_выраж>) Функция SOUNDEX возвращает звуковое представление использу- емого ею символьного выражения. Сравнивая результат работы функ- ции SOUNDEX с двумя символьными строками, можно определить фоне- тическое сходство двух слов или, другими словами, звучат ли они одинаково. Функция полезна при поиске копий или при вводе данных. Пример: ? SOUNDEX("Smith")=SOUNDEX("Cmyth") .T. ? SOUNDEX("Computer") C513 INDEX ON zip+SOUNDEX(company) TO newfile 5.66 SPACE _______________________________________________________________ Формат: SPACE(<числ_выраж>) Функция SPACE выводит строку символов, состоящую из <числ_выраж> пробелов. Максимально может быть указано не более 254 символов. Пример: *.STORE SPACE(15) TO Blank *.? LEN(Blank) 15 Смотри также: REPLICATE() 5.67 SQRT _______________________________________________________________ Формат: SQRT(<числ_выраж>) Функция SQRT выводит значение квадратного корня для число- вого выражения (<числ_выраж>). ______________________________________________________ ! Функция SQRT допускает в качестве аргумента только ! ! неотрицательные числа. ! !____________________________________________________! Примеры: *.? SQRT(4) 2.00 *.? SQRT(57.6*14.3) 28.70 Смотри также: SET DECIMAL, SET FIXED 5.68 STR _______________________________________________________________ Формат: STR(<числ_выраж>,<длина>[,дробные]) Функция STR позволяет вам преобразовать числовое выражение в символическое выражение. Эта функция может иметь один, два или три аргумента. Анализируется числовое выражение <числ_выраж>. Затем его значение преобразуется в строку длиной <длина> символов. Если имеется третий аргумент, значение выводится с количеством дроб- ных разрядов после десятичной точки, определенным параметром [,дробные]. Длина результата, заданная параметром <длина>, вклю- чает в себя позицию десятичной точки и позиции справа от нее. Пример: *.? STR(123.456,10,4) 123.4560 Смотри также: VAL() 5.69 STUFF _______________________________________________________________ Формат:STUFF(<симв_выраж1>,<начало>,<числ_выраж>,<симв_выраж2>) Функция STUFF позволяет вам легко модифицировать часть строки символов. Символичесоке выражение <симв_выраж1> является текущим сим- волическим выражением. Параметр <начало> задает начальную пози- цию в пределах символического выражения <симв_выраж1>, с которой производится замена. Числовое выражение <числ_выраж> задает ко- личество символов, которое должно быть заменено в строке симво- лов <симв_выраж1>. Строка символов <симв_выраж2> задает фраг- мент, который вводится в исходную строку. Если <числ_выраж> равно 0, фрагмент будет вставлен в стро- ку, однако никакие символы из строки удалены не будут. Если <симв_выраж2> является нулевой строкой, количество символов, указанное числовым выражением <числ_выраж> будет уда- лено из текущей строки без введения какой-либо замены. Примеры: *.STORE "abcdefghijklm" TO Str1 *.STORE "12345" TO Str2 *.? STUFF(Str1,4,3,Str2) abc1234ghijklm *.? STUFF(Str1,4,6," ") abcjklm Смотри также: RIGHT(), SUBSTR(), LEFT() 5.70 SUBSTR _______________________________________________________________ Формат: SUBSTR(<симв_выраж>,<начало>[,<числ_выраж>]) Функция SUBSTR выводит указанное количество символов из символического выражения <симв_выраж>. Эта функция может иметь два или три аргумента. Она извлека- ет символы из символического выражения <симв_выраж> начиная с позиции <начало> и длиной <числ_выраж> символов. Первый символ символического выражения <симв_выраж> находится в позиции 1. Ес- ли параметр [<числ_выраж>] опущен, символы извлекаются до конца выражения. Примеры: *.? STORE "abcdefghijklm" TO Str1 *.? SUBSTR(Str1,1,5) abcde *.? SUBSTR(Str1,6) fghijklm Смотри также: AT(), LEFT(), RIGHT(), STUFF() 5.71 SYS _______________________________________________________________ Формат: SYS(<значение>) Конфигурация: Одно- или многопользовательская. SYS это функция оценки строки символов. В зависимости от значения числового аргумента <значение> она выводит различные системные параметры. SYS(0) При этом выводится имя компьютера и сетевой номер компьюте- ра, как определено в сети. SYS(1) При этом выводится текущая системная дата по юлианскому ка- лендарю в виде строки символов. Эта функция ориентирована в ос- новном на пользователей исходной версии FoxBASE+ (совместимой с dBASE II) для преобразования их баз данных в формат FoxBASE+. Номер дня, используемый этой функцией, идентичен по формату но- меру дня, используемому в исходной версии FoxBASE+. SYS(2) При этом выводится количество секунд, прошедших с полночи в виде строки символов. SYS(3) Эта функция выводит уникальное допустимое имя файла, кото- рое может быть использовано для создания временных файлов. При каждом использовании функции SYS(3) выводится другое имя файла, независимо от того, вызывается ли эта функция одним и тем же пользователем, или разными. SYS(5) В MS DOS при этом выводится имя текущего устройства по умолчанию. Этот параметр устанавливается командой SET DEFAULT TO . SYS(6) При этом выводится имя текущего устройcтва печати. Этот па- раметр устанавливается командой SET PRINT TO . SYS(7[,w]) При этом выводится имя текущего файла формата FORMAT. Если не указан номер рабочей области, подразумевается рабочая об- ласть, выбранная в текущий момент. Это имя файла задается коман- дой SET FORMAT TO . Если активные форматные файлы отстутс- твуют, функция выводит строку символов нулевой длины. SYS(9) Эта функция выводит серийный номер вашего пакета FoxBASE+. SYS(10,d) Эта функция преобразует номер дня d в строку символов. Эта функция создана в основном для удобства пользователей исходной версии FoxBASE+ (совместимой с dBASE II) для преобразования их баз данных в формат FoxBASE+. Номер дня, используемый этой функ- цией, аналогичен по формату номеру дня, используемому в исходной версии FoxBASE+. SYS(11,s) Эта функция преобразует дату или строку символов в формате даты в юлианскую дату (которая выводится в виде строки симво- лов). Эта функция создана в основном для удобства пользователей исходной версии FoxBASE+ (совместимой с dBASE II) для преобразо- вания их баз данных в формат FoxBASE+. Номер дня, используемый этой функцией, аналогичен по формату номеру дня, используемому в исходной версии FoxBASE+. SYS(12) Эта функция выводит объем свободной памяти в байтах. Эта функция может быть полезна при конфигурировании системы FoxBASE+. (Работает только в MS-DOS). SYS(13) Эта функция выводит статус принтера. Если принтер не готов, будет выведено OFFLINE. Если принтер подключен, будет выведено ONLINE. SYS(14,n[,w]) Эта функция выводит индексное выражение для определенного индексного файла, где n это номер индексного файла, а w это но- мер рабочей области. Если рабочая область не указана, подразуме- вается рабочая область, выбранная в текущий момент. Если указан- ный номер индексного файла не соответствует никакому индексному файлу, выводится нулевая строка символов. Если в качестве n ука- зано число больше 7 или в качестве w указано число больше 10, будет выведено сообщение об ошибке. SYS(15,t,s) Эта функция в первую очередь ориентирована на предоставле- ние удобств пользователей из Европы, которые используют буквы с надстрочными символами. В IBM эти символы имеют специальное представление со значение старшего бита 1. Кроме того, поскольку существуют различные варианты гласных (с разными диакритическими символами), индексация по полям, содержащим такие символы произ- водится с нарушением нормального алфавитного порядка. Эта функция анализирует каждый из символов строки s, ис- пользуя числовое значение символа в качестве индекса в "таблице" t, и заменяя s соответствующим символом, найденным в этой пози- ции в таблице t. Если таблица слишком мала для того, чтобы содержать символ, соответствующий символу из s, то соответствующие символы из s не преобразуются. Разработчики предоставили образец таблицы преобразования в файле european.mem, которая сохранена в переменной памяти european. Эта таблица преобразует букву с диакритическим симво- лом в соответствующую букву без диакритического символа. В качестве примера приведена команда, которая может быть использована для выполнения индексирования базы данных по полю, содержащему буквы с диакритическими символами, с сохранением ал- фавитного порядка: INDEX ON SYS(15,european,поле) TO файл SYS(16[<числ_выраж>) Эта функция выводит имя программы, которая выполняется в текущий момент. Эта функция полезна при обработке ошибок. Дополнительный второй числовой аргумент указывает, на сколько лексических уровней надо вернуться назад для поиска име- ни программы. Значения этого параметра находятся в интервале от 1 до N, где N означает глубину, на которую был установлен DO для дости- жения текущей программы. При значении параметра 1 (или 0) функ- ция возвращает имя главной программы (первой выполненной прог- раммы). Если параметр опущен, возвращается имя текущей выполняе- мой программы. ЗДЕСЬ ПРОПУСК SYS(17) Эта функция возвращает тип используемого процессора (8086/88, 80286 или 80386). SYS(18) Эта функция выводит имя поля (в верхнем регистре), в кото- рое производился ввод, когда была исполнена текущая процедура ON KEY=. Это может пройзойти только при выполнении операции READ. В противном случае эта функция выводит пустую строку. SYS(100) Эта функция выводит значение параметра CONSOLE (ON/OFF), установленного командой SET. Эта функция, аналогично функциям SYS(101), SYS(102) и SYS(102) предназначена для использования в процедурах обработки ошибок. Поскольку при ошибке может произойти изменение значения параметров SET, (например, при ошибке всегда задается SET CONSOLE ON), важно иметь возможность узнать ранее установленные значения этих параметров. SYS(101) Эта функция выводит ранее установленное значение параметра DEVICE (SCREEN/PRINT). Эта функция, аналогично функциям SYS(100), SYS(102) и SYS(103) предназначена для использования в процедурах обработки ошибок. SYS(102) Эта функция выводит ранее установленное значение параметра PRINT (ON/OFF). Эта функция, аналогично функциям SYS(100), SYS(101) и SYS(103) предназначена для использования в процедурах обработки ошибок. SYS(103) Эта функция выводит ранее установленное значение параметра TALK (ON/OFF). Эта функция наряду с функциями SYS(100), SYS(101) и SYS(102) используется в процедурах обработки ошибок. 5.72 TIME _______________________________________________________________ Формат: TIME(<выраж>) Функция TIME выводит текущее системное время, в качестве значения функции TIME(). Время выводится в виде строки символо длиной восемь символов в 24-часовом формате. Если функция TIME вызывается с аргументом (любым аргумен- том), она возвращает значение времени с точностью до сотых долей секунды. (Однако максимальная разрешающая способность часов рав- на приблизительно 1/18 секунды). Пример: *.? TIME() 13:15:00 *.? TIME(1) 13:15:12.53 В этом примере текущее системное время 1:15 дня. Смотри также: SYS(2) 5.73 TRANSFORM _______________________________________________________________ Формат: TRANSFORM(<выраж>,<симв_выраж>) Функция TRANSFORM позволяет форматировать символические и числовые переменные без использования команды @...SAY. Параметр <выраж> представляет переменную, которую вы хотите сформатировать. Символическое выражение <симв_выраж> это выраже- ние формата, которое вы хотите использовать с переменной. Дополнительная информация о трафаретных форматах приведена в описании команды @. Пример: *.STORE 15.89 TO Price *.? TRANSFORM (Price, "$$$$.99") $15.89 Смотри также: @...SAY 5.74 RTRIM _______________________________________________________________ Формат: TRIM(<симв_выраж> Функция TRIM удаляет из символического выражения <симв_вы- раж> завершающие пробелы. Символическое выражение <симв_выраж> анализируется и выво- дится выражение, аналогичное исходному, в котором отсутствуют все завершающие его пробелы. Если символическое выражение <симв_выраж> состоит целиком из пробелов, функция TRIM выводит нулевую строку. Пример: *.USE Video *.? TRIM (Title) + "is rated" + TRIM(Rating) AMADEUS is rated PG Смотри также: LTRIM(), RTRIM() 5.75 TYPE _______________________________________________________________ Формат: TYPE(<симв_выраж>) Анализируется символическое выражение <симв_выраж>. Затем выводится соответствующее значение в виде одной буквы, обознача- ющей тип данных для этого выражения. Могут быть выведены следую- щие значения: C - символическое выражение N - числовое выражение L - логическое выражение M - выражение типа мемо U - неопределенный тип выражения. Примеры: *.? TYPE("12*3)+4") N *.? TYPE(".F. .OR. .T.") L *.? TYPE("ANSWER=42") U 5.76 UPDATED _______________________________________________________________ Формат: UPDATED() Функция UPDATED возвращает значение ".T.", если последняя команда READ внесла какие-либо изменения в связанных с ней опе- раторах GET. Пример программы: CLEAR @ 5,0 GET Mtitle READ IF UPDATED() USE Video REPLACE Title WITH Mtitle ENDIF 5.77 UPPER _______________________________________________________________ Формат: UPPER(<симв_выраж>) Функция UPPER преобразует в указанном символическом выраже- нии все буквы нижнего регистра в буквы верхнего регистра. Пример: *.STORE "Fox Sofrtware, Inc." TO Company *.? UPPER (Company) FOX SOFTWARE, INC. Смотри также: ISUPPER(), ISLOWER(), LOWER() 5.78 VAL _______________________________________________________________ Формат: VAL(<симв_выраж>) Функция VAL преобразует строку символов <симв_выраж> в чис- ловое выражение. Строка <симв_выраж> должна содержать значения только разрешенных чисел, представленных в ASCII кодах. Пример: *.STORE "12" TO A *.STORE "13" TO B *.? VAL(A) + VAL(B) 25.00 *.STORE "1.25Е3" TO С *.? 2 * VAL(С) 2500.00 Смотри также: SET DECIMALS, SET FIXED, STR() 5.79 VERSION _______________________________________________________________ Формат: VERSION() Функция VERSION выводит строку символов, которая содержит номер используемой версии FoxBASE+. Эта функция может быть использована для условного выполне- ния сегментов исполняемого кода, которые зависят от версии FoxBASE+. Пример: *.? VERSION() FoxBASE+ Rev 2.00 Смотри также: DISKSPACE(), GETENV(), OS() 5.80 YEAR _______________________________________________________________ Формат: YEAR(<числ_выраж_даты>) Функция YEAR выводит год, соответствующий приведенному чис- ловому выражению даты <числ_выраж_даты>. Числовое выражение даты может быть системной функцией даты, переменной памяти или полем базы данных. Примеры: *.? YEAR(DATE()) 1986 *.STORE CTOD("05/23/86") TO Num 05/23/86 *.STORE CDOW(Num) TO Day Friday *.STORE CMONTH(Num) TO Mon May *.STORE DAY(Num) TO Dnum 23 *.STORE STR(Dnum,2) TO Newdnum 23 *.STORE STR(YEAR(Num),4) TO Yr 1986 *.? "Today is", Day+", Mon, Newdnum+",", Yr Today is Friday, May 23, 1986 6 ТОНКАЯ НАСТРОЙКА _______________________________________________________________ На следующих далее страницах описана простая и гибкая про- цедура, которая позволяет пользователям изменять начальные пара- метры в момент загрузки памяти) и принятые по умолчанию значения для команд SET. Кроме того, в настоящую главу включен раздел, содержащий различные рекомендации, которые помогут вам оптимизировать рабо- ту FoxBASE+. 6.1 Возможности конфигурации FoxBASE+. _______________________________________________________________ Файлы конфигурации FoxBASE+ позволяет вам изменять распределение памяти и при- нятые по умолчанию начальные значения команд SET при помощи простой и гибкой процедуры конфигурации. Эта операция произво- дится при помощи создания текстового файла с именем "CONFIG.FX", или, для совместимости с dBASE III PLUS, "CONFIG.DB". При работе FoxBASE+ автоматически производит в текущем ра- бочем каталоге поиск файла с именем CONFIG.FX. Если этот файл не найден в рабочем каталоге, FoxBASE+ производит поиск файла CONFIG.FX в каталогах, приведенных в списке команды MS-DOS PATH. (Описание команды PATH приведено в руководстве по MS-DOS). Если файл CONFIG.FX не найден и в результате этой процеду- ры, FoxBASE+ повторяет процесс поиска для файла с именем CONFIG.DB. Если файлы CONFIG.FX и CONFIG.DB не найдены, тогда исполь- зуется встроенная конфигурация, предоставляемая по умолчанию. В целях использования существующего файла dBASE III PLUS CONFIG.DB без изменений, в случае, если FoxBASE+ находит в этом файле недопустимую строку, сообщение об ошибке не выдается. Вместо этого эта строка будет игнорироваться. Значения числовых параметров конфигурации проверяются на допустимость этих значений для соответствующих параметров. Недо- пустимые значения исправляются на ближайшие к ним значения из допустимого диапазона. Если строка PROMPT содержит более 20 символов, она будет усечена. Изменение конфигурации Конфигурацию легко изменять с помощью любого встроенного текстового редактора (включая редактор, встроенный в FoxBASE+). В связи с этим, после того, как вы освоитесь с FoxBASE+, наилуч- шим подходом будет поэкспериментировать с различными конфигура- циями для нахождения одной, которая работает наилучшим образом на вашем компьютере с вашими программами. Тексовый файл CONFIG содержит одну или несколько строк в следующем формате: <параметр> = <значение> 6.2 Конфигурируемые параметры распределения _______________________________________________________________ Большое количество параметров, которые могут быть включены в файл CONFIG, относятся к возможностям FoxBASE+, которые управ- ляются посредством команд SET. Однако, некоторые параметры, ко- торые задают размеры различных таблиц, буферов, пулов памяти и других ресурсов FoxBASE+, могут быть также определены в файлах CONFIG. Когда ваша прикладная система создана, правильная уста- новка параметров распределения в соответствии с максимальными запросами системы позволит освободить дополнительную память, ис- пользуюмую в процессе динамического распределения памяти. Чем больше предоставлено памяти, тем лучше работает программа. Ниже приведен перечень параметров распределения и их описа- ния: BUCKET Общий объем пула размером К байтов, доступный для сохранения операторов GET и связанных с ними опера- торов PICTURE, RANGE и VALID. Объем для хранения оператора GET колеблется от 30 до 302 байт в зависи- мости от соответствующих операторов PICTURE, RANGE и VALID (в случае накличия таковых). Значение парамет- ра должно лежать в диапазоне от 1 до 32; значение по умолчанию 4. EMS Этим параметром указывается, может ли FoxBASE+ ис- пользовать расширенную память (в соответствии со спецификацией LOTUS/INTEL/MICROSOFT). В общем случае FoxBASE+ может сосуществовать с другими программами, использующими расширенную память. Однако, если вы хотите зарезервировать расширенную память для других программ, вы можете установить EMS OFF. Если вы ис- пользуете внешние программы, которые вы загружаете и запускаете командами LOAD и CALL, и эти программы используют расширенную память, вы должны знать, что FoxBASE+ всегда размещает часть своей памяти на странице расширенной памяти после ввода команды CALL. Если ваши программы не учитывают этого, реко- мендуем вам задать EMS OFF. По умолчанию установлено ON. FILES Этот параметр указывает количество файлов, которые могут быть открыты в процессе работы FoxBASE+. Зна- чение этого параметра должно лежать в диапазоне от 16 до 48; значение по умолчанию 16. _______________________________________________________ ! Значение, указанное для параметра FILES в файле ! ! MS-DOS CONFIG.SYS должно быть по крайней мере на 10 ! ! больше, чем значение, указанное для этого параметра ! ! в файле CONFIG.FX/CONFIG.DB ! !_____________________________________________________! HISTORY Этот параметр задает по умолчанию количество команд в буфере HISTORY, которое будет выведено командой LIST HISTORY. При этом, однако, фактическое количес- тво сохраненных в буфере команд будет ограничено об- ъемом памяти, указанным параметром HMEMORY. Значение этого параметра должно лежать в диапазоне от 0 до 16.000; значение по умолчанию 20. HMEMORY Общий объем памяти, доступный для хранения буфера команд FoxBASE+ в К байт. Необходимый объем следует вычислять, исходя из предполагаемого среднего разме- ра команды. Для сохранения одной команды необходим объем, раный ее длине плюс 8 байт. Значение этого параметра должно лежать в диапазоне от 0 до 63; зна- чение по умолчанию 5. INDEX Этот параметр указывает расширение имени файла, ко- торое будет использоваться по умолчанию при создании индексных файлов FoxBASE+. Значение по умолчанию IDX. MENU Общий объем в К байт, доступный для хранения подска- зок и сообщений. Значение должно лежать в диапазоне от 1 32. Значение по умолчанию 1. MVARSIZ Объем памяти в К байт, отведенный для строк симво- лов, сохраняемых в переменных памяти. Значение долж- но лежать в диапазоне от 1 до 32; значение по умол- чанию 6. MVCOUNT Максимальное количество переменных памяти, которое может быть использовано. Диапазон значений от 128 до 3 600; значение по умолчанию 256. PROMPT Этот параметр позволяет модифицировать подсказку FoxBASE+. Значение по умолчанию - это точка со сле- дующим за ней пробелом. TEDIT Задает внешний текстовый редактор, который будет ис- пользоваться с командой MODIFY COMMAND. TIME Количество повторных попыток для устройства печати. При этом, если устройство не готово, FoxBASE+ будет ожидать его готовности указанное количество циклов. Если счетчик повторов исчерпан, FoxBASE+ выдаст со- общение об ошибке "Printer not ready. Retry? (Y/N)" (принтер не готов. Повторить?). Значение этого пара- метра должно лежать в диапазоне от 1 до 1 000 000; значение по умолчанию 6000. WP Задает внешний текстовый редактор, который будет ис- пользоваться для редактирования полей мемо. Алфавитный список параметров файла CONFIG.FX с их значениями и значениями, принятыми по умолчанию. <параметр> <значение> <умолчание> ALTERNATE <имя файла> BELL ON/OFF ON BUCKET <от 1 до 64> 4 CARRY ON/OFF OFF CENTURY ON/OFF OFF CLEAR OFF/ON OFF COLOR <параметры цвета> COMMAND <команда> CONFIRM ON/OFF OFF CONSOLE ON/OFF ON DEBUG ON/OFF OFF DECIMALS <от 0 до 14> 2 DEFAULT <дисковод/каталог> DELETED ON/OFF OFF DELIMITER ON/OFF OFF DELIMITER <1 или 2 символа> двоеточие DEVICE SCREEN/PRINT SCREEN EMS ON/OFF OFF ECHO ON/OFF OFF ESCAPE ON/OFF ON EXACT ON/OFF OFF EXCLUSIVE ON/OFF ON F<число> <симв_выраж> FILES <от 16 до 48> 16 HEADINGS ON/OFF ON HELP ON/OFF ON HISTORY <от 0 до 16000> 20 HMEMORY <от 0 до 63> 5 INDEX <расширение> IDX INTENSITY ON/OFF ON MARGIN <от 1 до 254> 0 MEMOWIDTH <от 8 до 256> 50 MENU ON/OFF ON MVCOUNT <от 128 до 3600> 256 ODOMETER <числ_выраж> 100 PATH <маршрут> PRINT ON/OFF OFF PROMPT <симв_выраж> "." SAFETY ON/OFF ON SCOREBOARD ON/OFF ON STATUS ON/OFF ON STEP ON/OFF OFF TALK ON/OFF ON TEDIT <имя программы редактора> TIME <от 1 до 32767> 6000 TYPEAHEAD <от 0 до 32 000> 128 UNIQUE ON/OFF OFF WP <имя программы редактора> 6.3 Оптимизация работы FoxBASE+ _______________________________________________________________ Ниже приведены некоторые рекомендации, которые помогут вам улучшить показатели FoxBASE+. Разгрузка каталогов MS-DOS Одной из наиболее распространенных причин неудовлетвори- тельной работы FoxBASE+ явялется перегрузка каталогов MS-DOS. В этом случае имеет место следующая ситуация: * Прикладная система содержит 150 программ с 30 файлами базы данных и/или индексными. * Пользователь компилирует 150 программных файлов, создавая при этом 150 файлов .FOX. * Затем пользователь выполняет переиндексацию баз данных, создавая файлы .IDX. * Запускается прикладная программа, которая генерирует большое количество промежуточных мелких баз данных или индексных файлов. В этот момент пользователь обращается в фирму и заявляет, что мы ввели его в заблуждение в отношении нашего программного продукта, который работает с его прикладной программой только на хх% быстрее, чем dBASE, а не в 6 раз. Фактически же пользователь в такой ситуации проверяет, с какой скоростью MS-DOS может производить поиск в каталоге. Этот процесс FoxBASE+ не контролирует. В приведенном примере скорость поиска в каталоге может быть значительно уменьшена по следующим причинам: * В каталог были введены более 150 файлов, и он содержит в текущий момент около 300 файлов. Поэтому при создании нового файла или поиске существующего, MS-D0S должен просмотреть 300 ссылок в каталоге вместо 150, которые существовали ранее. * Пул буферов MS-D0S (размер которого задан в файле CONFIG.SYS) может быть недостаточным для размещения в нем полностью каталога увеличенного размера. При этом значительно увеличится количество обращений к диску при поисках в каталоге. * Пользователи (не имеющие достаточного опыта) обычно недооценивают время, затрачиваемое MS-DOS на работу с каталогами. ________________________________________________________ ! Решение этой пробелмы очевидно. Вам следует очистить ! ! каталоги MS-DOS. ! !______________________________________________________! Далее приведены несколько рекомендаций, которые помогут вам сократить количество файлов в каталогах и сократить время поис- ка: * Заносите ваши файлы .FOX и файлы .PRG в разные каталоги. Обычно мы сохраняем свои файлы .FOX в главном рабочем каталоге, а файлы .PRG в подкаталоге с именем SOURCE. * Совмещайте программныне файлы .PRG в процедурных файлах. Это поможет вам значительно сократить количество файлов. Способы построения процедурных файлов приведены в главе 2 в описании программы создателя процедурных файлов. * Рассмотрите возможность увеличения количества буферов, которые задаются в файле MS-DOS CONFIG.SYS. Это позволит операционной системе содержать больший объем каталогов в оперативной памяти. И, наконец, заключительная рекомендация. Во многих случаях простое удаление файлов из каталога не позволит ускорить процесс поиска в каталоге. Причиной этого является то, что при удалении файла соответствующая ссылка в каталоге, помечается, как свобод- ная, но остается в каталоге. В связи с этим для того, чтобы до- биться ожидаемого ускорения работы необходимо: * Скопировать все файлы в новый каталог с целью исключения всех пустых мест от удаленных файлов, или * Сжать исходный каталог для удаления пустых мест с использованием имеющихся вспомогательных программ (Norton Utilities, DOS2OOLS, и т.д.) Предоставьте FoxBASE+ достаточно памяти FoxBASE+ является продуктом, который был разработан для ис- пользования преимуществ современной техники. Это означает, что он может использовать большие объемы (недорогой) памяти. Более того, при появлении новых верcий MS-DOS, которые позволяют ис- пользовать более 640К памяти, FoxBASE+ сможет использовать и эту возможность. Одним из наилучших способов оптимизировать работу FoxBASE+ является предоставление ему большого объема памяти. Работайте с достаточным местом на диске. На всех компьютерных системах, как крупных, так и мик- ро-компьютерах, скорость ввода/вывода на диск значительно замед- ляется по мере заполнения диска. Это происходит в связи с сокращением свободного объема на диске, при этом процедуры, распределяющие свободные объемы, тре- буют все больше времени на поиск свбодного места на диске. Как и в ситуации с памятью, дисководы для дисков с большим объемом памяти становятся все дешевле. В связи с этим в настоя- щее время редко возникает необходимость работы с силь ограничен- ным объемом дисковой памяти. Используйте возможности "SET TALK OFF" FoxBASE+ может выводить информацию на экран вашего компь- ютера гораздо быстрее, чем dBASE или любой аналогичный пакет. Несмотря на это, FoxBASE+ выполняет другие операции так быстро, что режим SET TALK ON может значительно замедлить его работу. Конечно, степень замедления FoxBASE+ зависит от выполняемой операции и объема выводимой при этом информации. Однако при ра- боте в MS-DOS мы наблюдали ситуации, в которых включение режима TALK замедляло скорость работы в 2-3 раза. Используйте "SET STATUS OFF" Замечания, сделанные выше в отношении режима TALK, относят- ся также и к операциям с базами данных в состоянии SET STATUS ON. Используйте массивы Как вам известно, в FoxBASE+ возможно использование масси- вов переменных памяти. Они могут использоваться во многих ситуа- циях, когда в dBASE используются макрозамены. Если вы можете использовать массив вместо макрозамены, ско- рость работы программы, в которой это сделано, значительно воз- растет. Используйте процедурные файлы FoxBASE+ позволяет объединять в один процедурный файл до 128 отдельных программ. Объединение программ, из которых состоит прикладная система, в один процедурный файл с использованием процедуры foxcomp и команды SET PROCEDURE TO... для выбора этого процедурного файла значительно увеличит скорость выполнения программ. Это связано с двумя основными факторами: * Объединение нескольких программ в процедурный файл значи- тельно сокращает количество файлов в рабочем каталоге. Ре- жим проверки существования файла в каталоге в MS-DOS доста- точно неэффективен. Таким образом использование процедурных файлов увеличивает скорость выполнения всех операций с фай- лами, поскольку при этом сокращается количество ссылок в каталоге, которые MS-DOS должен просмотреть при открытии, переименовании или удалении файлов. * Команда "SET PROCEDURE TO ..." открывает канал в процедур- ный файл, который остается открытым. Поэтому при выполнении программы FoxBASE+, содержащейся в процедурном файле, ко- мандой DO, не возникает необходимости открывать новые файлы или производить поиск в каталоге. Соответственно, программа загружается так же быстро, как одна из служебных программ FoxBASE+. Работайте с компилированными ранее программами Все уже скомпилированные программы выполняются с очень большой скоростью, обычно свойственной FoxBASE+. Однако, т.к. исходные программы (.PRG) динамически компилируются в процессе их загрузки (командой DO), то очевидно, что общая скорость вы- полнения удет уменьшена из-за использования дополнительного вре- мени на загрузку программ .PRG. Более того, компилятор foxpcomp осуществляет более полную оптимизацию своих выходных объъектных программ (.FOX). Поэтому, программы .FOX, скомпилированные ком- пилятором foxpcomp, в целом будут выполняться быстрее, чем если бы они загружались и компилировались "на лету" по команде DO в форме .PRG. 7 Поставка прикладных программ FoxBASE+ _______________________________________________________________ Далее в настоящей главе описан процесс формирования продук- та периода исполнения в FoxBASE+. В этом разделе приведена иноф- рмация о том, что вы имеете право поставлять совместно с вашими прикладными программами. Если вы собираетесь использовать прикладные программы толь- ко на одном компьютере или в одной сети, вы можете пропустить эту главу. 7.1 Версии FoxBASE+ только периода исполнения _______________________________________________________________ Для распространения ваших прикладных программ вы должны сначала купить систему FoxBASE+ только периода исполнения. Сис- тема FoxBASE+ только периода исполнения - это специализировнная версия FoxBASE+, выполняющая только компилированные программы с расширением .FOX. Кроме того, в ней удалены некоторые особеннос- ти, используемые только в интерактивном режиме. Купленная вами система только периода исполнения может быть копируема и распространяема только с компилированными версиями ваших прикладных программ. Без этой системы ваши компилированные программы выполняться не могут. С помощью этой системы ваши пользователи смогут выполнять прикладные программы, не имея ос- новной программы FoxBASE+ или dBASE+, а вы сможете защитить ис- ходный код вашей программы от самовольного распространения, рас- пространяя только компилированные (а возможно, и засекреченные) прикладные программы. Фактическое имя файла FoxBASE+ периода исполнения, который вы будет поставлять совместно с программами, зависит от приобре- тенной вами версии FoxBASE+. В однопользовательской системе MS-DOS соответствующий файл FoxBASE+ имеет имя FOXPRUN.EXE, а в многопользовательской системе MS-DOS MFOXPRUN.EXE для различных сетей PC-DOS. Лицензия на FoxBASE+ периода исполнения принадлежит вам, и на ней стоит серийный номер вашей системы. (Для получения инфор- мации о присвоении уникального номера и ключа активации вашей сисетеме только периода исполнения смотрите раздел об инстолля- ции в главе 2 "Начало работы"). Систему FoxBASE+ только периода исполнения можно распрост- ранять только вместе с вашими прикладными программами. Отдельно модули этой сисетмы распространять нельзя. В вашей организации модули системы FoxBASE+ только периода исполнения могут распространяться беспошлинно. Конечным пользо- вателям из других организаций они могут продаваться вместе с ва- шими прикладными программами, но не могут раздаваться бесплатно. Конечные пользователи ваших прикладных программ, работающих под управлением системы FoxBASE+ только периода исполнения, не могут самостоятельно распространять модули этой системы. _____________________________________________________________ ! Ни при каких обстоятельствах не следует передавать версии ! ! FOXPLUS.EXE, MFOXPLUS.EXE или FOXCOMP.EXE другим поль- ! ! зователям. ! !___________________________________________________________! Имея систему FoxBASE+ только периода исполнения, вы имеете право распространять неограниченное число копий этой системы вместе с вашими прикладными программами, не внося никакой допол- нительной платы фирме Fox Software. Демонстрационные версии Пользователи, желающие распространять демонстрационные вер- сии своих прикладных программ, могут воспользоваться одним из двух подходов. Демонстрационный пакет может включать полностью интерактивную версию, снабженную вашим уникальным серийным номе- ром и ключом активации демонстрационной версии. Это приводит к автоматическому ограничению на размер прикладной программы - не более 120 записей в каждом файле базы данных. Или вы можете соз- дать свою собственную демонстрационную дискету, самостоятельно определив ограничения, и распространять ее вместе с системой FoxBASE+ только периода исполнения. _____________________________________________________________ ! В качестве дополнительного средства защиты исходного кода ! ! мы рекомендуем вам вводить команду SET ECHO OFF в качест-! ! в е первой строки всех ваших прикладных программ, которые ! ! вы собираетесь распространять с версией FoxBASE+ перио-! ! да исполнения. ! !___________________________________________________________! Более подробная информация об использовании версии FoxBASE+ периода исполнения приведена в главе 2 в разделе "Выполнение программ FoxBASE+ в версии FoxBASE+ периода исполнения". 8 Поддержка програмного обеспечения FoxBASE+. _______________________________________________________________ Компания Fox Software, Inc., надеется, что вы не сожалеете о принятом вами решении приобрести FoxBASE+, и что вы продуктив- но используете ее. Мы не только считаем FoxBASE+ лучшей системой управления базой данных, имеющейся в настоящее время, мы поддер- живаем наш программный продукт и готовы помочь вам во всех воз- никших у вас затруднениях. Сотрудники по поддержке систем компании Fox Software, Inc. готовы помочь вам во всех вопросах, которые возникают у вас при работе в FoxBASE+. Мы также ожидаем от вас отзывов и предложений по усовершенствованию будущих версий FoxBASE+. Мы уверяем вас, что все ваши пожелания будут учтены наишм персоналом по систем- ной поддержке. 8.1 Перед тем, как звонить нам... _______________________________________________________________ Существуют несколько типичных вопросов, с которыми пользо- ватели обращаются в Fox Software. В настоящем разделе мы попыта- лись привести ответы на наиболее часто встречающиеся вопросы. Принтер не готов ... Симптомы этой ситуации следующие: При распечатке отчета FoxBASE+ выдает сообщение "Printer not ready" (Принтер не го- тов). Эта ошибка чаще всего происходит при использовании быстро работающего компьютера с медленно работающим принтером. Это означает, что параметр TIME в файле CONFIG.FX/ CONFIG.DB задан слишком малым. Дополнительная информация о параметре TIME приведена в гла- ве 6. Возможность недоступна... Это сообщение об ошибке выводится, когда вы пытаетесь ис- пользовать одну из возможностей, не поддерживаемую FoxBASE+. Од- нако список таких функций постоянно сокращается. Далее приведен список возможностей dBASE III PLUS, которые в настоящее время не поддерживаются: * CREATE/MODIFY QUERY * CREATE/MODIFY SCREEN - Она заменена значительно более мощным генератором экранов Fox View. * CATALOG * IMPORT/EXPORT Поддержка файлов в форматах .DIF, .SYLK и .WKS в командах COPY и APPEND. (Конечно, форматы SDF и с ограни- чителями полностью поддерживаются командами COPY и APPEND). 8.2 Анализ _______________________________________________________________ Для того, чтобы помочь нам в разрешении ваших проблем, воз- никших при работе в FoxBASE+, просим вас выполнить описанную ни- же последовательность действий: * Проверили ли вы по руководству свои действия? * Отвечает ли ваш компьютер специальным требованиям к аппара- туре? * Проводили ли вы установку FoxBASE+ с использованием соответ- ствующих значений номера и ключа активации? Внимательно ли вы ввели нужные значения, соответствующие напечатанному об- разцу, соблюдая точное использование прописных и строчных букв? Замечание: Если вы используете версию FoxBASE+ периода исполнения, в ваш комплект будут влючены отдельно номер и ключ активации. Обратитесь к разделу "установка FoxBASE+" в главе 2 для проверки предпринятых шагов по инстоляции конфи- гурации ситстемы * Проверили ли вы файл CONFIG.FX/CONFIG.DB? * Модифицировали ли вы файл CONFIG.SYS? Превышает ли значение параметра FILES в файле MS DOS CONFIG.SYS значение параметра FILES в файле FoxBASE+ CONFIG.FX/DB хотя бы на 10? * Многопользовательская система - Работаете ли вы с версией DOS 3.10 или выше? Поддерживает ли ваша сет стандартный NETBIOS интерфейс? * Многопользовательская система - Заданы ли соответствующим образом разрешения чтения/записи? * Многопользовательская система - На отдельно работающем ком- пютере все время параметр EXCLUSIVE должен быть SET ON, или должна быть загружена программа DOS SHARE. Чтобы избежать уменьшения скорости работы во всех случаях устанавливайте SET EXCLUSIVE ON. Программа DOS SHARE в данной конфигурации будет снижать скорост. * Правилен ли синтаксис соответствующей команды или функции? Проверьте по главам 4 и 5. * Компилировали ли вы программный файл после последней коррек- ции? * Обратитесь к поставщику FoxBASE+. Если вам необходима помощь после выполнения перечисленых выше шагов, звоните в группу поддержки программного обеспечения Fox Software по телефону (419) 874-0162. * Подготовьтесь отвечать на вопросы в отношении файла CONFIG.FX. _____________________________________________________________ ! Если вы обращаетесь в Fox Software за технической по- ! ! мощью, вы должны сообщить соответствующий номер продукта. ! ! Кроме того, вы должны зарегистрировать приобретенный па- ! ! кет в течение 45 дней со дня покупки. Если регистрация не ! ! была выполнена в этот период, мы не сможем обеспечить вам ! ! техническую помощь до получения фирмой данных о регистра- ! ! ции. Если у вас возникает потребность в помощи в течение ! ! первых 45 дней владения пакетом, будьте готовы сообщить ! ! источник приобретения пакета. ! !___________________________________________________________! Техническая помощь предоставляется с понедельника по пятни- цу с 8:30 до 17:00 среднеевропейского времени. Укажите, в какой помощи вы нуждаетесь и сообщите вид продукта, в отношении кото- рого вам необходима помощь (напр. многопользовательская система FoxBASE+, однопользовательская система FoxBASE+). Если вы обращаетесь в Fox Software за технической помощью, а все специалисты заняты выполнением других вызовов, ваш запрос будет занесен в очередь запросов. По нашим правилам, чем раньше поступил запрос, тем быстрее предоставляется обслуживание. Мы гордимся нашим техническим обслуживанием и отвечаем на звонки как можно быстрее, обычно в течение одного или двух часов. Наиболее напряженный период с 11:00 до 16:00 среднеевропей- ского времени, поэтому лучшим временем подачи заявки является время до 10:00. Если вы думаете, что ваш вопрос связан с проблемами прог- раммного обеспечения FoxBASE+, или у вас есть предложение по усовершенствованию FoxBASE+, мы попросим вас заполнить бланк программной поддержки для последующего анализа нашим техническим персоналом. 8.3 Бланки программной поддержки _______________________________________________________________ На следующих страницах приведены несколько бланков програм- мной поддержки(SSF). В этих бланках следует просто вносить соот- ветствующую информацию в указанное место бланка. В разделе, где должно быть приведено общее описание вопроса наряду с его под- робным описанием, просим вас записать подробнейшим образом ваше объяснение возникшей ситуации. Далее, необходимо привести под- робное описание ситуации для того, чтобы мы смогли смоделировать возникшую ситуацию. Мы работаем только с теми бланками (SSF), в которых содер- жится только один вопрос или предложение по усовершенствование. Поэтому, вам возможно захочется сделать дополнительные копии этих бланков для поддержания дальнейшей связи с нами. Если ваш вопрос включает много программных строк, пожалуйста, приложите к бланку дискету с исходным текстом, файлами данных и остальными файлами, необходимыми для оценки ситуации. Пожалуйста, наклейте на дискету этикетку с именем вашей компании и телефоном. Заполненный бланк SSF и все дополнительные материалы должны быть отправлены группе системной поддержки компании Fox Software, Inc. по следующему адресу: Fox Software, Inc Systems Support Group 27475 Holiday Lane Perrysburg, OH 43551 На обороте бланка поместите подробное описание и пример проблемы. Пожалуйта, помещайте на каждом бланке только один воп- рос. . ш1.0 Fox Software, Inc FoxBASE+ Software Support Form /Бланк системной поддержки FoxBASE+/ --------------------------------------------------------------- Фамилия _______________________________________________ Компания _______________________________________________ Адрес _______________________________________________ _______________________________________________ _______________________________________________ Телефон _______________________________________________ Конфигурация: Версия FoxBASE+________________ Лицензия # __________________ Операционная система __________ Версия _____________________ Тип и модель процессора _______________________________________ Объем памяти __________________________________________________ Сеть __________________________ Версия сети _________________ Значения параметров конфигурации: BUCKET_____ MVARSIZ______ MVCOUNT _________ TALK ________ SCOREBOARD________STATUS______ ESCAPE ___________ Приложения:[] гибкий диск [] информация с консоли [] текст программы [] дополнительные замечания [] дополнительно Тип проблемы: [] Несовместимость с dBASE III PLUS версия ___ [] Запрос на изменение или модержнизацию [] Проблема (повреждение или потеря данных) [] Ошибка - программа дает неверные результаты [] Невозможность работы [] Работа возможна Краткое описание проблемы: ____________________________________ _______________________________________________________________ --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- . Fox Software, Inc FoxBASE+ Software Support Form /Бланк системной поддержки FoxBASE+/ --------------------------------------------------------------- Фамилия _______________________________________________ Компания _______________________________________________ Адрес _______________________________________________ _______________________________________________ _______________________________________________ Телефон _______________________________________________ Конфигурация: Версия FoxBASE+________________ Лицензия # __________________ Операционная система __________ Версия _____________________ Тип и модель процессора _______________________________________ Объем памяти __________________________________________________ Сеть __________________________ Версия сети _________________ Значения параметров конфигурации: BUCKET_____ MVARSIZ______ MVCOUNT _________ TALK ________ SCOREBOARD________STATUS______ ESCAPE ___________ Приложения:[] гибкий диск [] информация с консоли [] текст программы [] дополнительные замечания [] дополнительно Тип проблемы: [] Несовместимость с dBASE III PLUS версия ___ [] Запрос на изменение или модержнизацию [] Проблема (повреждение или потеря данных) [] Ошибка - программа дает неверные результаты [] Невозможность работы [] Работа возможна Краткое описание проблемы: ____________________________________ _______________________________________________________________ --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- . Fox Software, Inc FoxBASE+ Software Support Form /Бланк системной поддержки FoxBASE+/ --------------------------------------------------------------- Фамилия _______________________________________________ Компания _______________________________________________ Адрес _______________________________________________ _______________________________________________ _______________________________________________ Телефон _______________________________________________ Конфигурация: Версия FoxBASE+________________ Лицензия # __________________ Операционная система __________ Версия _____________________ Тип и модель процессора _______________________________________ Объем памяти __________________________________________________ Сеть __________________________ Версия сети _________________ Значения параметров конфигурации: BUCKET_____ MVARSIZ______ MVCOUNT _________ TALK ________ SCOREBOARD________STATUS______ ESCAPE ___________ Приложения:[] гибкий диск [] информация с консоли [] текст программы [] дополнительные замечания [] дополнительно Тип проблемы: [] Несовместимость с dBASE III PLUS версия ___ [] Запрос на изменение или модержнизацию [] Проблема (повреждение или потеря данных) [] Ошибка - программа дает неверные результаты [] Невозможность работы [] Работа возможна Краткое описание проблемы: ____________________________________ _______________________________________________________________ --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- --------------------------------------------------------------- . ш1.5 9 Многопользовательская система FoxBASE+ _______________________________________________________________ Многопользовательская система FoxBASE+ сохраняет все воз- можности, имеющиеся в однопользовательской системе FoxBASE+ для операционной системы MS/PC DOS и дополнительно предоставляет возможность доступа и последующего редактирования файлов данных общего пользования. Все версии FoxBASE+ поддерживают многополь- зовательский синтаксис с тем, чтобы многопользовательские прог- раммы могли работать в однопользовательском варианте. В настоящей главе предоставлена информация о возможностях и функциях, реализованных в многопользовательской системе FoxBASE+. Информация о различных типах сетей, поддерживаемых FoxBASE+ (например, Novell) не включена в настоящее описание. Если у вас возникли вопросы в отношении максимально возможного количества пользователей, минимально необходимого объема памяти или дополнительного оборудования, необходимого для функциониро- вания таких систем, вам следует обратиться к документации по со- ответствующей системе. Кроме того, у вас может возникнуть необходимость обратиться к разделам "Команды" и "Функции" руководства для получения ин- формации о синтаксисе и работе команд и функций FoxBASE+. 9.1 Системные требования _______________________________________________________________ Аппаратура Ниже приведены минимальные требования к аппаратуре для ра- боты FoxBASE+. Просим вас иметь в виду, что ваш выбор многополь- зовательской операционной системы и типа сети может продиктовать дополнительные требования к аппаратуре. В отношении требований к аппаратуре вам следует обратиться к документации по соответству- ющему программному обеспечению. * Компьютер, поддерживающий FoxBASE+ * По крайней мере 360 Кбайт свободной памяти Дополнительная информация по этому вопросу приведена в гла- ве 1 в разделе "Требования к аппаратуре". Программное обеспечение Требуется программное обеспечение сети, которое поддержива- ет стандартный интерфейс NETBIOS и совместимо с DOS 3.1. В боль- шинстве случаев имеющиеся сетевые системы удовлетворяют этим требованиям, включая и систему Novell Advanced NetWare (версия 1.02 или выше) и программу IBM PC NetWork. FoxBASE+ также предоставляет пользователям Novell Advanced Netware версии 2.00 и выше средства более удобного управления принтерами и очередями. Перед началом работы _______________________________________________________________ В данном разделе приведена специфическая информация о мно- гопользовательской системе FoxBASE+. Информацию о номере и про- цедуре установки вашей системы FoxBASE+, компиляции программных файлов, выполнении программ FoxBASE+ и другую, относящуюся к FoxBASE+, вы можете найти в главе 2, "Начало работы". Совместимость многопользовательской системы FoxBASE+ Многопользовательская система FoxBASE+ совместима по син- таксису и семантике с программой Administrator dBASE III PLUS. Программы, которые работают под управлением dBASE III PLUS Administrator, будут также правильно работать в многопользова- тельской системе FoxBASE+. Существуют однако несколько областей, в которых многополь- зовательская система FoxBASE+ предоставляет более широкие воз- можности, чем dBASE III PLUS Administrator. Основной областью расширения возможностей являются опера- ции, требующие доступа только для чтения баз данных. В общем случае, при операциях чтения базы данных без внесения изменений запирания баз данных не производится. Например, в dBASE III PLUS REPORT FORM не будет работать с базой данных, если другой пользователь запер хотя бы одну за- пись. В многопользовательской системе FoxBASE+ REPORT FORM смо- жет работать с базой данных в том случае, если другой пользова- тель запер одну запись файла или даже весь файл. Тот же подход используется и в других аналогичных операциях, например TOTAL, SUM, SORT, и т.д. Это позволяет пользователям более жестко контролировать свои прикладные программы. Конечно в ситуациях, когда необходима самая последняя информация (например, общий отчет по учетным книгам и т.д.) придется запирать базу данных, по которой форми- руется отчет. _____________________________________________________________ ! Во избежания повреждения данных не допускайте исполь- ! ! зоание dBASE III PLUS LAN PACK совместно с FoxBASE+. ! !___________________________________________________________! Расширения многопользовательской системы FoxBASE+ FoxBASE+ предоставляет несколько дополнительных возможнос- тей по отношению к dBASE III PLUS Administrator. К ним относят- ся: * Функция SYS, описанная в разделе "Функции" данной главы. Эта возможность предоставляет разработчикам дополнительную воз- можность доступа к основным параметрам системы, которые по- могут эффективно и полностью использовать многопользователь- скую систему. * Пользователям сети Novell Advanced Netware версии 2.00 и вы- ше предоставляется возможность более гибкого управления принтерами и очередями. Существует возможность контроля фор- матов, количества копий, управления флагом заголовка страни- цы, и т.д. при выводе отчетов из FoxBASE+. Неподдерживаемые возможности Исходная версия многопользовательской системы FoxBASE+ не влкючает в себя возможностей по поддержке следующих процедур программы dBASE III PLUS Administrator. * Кодирование файлов * Другие возможности команды PROTECT * LIST/DISPLAY USERS Работа в многопользовательской системе FoxBASE+ Далее подразумевается, что вы установили свою сеть в соот- ветствии с инструкциями, приведенными в документации по вашей сети. - Если это требуется вашей сетью, загрузите команду DOS SHARE. - Запустите сеть в соответствии с инструкцией, приведенной в документации по сети. - Введите команду MFOXPLUS или MFOXPRUN как это описано в главе 2 настоящего руководства. 9.3 Глоссарий _______________________________________________________________ Для облегчения восприятия описания возможностей многополь- зовательской системы FoxBASE+, мы привели определения терминов, которые будут использоваться в данном разделе описания. Автоматическое запирание файлов (Automatic file locking) Механизм, посредством которого файл может быть автоматичес- ки заперт при вводе определенных команд. После завершения выпол- нения команды файл отпирается. Кроме того упоминается при кос- венном запирании файлов. Автоматическое запирание записей (Automatic record locking) Механизм, посредством которого запись может быть автомати- чески заперта при вводе определенных команд. После завершения выполнения команды запись отпирается. Кроме того упоминается при косвенном запирании записей. Конфликт (Collision) Ситуация, возникающая при попытке пользователя использовать запись, которая в текущий момент используется другим пользовате- лем. Когда это происходит, может произойти повреждение данных, если несколько пользователей собираются корректировать запись. Многопользовательская система FoxBASE+ предоставляет полную за- щиту от повреждения данных в таких ситуациях посредством исполь- зования возможностей запирания записей и файлов. Глухой замок (Deadly embrace) Ситуация, возникающая, когда один пользователь запер запись и хочет использовать другую запись, которая заперта другим поль- зователем, который, в свою очередь хочет использовать запись, запертую первым пользователем. Такие случаи редки, но их вероят- ность возрастает по мере увеличения периода, в течение которого запись находится в запертом состоянии. Исключительное использование (Exclusive use) Если пользователь открывает файл для исключительного ис- пользования, другие пользователи не могут использовать этот файл; ни чтение, ни запись не разрешены. Хотя некоторые много- пользовательские операции требуют исключительного использования баз данных, в общем случае необходимо осторожно относиться к ис- пользованию этого режима, поскольку это связано с введением ог- раничений для других пользователей. Запирание файла (File Locking) Механизм, посредством которого пользователь запрещает дру- гим пользователям изменять (но не считываить) записи в файле ба- зы данных. Запирание файлов предотвращает повреждение данных, которое может произойти в случае, если один пользователь вносит изменения в одну или несколько записей в файле в тот момент, когда другой пользователь требует исключительного доступа для корректировки этого же файла. Помните, что ограничения для дру- гих пользователей доступа к записям в общем случае снижает эф- фективность работы. Из этого правила, однако, существуют исклю- чения. Например, при выполнении общей корректировки файла базы данных он должен быть заперт. Косвенное запирание файла (Implicit File Locking) Смотрите "Автоматическое запирание файлов". Косвенное запирание записи (Implicit Record Locking) Смотрите "Автоматическое запирание записей". Многопользовательская среда Рабочая среда, основанная на сочетании многопользователь- ской аппаратуры и программного обеспечения, которая обеспечивает двум или более пользователям возможность одновременно использо- вать файлы данных и периферийные устройства. Запирание записи (Record Locking) Механизм, посредством которого пользователь лишается воз- можности изменения записи (дополнение или корректирование записи в файле базы данных), которая в текущий момент корректируется другим пользователем. Запирание записей предотвращает поврежде- ние данных, которое может произойти в случае, если один пользо- ватель вносит изменения в запись в тот момент, когда другой пользователь требует исключительного доступа для корректировки этой же записи. 9.4 Многопользвательское программирование _______________________________________________________________ Наиболее очевидным и важным отличием между хорошими одно- и многопользовательскими программами является предоставление воз- можности нескольки пользователям одновременно работать с базами данных и разрешение неизбежных в таких случаях конфликтов. При этом обычно в программу требуется вносить не очень большие изме- нения. _____________________________________________________________ ! Необходимо предусматривать во всех программах, которые не ! ! используют базы данных в исключительном режиме, средства ! ! разрешения конфликтов. ! !___________________________________________________________! Требования к общему доступу Многие команды FoxBASE+ подразумевают в процессе выполнения исключительное использование всей базы данных или ее части. К таким командам относятся все команды, способные вносить измене- ния в базу данных или ее часть, они требуют при этом исключи- тельного доступа к изменяемой части базы данных. Исключительный доступ может быть организован тремя способами: * открыть базу данных с исключительным доступом, * предоставить командам, которые на это способны, автоматически запирать соответствующие области базы данных, * вручную запереть области базы данных в вашей программе с использованием команд и функций, существующих для этой цели. Если вы выберете любой из первых двух способов, в вашей программе должна быть предусмотрена процедура ON ERROR для раз- решения конфликтов, которые могут возникнуть, если два пользова- теля работают одновременно. Если вы выберете третий вариант, вам следует внести изменения в свои программы для использования ко- манд запирания, описанных далее. Исключительное использование базы данных База данных открыта для исключительного использования, ес- ли: - установлено состояние EXCLUSIVE ON при первом занесении базы данных в область USE, или - путем использования ключевого слова EXCLUSIVE при занесении файла в область USE: USE <имя файла> EXCLUSIVE Если файл был открыт в режиме исключительного использова- ния, другие пользователи не смогут использовать этот файл. Отк- рытие файла в режиме исключительного использования является единственным способом предотвратить доступ для чтения базы дан- ных других пользователей. Запирание базы данных при помощи функ- ции FLOCK() не помешает многочисленным пользователям читать за- писи. База данных не может быть открыта в режиме исключительного использования, если она уже открыта другим пользователем. Если база данных не может быть открыта в режиме исключительного ис- пользования, выводится сообщение об ошибке: File is in use by another /Файл используется другим/. Операции, требующие исключительного открытия баз данных Некоторые команды требуют, чтобы база данных использовалась в исключительном режиме. К таким командам относятся: * INSERT [BLANK] * MODIFY STRUCTURE * PACK * REINDEX * ZAP Если предпринимается попытка выполнить какую-либо из этих команд не в режиме исключительного использования файла базы дан- ных, выводится сообщение об ошибке: Exclusive open file is required /Требуется файл открытый для исключительного использо- вания/. Операции с автоматическим запиранием. Следующие команды выполняют автоматическое запирание облас- ти базы данных, на которую она воздействует, если эта область еще не заперта или если база данных не была открыта в режиме ис- ключительного использования. Если вы не запираете вручную, вы должны предусмотреть в своей программе процедуру ON ERROR для обработки конфликтов, которые могут возникнуть при использовании таких команд. Если файл не был открыт в режиме исключительно использова- ния или заперт функцией FLOCK(), команды из приведенного ниже списка автоматически запрут весь файл при выполнении. * APPEND * APPEND FROM * BROWSE * DELETE <диапазон> * INDEX * JOIN * RECALL <диапазон> * REPLACE <диапазон> * UPDATE Обратите внимание, что команды DELETE, RECALL и REPLACE с указанием диапазона запирают всю базу данных, в отличие от тех же команд с указанием параметров NEXT 1 или RECORD. Если база данных или запись в базе данных уже заперты другим пользовате- лем, приведенные выше команды не смогут быть выполнены. Если файл не может быть заперт, выводится сообщение об ошибке: File is in use by another /файл испльзуется другим/. После завершения выполнения соответствующей команды файл отпирается. --------------------------------------------- |Команда Что запирается | --------------------------------------------- |APPEND База данных | |APPEND BLANK Заголовок базы данных| |APPEND FROM База данных | |BROWSE База данных | |DELETE Текущая запись | |DELETE NEXT 1 Текущая запись | |DELETE База данных | |DELETE RECORD Запись | |INDEX База данных | |JOIN База данных | |RECALL Текущая запись | |RECALL NEXT 1 Текущая запись | |RECALL База данных | |RECALL RECORD Запись | |REPLACE NEXT 1 Текущая запись | |REPLACE База данных | |REPLACE RECORD Запись | |UPDATE База данных | --------------------------------------------- Если запись не закрыта непосредственно при помощи одной из команд запирания, команды DELETE, RECALL и REPLACE с указанием диапазона NEXT 1 или RECORD автоматически запирают эту за- пись. Кроме того команды DELETE и RECALL без указания диапазона автоматически запирают текущую запись. После завершения операции запирание записи отменяется. Если операция не может быть выпол- нена в связи с тем, что другой пользователь запер файл или за- пись, выводится сообщение об ошибке: Record is in use by another/Запись используется другим/. Команда APPEND BLANK автоматически запирает дополняемую за- пись и заголовок файла. В связи с этим необходимо отедльно расс- мотреть команду APPEND BLANK. При выполнении команды APPEND BLANK с файлом могут без конфликтов работать и другие пользова- тели. Однако если при этом другой пользователь также использует команду APPEND BLANK, будет выведено сообщение об ошибке. Необ- ходимо обработать эту ошибку или использовать функцию FLOCK() для запирания всей базы данных. Ошибка, которая выводится, если два пользователя пытаются одновременно выполнить команду APPEND BLANK, сопровождается выводом сообщения: File is in use by another/Файл используется другим/. В качестве примера приведена программа, которая обрабатывает ошибки при возникновении конфликтов. Пример программы: *** ***Test.prg демонстрирует обработку ошибок для команды ***APPEND BLANK *** ON ERRROR DO Fix USE Video APPEND BLANK ON ERROR *** ***Fix.prg процедура ошибки для программы Test.prg *** IF ERROR() = 108 @ 23,0 SAY "PLEASE WAIT TO APPEND A RECORD." RETRY ELSE @ 23,0 SAY "PLEASE SEE YOUR SYSTEM ADMINISTRATOR ABOUT; THIS ERROR" +MESSAGE() WAIT ENDIF Функции для прямого запирания В многопользовательской системе FoxBASE+ существуют три функции для запирания. Функция FLOCK() используется для запира- ния файла, а функции RLOCK() и LOCK() используются для запирания записи. Функции RLOCK() и LOCK() работают аналогичным образом. Для отмены запирания файла или записи существуют две команды. Команда UNLOCK отменяет текущее сотояние "заперто" в активном файле базы данных. Команда UNLOCK ALL отменяет все режимы "за- перто" во всех записях и файлах во всех рабочих областях. Более подробное описание команд и функций запирания и отпирания приве- дено в разделах "Команды" и "Функции" настоящей главы. Функции запирания работают следующим образом: * Проверяется статус запирания записи или файла. * Открытая запись или файл запираются. * Выводится лонгическое значение, зависящее от результата проверки статуса запирания. Функции запирания могут быть использованы от точечной подс- казки для проверки доступности записи или файла. Например: *.SET EXCLUSIVE OFF *.USE Video *.? FLOCK() *.T. Поскольку файл мог быть заперт, он был заперт и было выве- дено логическое значение .T. Однако если бы в файле была запер- тая запись или весь файл был заперт другим пользователем, выпол- нить запиранине файла было бы невозможно и было бы выведено ло- гическое значение .F. Вот более полезный пример: SET EXCLUSIVE OFF USE Video IF FLOCK() REPLACE ALL Cost_rent WITH Cost_rent + 1.00 UNLOCK ELSE @ 22,0 SAY "File in use by another." ENDIF В приведенном выше примере база данных Video открывается для общего доступа. Функция FLOCK() комбинируется со структурной командой IF...ELSE...ENDIF для определения статуса запирания. Если файл может быть заперт, поскольку никакие другие пользова- тели не запирали его, выполняется команда REPLACE ALL. После за- вершения операции REPLACE ALL вводится команда UNLOCK для отмены запирания файла. Если файл не может быть заперт в связи с тем, что он уже заперт другим пользователем, запирание не выполняется и выводится соответствующее сообщение. Помните, что функции за- пирания выводят логическое значение и не могут быть использованы с оператором сравнения (>, < и т.д.). Существуют две команды, которые требуют, чтобы запись была непосредственно закрыта. Это команда REPLACE без указания диапа- зона и команда READ. Эти команды не могут быть выполнены, если запись или файл не закрыты непосредственно при помощи функций LOCK(), RLOCK() или FLOCK(). Кроме того, эти команды могут быть выполнены с файлом, который открыт для работы в исключительном режиме. Попытка выполнения этих команд с незапертыми записями или файлом приводит к выводу сообщения о следующей ошибке: Record is not locked (Запись не заперта). Функции без запирания Команды, которые только читают базу данных, не требуют, чтобы база данных или отдельные записи были заперты. Выбор режи- ма предоставляется разработчику. Хотя при разработке системы это может потребовать дополнительного анализа, полученная в резуль- тате гибкость вполне оправдывает дополнительные затраты. _____________________________________________________________ ! При этом, если выполняемая операция требует последней ! ! версии данных, другие пользователи должны быть лишены ! ! права записи в файл путем открытия его в режиме исключи- ! ! тельного использования или путем запирания файла. ! !___________________________________________________________! * AVERAGE * COPY * COUNT * COPY STRUCTURE * DISPLAY * LABEL * LIST * LOCATE * REPORT * SORT * SUM * TOTAL 9.5 Процедуры "ON ERROR" _______________________________________________________________ Если файл базы данных не был открыт с исключительным стату- сом EXCLUSIVELY или заперт при помощи одной из функций для пря- мого запирания, любая команда, которая автоматически запирает файл или требует статуса файла базы данных EXCLUSIVE потенциаль- но может вызвать ошибку. В режиме точечной подсказки эти ошибки могут быть достаточно просто обработаны вручную. Однако, если в вашей прикладной программе используются эти команды, вам прий- дется применять процедуру ON ERROR для обработки таких ошибок. Ниже приведен пример простой процедуры обработки ошибок. **** ****Программа: MULTI.PRG ****Этот сегмент программы демонстрирует использование ****ON ERROR для обработки ошибок, вызванных конфликтами в ****многопользовательской системе FoxBASE+ **** SET PROCEDURE TO Multi ON ERROR DO Err_fix WITH ERROR(),MESSAGE(),SYS(16) SET EXCLUSIVE OFF USE Video DO App_blank DO Rep_next DO Rep_all DO Rep_curr DO Add_recs SET PROCEDURE TO ON ERROR PROCEDURE App_blank ****Добавить пустую запись APPEND BLANK PROCEDURE Rep_next ****Заменить данные в текущей записи(диапазон-следующая запись) REPLACE NEXT 1 Cost_rent WITH Cost_rent + .25 PROCEDURE Rep_all ****Заменить данные во всех записях REPLACE ALL Cost_rent WITH Cost_rent + .25 UNLOCK PROCEDURE Rep_curr ****Заменить данные в текущей записи (диапазон отсутствует) REPLACE Cost_rent WITH Cost_rent + .25 PROCEDURE Add_recs ****Ввести записи из другого файла APPEND FROM New_vids UNLOCK **** ****Программа: Err_fix.prg ****Эта программа вызывается при обнаружении ошибки **** PARAMETERS Errnum,Mess,Curr_prg ****Ошибка:файл используется другим IF Errnum=108 IF Curr_prg="C:APP_BLANK.PRG" @ 23,0 SAY "Please wait to append a blank record." RETRY ENDIF IF Curr_prg="C:REP_ALL.PRG" .or. Curr_prg="C:Add_recs.PRG" TIME = 0 @ 23,0 SAY Mess DO WHILE .NOT. FLOCK() .OR. TIME < 1000 TIME = TIME + 1 ENDDO IF TIME < 1000 @ 23,0 CLEAR RETRY ELSE @ 23,0 SAY "File cannot be locked. Try again later" ENDIF ENDIF ENDIF errnum=108 ****Ошибка:запись используется другим IF Errnum=109 .and. Curr_prg="C:REP_NEXT.PRG" TIME=0 @ 23,0 SAY Mess DO WHILE .NOT. RLOCK() .or. TIME < 1000 TIME = TIME + 1 ENDDO IF TIME < 1000 @ 23,0 CLEAR RETRY ELSE @ 23,0 SAY "Record cannot be locked. Try again later" ENDIF ENDIF errnum=109 ****Ошибка:запись не заперта IF Errnum=130 .and. Curr_prg="C:REP_NEXT.PRG" TIME=0 @ 23,0 SAY Mess DO WHILE .NOT. RLOCK() .or. TIME < 1000 TIME = TIME + 1 ENDDO IF TIME < 1000 @ 23,0 CLEAR RETRY ELSE @ 23,0 SAY "Record cannot be locked. Try again later" ENDIF ENDIF errnum=130 9.6 Многопользовательские команды _______________________________________________________________ В данном разделе описаны команды FoxBASE+, используемые в многопользовательском режиме. В описание каждой команды включен формат этой команды и описание ее работы. Некоторые из приведенных команд используются только в мно- гопользовательском режиме, другие команды могут использоваться как в много-, так и в однопользовательском режимах. Однако все версии FoxBASE+ поддерживают синтаксис команд, специфических для многопользовательского режима; в связи с этим программный много- пользовательский код достаточно просто переносим в любую среду FoxBASE+. CHANGE Эта команда обеспечивает выполнение полноэкранного редакти- рования указанных полей в текущей базе данных. Команда CHANGE работает аналогично команде EDIT. Если вы хотите использовать команду CHANGE в отношении фай- ла общего пользования, запись должна быть заперта посредством нажатия CTRL-O перед вводом данных. Доплонительная информация по этому вопросу приведена в опи- саниях команд CHANGE и EDIT в главе "Команды". DISPLAY STATUS Эта команда позволяет получить информацию о статусе в теку- щем сеансе работы в FoxBASE+. При этом и в многопользовательской и в однопользовательской среде выводится много полезной информа- ции. В многопользовательской среде дополнительно выводятся сле- дующие параметры: * Статус запирания для каждого из открытых файлов базы данных * Список закрытых в текущий момент записей в каждом файле базы данных. Дополнительная информация по этому вопросу приведена в опи- сании команды DISPLAY STATUS в главе "Команды". EDIT EDIT это полноэкранная команда, которая позволяет вам ре- дактировать содержание отдельных записей в активном файле базы данных. Команда EDIT работает аналогично команде CHANGE. Если вы хотите использовать команду EDIT в отношении файла общего пользования, запись должна быть заперта посредством нажа- тия CTRL-O перед вводом данных. Дополнительная информация по этому вопросу приведена в опи- саниях команд CHANGE и EDIT в главе "Команды". LIST STATUS Эта команда позволяет получить информацию о статусе в теку- щем сеансе работы в FoxBASE+. При этом и в многопользовательской и в однопользовательской среде выводится много полезной информа- ции. В многопользовательской среде дополнительно выводятся сле- дующие параметры: * Статус запирания для каждого из открытых файлов базы данных * Список закрытых в текущий момент записей в каждом файле базы данных. Дополнительная информация по этому вопросу приведена в опи- сании команды LIST STATUS в главе "Команды". RETRY Команда RETRY передает управление вызвавшей программе. Пос- ледняя строка, выполненная в вызвавшей программе, выполняется повторно. Команда RETRY аналогично команде RETURN с тем отличи- ем, что в случае команды RETURN выполняется следующая строка вызвавшей программы, а не повторяется выполнение последней ис- полненной, как в команде RETRY. Команда RETRY может быть использована в случае, если необ- ходимо выполнять некоторую последовательность команд до тех пор, пока не будет выполнено некоторое условие. В многопользователь- ском программировании команда RETRY может быть использована при обработке ошибок для повторения выполнения команды до тех пор, пока запись или файл не станут доступны и команда сможет быть выполнена. Обязательно введите в программу обработки ошибок воз- можность для пользователя прекратить работу во избежание ситуа- ции глухого замка. Дополнительная информация о команде RETRY приведена в главе "Команды". SET Команда SET это управляемая меню команда, которая позволяет выводить и изменять значения, установленные для различных пара- метров команды SET. Дополнительная информация по этому вопросу приведена в опи- сании команды SET в главе "Команды". SET EXCLUSIVE Команда SET EXCLUSIVE позволяет вам задать статус совмест- ного использования для открытых файлов баз данных. В состоянии SET EXCLUSIVE ON никакой другой пользователь не может работать с используемыми вами файлами базы данных. В сос- тоянии SET EXCLUSIVE OFF все открываемые файлы баз данных могут использоваться многими пользователями. _____________________________________________________________ ! Изменение состояния команды EXCLUSIVE не влияет на состо- ! ! яние ранее открытых баз данных. ! !___________________________________________________________! SET PRINTER Формат 1: SET PRINTER TO [\\<имя компьютера>\<имя принтера>=<приемник>] Формат 2: SET PRINTER TO [\\SPOOLER[\] [\F=][\B=][\C=][\P=]] Формат 3: SET PRINTER TO [<устройство/файл>] Вывод FoxBASE+ на принтер переадресуется на сетевое или ло- кальное устройство в соответствии с выбранным форматом команды SET PRINTER. Устройством печати по умолчанию является устройство DOS PRN. Кроме того, формат 3 предоставляет возможность занесе- ния в файл. После ввода команды SET PRINTER печать выводимых файлов или их сбор в определенный файл спулинга продолжается до ввода другой команда SET PRINTER. Команда SET PRINTER без пара- метров возвращает назначение устройства печати по умолчанию (PRN в MS/DOS). В формате 1 принтером назначается принтер сети. <имя компь- ютера> это сетевое имя, назначенное станции. Это имя назначается администратором сети и должно быть уникальным. Имя принтера это имя, назначенное для принтера, оно также назначается администра- тором сети. LPT1, LPT2 или LPT3 используются для обозначения установ- ленного принтера. Формат 2 предназначен для печати в системе Novell Advanced Netware версии 2.00 и выше. Параметр "SPOOLER" должен быть ука- зан для совместимости, но игнорируется. Параметры для этого фор- мата приведены ниже: NB Без титула. Подавляет печать титульной страницы. F=n Форматы. Это позволяет назначать печатаемым файлам различные форматы. Разрешенный диапазон значений от 0 до 255. Эта возможность может быть использована на принтерах, используемых для печати различных финанстовых документов, напр. чеков, счетов, писем. B=c Имя титула. Эта возможность устанавливает заголовок на титульной странице, как строку символов ASCII длиной 12 символов. Заголовок по умолчанию это имя пользователя. C=n Количество копий. Этот параметр может иметь значение в диапазоне от 1 до 255. По умолчанию установлен один экземпляр. P=n Номер принтера. Эта возможность позволяет выбрать определенный принтер сети, на котором будет выполнен вывод. По умолчанию 0. Формат 3 используется для назначения принтером локального устройтсва или файла. Более подробная информация приведена в описании команды SET PRINTER в главе 4. SET STATUS Если установлено SET STATUS ON, на строке статуса будут вы- водиться в соответствии с операцией сообщения "Exclusive Use", "File Locked", "Read Only", "Record Locked", "Record Unlocked" /Исключительное использование, Файл заперт, Только для чтения, Запись заперта, Запись отперта/. Дополнительная информация приведена в разделе "Команды" в описаниях команд SET STATUS и SET SCOREBOARD. UNLOCK Команда UNLOCK позволяет вам отменить состояние запирания для всех записей и/или файлов активной базы данных. Текущие сос- тояниями запирания записей определяются последними использован- ными функциями FLOCK(), LOCK() или RLOCK() в отношении файла ба- зы данных в используемой в текущий момент рабочей области. Команда UNLOCK ALL отменяет все состояния запирания всех записей и файлов во всех рабочих областях. USE EXCLUSIVE Команда USE EXCLUSIVE открывает базу данных и связанные с ней файлы для использования в исключительном режиме. Дополнительная информация приведена в описании команды USE в главе "Команды". 9.7 Многопользовательские функции _______________________________________________________________ В данном разделе описаны функции FoxBASE+, работающие в многопользовательской конфигурации. В описание каждой функции включен формат этой фукцнии и описание ее работы. Некоторые из приведенных команд используются только в мно- гопользовательском режиме, другие функции могут использоваться как в много-, так и в однопользовательском режимах. Однако все версии FoxBASE+ поддерживают синтаксис функций, специфических для многопользовательского режима; в связи с этим программный многопользовательский код достаточно просто переносим в любую среду FoxBASE+. ERROR Функция ERROR выводит число, которое соответствует ошибке, вызвавшей условие ON ERROR. Эта функция может быть использована в многопользовательской конфигурации для определения причины исправимой ошибки, как нап- ример, неудавшаяся попытка запирания. FLOCK При обнаружении функции FLOCK() FoxBASE+ предпринимает по- пытку запереть весь выбранный файл базы данных. Если попытка запереть файл успешно выполняется, функция FLOCK() выводит логическое значение .T., и вам предоставляется доступ для чтения и записи во все записи файла базы данных в ис- ключительном режиме. Если попытка запереть не удалась, функция FLOCK() выводит логическое значение .F.. Это означает, что либо вся база данных была заперта другим пользователем, либо другим пользователем бы- ла заперта одна запись. В этом случае исключительный доступ к файлу не предоставляется. Ниже приведен пример сегмента програм- мы, использующего функцию FLOCK(). USE Video IF FLOCK() COPY TO Video2 UNLOCK ELSE ? "Database is not available" ENDIF Как указано в приведенном выше фрагменте программы, команда UNLOCK отпирает запертую базу данных. Запертая база данных авто- матически отпирается при закрытии ее командами USE, CLEAR ALL, CLOSE DATABASE или QUIT. MESSAGE Функция MESSAGE выводит текущую строку сообщения об ошибке. Для получения строки сообщения об ошибке должна быть акти- вирована команда ON ERROR. Эта функция может быть использована в многопользовательской конфигурации для вывода сообщений об ошибке на экран соответст- вующего монитора. RLOCK или LOCK Функции RLOCK() и LOCK() идентичны. Приведенное ниже пояс- нение относится к функции RLOCK(), однако оно может быть отнесе- но и к функции LOCK(). При обнаружении функции RLOCK(0), если текущая запись базы данных еще не заперта, FoxBASE+ предпринима- ет попытку закрыть эту запись. В любом случае функция RLOCK() или LOCK() выводит значение .T. или .F.. Если функция RLOCK() выводит .T., это означает, что вам предоставлены права чтения и записи в запись. В дополнение при необходимости RLOCK() прочитает текущую запись базы данных для проверки того, не изменилось ли ее содержание. Если функция RLOCK() выводит .F., это означает, что запись была закрыта другим пользователем, и вы можете только читать запрошенную запись. Ваши действия в такой ситуации зависят от запросов вашей прикладной программы. Ниже приведен фрагмент программы, использующий функцию RLOCK(). SEEK custname IF RLOCK() SET FORMAT TO custfile READ ELSE ? "Customer record is not available" ENDIF Запертая запись автоматически отпирается, если содержащий ее файл базы данных закрывается командами USE, CLEAR, CLOSE или QUIT. Удаление запертой записи не приводит к автоматическому от- пиранию на дискете. SYS SYS это функция оценки строки символов. В зависимости от значения числового аргумента <число> она выводит различные сис- темные параметры. Функция SYS в основном ориентирована на использование прог- раммистами в многопользовательской среде. Подробная информация об этой функции приведена в главе 5. 9.8 Сообщения об ошибках в многопользовательском режиме Ниже приведен список сообщений об ошибках для многопользо- вательской версии FoxBASE+. После текста сообщения об ошибке в скобках приведен соответствующий номер ошибки. /Запись в файл только для чтения невозможна/.(111) Была сделана попытка записи в файл, который был создан только для чтения. /Требуется файл, открытый в режиме исключительного использования/ (110) Была сделана попытка использования команд INSERT [BLANK], MODIFY STRUCTURE, PACK, REINDEX или ZAP с файлом, который не был открыт в режиме исключительного использования. Вновь откройте файл при помощи комнанды USE EXCLUSIVE или установите SET EXCLUSIVE ON и вновь откройте файл. /Файл используется другим/(108) Была сделана попытка открыть файл, который был открыт другим пользователем для использования в исключительном режиме, или была сделана попытка открыть в режиме исключительного использования файл, который был ранее открыт другим пользователем. /Недопустимое переназначение принтера/(124) Либо не установлен маршрут к принтеру, либо устройство печати не общего пользования. /Запись используется другим/(109) Была сделана попытка запереть запись, которая заперта другим пользователем. /Запись не заперта/(130) Была сделана попытка выполнить команду REPLACE или @...SAY...GET для записи, которая не была заперта. Заприте запись и повторите команду. /Запереть невозможно/ В командах EDIT или CHANGE был введен символ Ctrl-O для запирания записи, которая заперта другим пользователем. 10 Сообщения об ошибках Ниже приведен список сообщений об ошибках FoxBASE+. Вслед за текстом сообщения в скобках приведен номер соответствующей ошибки. В конце настоящего раздела приведена таблица номеров ошибок с текстовыми сообщениями, упорядоченных по номерам. /** или ^ внутренняя ошибка операции/(78) Была предпринята попытка возведения в степень отрицательно- го основания. /Команда READ активна/(1249) Была предпринята попытка использовать команду READ, @...GET или CLEAR GETS в процедуре ON KEY или из оператора VALID команды @...GET была вызвана заданная пользователем функ- ция. /Имя ALIAS уже используется/(24) Была предпринята попытка выполнить команду USE для базы данных с именем из одной буквы с А по J или с псевдонимом ALIAS, который назначен для другой уже используемой базы данных. /Имя ALIAS не найдено/(13) Была сделана попытка либо использовать псевдоним вне диапа- зона с А по J, либо указанный псевдоним ALIAS не был опре- делен. /Попытка переместить файл на другое устройство/(1153) Файл не может быть перемещен командой RENAME на дургое уст- ройство. /Попытка использовать более 2048 имен/(1201) При загрузке программы или открытии базы данных было превы- шено обще количество имен 2048. Для исправления этой ошибки расчлените программу на небольшие модули. /Недопустимый указатель дисковода/(1907) В команде DIR был указан недопустимый указатель дисковода. /Недопустимый аргумент длины или дробной части/(1908) В функции STR() был указан недопустимый аргумент для длины или дробной части числа. /Обнаружено начала файла/(38) Указатель записи был размещен ранее первой записи в файле. /Вне строки/(62) Была предпринята попытка доступа к символам, расположенным далее последнего байта символической переменной памяти или поля базы данных. /Невозможен доступ к выбранной базе данных/(1152) Была предпринята попытка выбрать базу данных вне диапазона от 1 до 10, или была сделана ссылка на переменную файла в неоткрытой базе данных. /Невозможно создать файл/(1102) Операционная система передала FoxBASE+ сообщение об ошибке, указывающее, что новый файл не может быть создан. Невозмож- ность создать новый файл является чаще всего результатом переполнения диска или каталога, недопустимого имени файла, или отсутствие необходимых указания для входа в каталог, в котором должен быть создан файл. /Невозможно открыть файл/(1101) Операционная система передала в FoxBASE+ сообщение об ошиб- ке, указывающее, что файл не может быть открыт. Невозмож- ность открыть файл чаще всего связана с попыткой открыть несуществующий файл, ошибкой при вводе имени файла или от- сутствии соответствующего права доступа, которое необходимо для использования файла. /Невозможно откорректировать файл/(1157) Эта ошибка очень необычна. Она может произойти только если ошибочная ситуация возникнет в процессе записи на диск - исчерпано свободное место, сбой диска и т.д. /Невозможна запись в файл только для чтения/(111) Была предпринята попытка записи в файл, который был создан только для чтения. /Скомпилированный код этой строки слишком длинный/(1252) Объектный код, созданный для этого оператора, превысил раз- мер внутреннего кодового буфера FoxBASE+. Указанная строка содержит слишком много длинных выражений и должна быть раз- делена на несколько строк. /CONTINUE без LOCATE/(42) Была предпринята попытка выполнить команду CONTINUE без вы- полнения перед ней команды LOCATE. /Циклическая связь/(44) Команда RELATION указывает на базу данных, которая уже свя- зана. /Несоответствие типов данных/(9) Выражение считается недопустимым в FoxBASE+, поскольку оно состоит из типов данных, которые не могут быть использованы совместно, поскольку тип данных не соответствует выражению FoxBASE+, или операция с двумя базами данных предполагает, что два поля имеют одинаковый тип данных (напр., в командах UPDATE...REPLACE, SET RELATION). /База данных не индексирована/(26) Не был выбран индексный файл для базы данных при попытке использования команды UPDATE с параметром RANDOM. /Запись базы данных повреждена/(1115) Числовое поле в текущей записи содержит недопустимые симво- лы. /Деление на 0/(1307) Была предпринята попытка деления на нуль. /Вложение циклов DO слишком глубоко/(103) В программе был превышен максимально допустимый уровень вложения циклов DO, который равен 15. /Дублирующиеся имена полей/(1156) В параметре FIELDS введенной команды SORT или COPY присутс- твуют дублирующиеся имена полей в списке полей. Внесите ис- правления в программу или в команду и повторите команду. /Обнаружен конец файла/(4) Указатель записи размещен далее последней записи в файле базы данных. /Endtext без text/(1214) Для выражения ENDTEXT отсутствует соответствующее выражение TEXT. /Ошибка описания поля в ярлыке/(1245) В файле ярлыков LABEL было обнаружено недопустимое выраже- ние (.LBL). /Требуется файл в режиме исключительного использования/(110) Была сделана попытка использования команд INSERT [BLANK], MODIFY STRUCTURE, PACK, REINDEX или ZAP с файлом, который не был открыт в режиме исключительного использования. Вновь откройте файл при помощи комнанды USE EXCLUSIVE или установите SET EXCLUSIVE ON и вновь откройте файл. /Ошибка анализатора выражений/(67) Эта ошибка свидетельствует о повреждении внутренней струк- туры анализатора выражений системы FoxBASE+. Это может быть связано с повреждением файла объектного кода FoxBASE+. Пе- рекомпилируйте программу, которая приводит к такому сообще- нию об ошибке. /Возможность недоступна/(1001) Возможность FoxBASE+, которую вы хотите использовать, не поддерживается в используемой вами версии FoxBASE+. Напри- мер, интерфейс с языком Ассемблера поддерживается в настоя- щее время только в версии FoxBASE+ для MS-DOS. /Отказано в доступе к файлу/(1705) Была сделана попытка записи в файл, который защищен от за- писи командой DOS ATTRIB. /Файл уже существует/(7) Имя файла, которое вы хотите дать файлу при его переимено- вании, уже используется. Обычно это сообщение об ошибке вы- дается командами SORT или RENAME. /Файл не может быть заперт/(1503) (Только для многопользовательского режима) Была предпринята попытка выполнения команды (например, PACK, INDEX), которая подразумевает временное использование базы данных в режиме исключительного пользования, в то время как база данных, или какая-либо запись в ее составе, были заперты другим пользователем. Для проверки того, может ли база данных быть заперта в текущий момент, может быть использована функция LOCKNDX(). Если файл может быть заперт, функция LOCKNDX() запрет его. /Ошибка закрытия файл/(1112) Операционная система выдала сообщение об ошибке при попытке FoxBASE+ закрыть файл. /Файл не существует/(1) Файл, который вы попытались вызвать, не существует. /Файл используется/(3) Была предпринята попытка использовать команду USE, DELETE или RENAME с файлом, который был в этот момент открыт. /Файл используется другим/(108) Была сделана попытка открыть файл, который был открыт дру- гим пользователем для использования в режиме исключительно- го доступа. /Файл не открыт/(1113) Была предпринята попытка чтения из файла или записи в файл, который не был открыт. /Ошибка чтения файла/(1104) Операционная система выдала сообщение об ошибке при попытке FoxBASE+ прочетсь файл. /Файл не был загружен/(91) Произошла ошибка при поытке выполнения команд CALL или RELEASE в отношении модуля, который не был загружен коман- дой LOAD. /Ошибка записи файла/(1105) Операционной системой было выведено сообщение об ошибке при попытке FoxBASE+ записи в файл. Наиболее часто эта ошибка явялется результатом записи на дискету с установленной за- щитой записи. /Выражение FILTER слишком длинно/(1140) Была предпринята попытка выполнить команду SET FILTER TO с выражением, превышающем максимально допустимую длину (160 символлов). /FILTER требует логического выражения/(37) Была предпринята попытка выполнить команду SET FILTER для выражения, которое не является логическим. /For/while требуют логических выражений/(1127) Операторы "for" и "while" в составе команды не содержат ло- гического выражения. /Несогласованность if/else/endif/(1211) Для выражений ELSE или ENDIF отсутствует соответствующее выражение IF. /Недопустимая операция для поля MEMO/(34) В команде INDEX не может быть указано поле MEMO в качестве ключевого выражения. /Недопустимое смещение при поиске/(1103) Ошибка вызвана попыткой FoxBASE+ установить указатель запи- си перед началом файла. /Недопустимое значение/(1305) Выражение, указанное в командах SET MEMOWIDTH, SET HISTORY, DISPLAY HISTORY, BROWSE или @ TO имеет недопустимое значе- ние. /Недопустимый тип данных в групповом выражении/(1241) Командой REPORT в выражении для группы или подгруппы был обнаружен тип данных логический или мемо. /Индекс поврежден. Перед работой используйте REINDEX/(114) В индексном файле была обнаружена поврежденная структура. /Индексное выражение слишком велико/(112) Индексное выражение для этого индекса превышает максимально допустимый размер 100 байт. /Недопустимая длина ключа/(23) Индексное выражение для проведеня индексации превышает мак- симально разрешенную длину для ключевого выражения 150 бай- тов. /Индексный файл не соответствует базе данных/(19) Индексное выражение в текущем индексном файле использует переменные, которые отстутствуют в активном файле базы дан- ных. /Недостаточен объем памяти/(43) Недостаточен объем памяти для загрузки указанного модуля. /Ошибка внутренней структуры/(66) Была повреждена внутренняя таблица FoxBASE+. /Внутренняя ошибка: В отчете слишком много символов/(1243) Общий размер всех заголовков и выражений, заданных для от- чета в команде CREATE/MODIFY REPORT слишком велика и не мо- жет быть включена в один файл отчетов. /Недопустимый символ в команде/(1220) Строка в исходном коде содержит недопустимый символ. Скорее всего это связано с наличием управляющего символа, введен- ного в текст программы внешним редактором. /Недопустимый номер базы данных/(17) Попытка выбрать базу данных с недопустимым номером вне диа- пазона от 1 до 10. /Недопустимый описатель файла/(1111) В связи с внутренней ошибкой, FoxBASE+ попытался выполнить чтение или запись с поврежденным описателем файла. /Недопустимые значение, тип или количество аргументов функции/(11) Значение, переданное функции, либо имеет несоответствующий тип данных, илбо значение аргумента находистя вне допусти- мого диапазона для этой функции. Это может быть связано также с передачей функции чрезмерного количества аргумен- тов. /Недопустимый номер индекса/(1141) Была предпринята попытка установить SET INDEX TO в позицию в списке индексных файлов, которая является пустой или вне диапазона от 0 до 7. /Недопустимая длина ключа/(1107) Было указано индексное ключевое выражение недопустимой дли- ны. Длина ключа для индекса должна быть в пределах от 0 до 100 байт, включительно. /Недопустимая переадресация принтера/(124) Либо не задан маршрут к принтеру, либо устройство печати не общего пользования. /Недопустимый индекс/(31) Был использован индекс, который находится вне допустимого диапазона индексов массива в операторе DIMENSION. Это может быть также связано с использованием двух указателей индекса в одномерном массиве, или с использованием индекса при ссылке на скалярную переменную. /Недопустимая ссылка на переменную/(1223) Была использована функция там, где предполагалась перемен- ная. Это связано с использованием допустимого имени функции или аббревиатуры в качестве имени массива. /Ключевое выражение слишком длинно/(1108) Была превышена максимально допустимая длина индексного клю- чевого выражения (150 байт). /Ключ слишком велик/(1124) Была превышена максимальная длина индексного ключа (100 байт). /Тип поля в ярлыке - символический, числовой или даты/(1244) Командой LABEL в файле ярлыков было обнаружено поле логи- ческого типа или типа мемо. /Недопустимый файл ярлыков/(54) Была предпринята попытка коректировки или распечатки ярлы- ков с использованием файла ярлыков, который был создан не командой CREATE/MODIFY LABEL. /Строка слишком длинна/(18) Была превышена максимальная длина строки текста (254 бай- та). Наиболее часто это связано с тем, что макрозамены при- вели к удлинению строки сверх 254 байт. /Внутрення ошибка LOG/(58) Аргумент функции LOG должен быть больше нуля. /Превышено максимално разрешенное (128) число пунктов меню (607) Превышено максимально разрешенное число пунктов (128), ко- торое может располагаться в меню. /Превышено максимално разрешенное (25) число меню (608) Превышено максимально разрешенное читсло меню (25). /Превышен размер (50) пункта меню (609) Превышено количество символов, находящийся в пункте меню (50) /Этот файл не может быть дополнен/(111) Это файл dBASE II или FoxBASE, он может быть только проч- тен, но не дополнен. /Отсутствует файл MEMO/(41) Была предпринята попытка использовать файл базы данных, для которого соответствующий файл мемо (.DBT) был удален, стерт или не может быть найден. /Файл переменных памяти поврежден/(55) Была предпринята попытка восстановить переменные памяти из командой RESTORE FROM из файла, который не является файлом памяти (.MEM). /Недопустимая структура case/(1213) Для выражений CASE, ENDCASE и OTHERWISE отсутствует опера- тор DO CASE. /Отсутствует (/(1304) В имени функции отсутствует левая скобка. /Отсутствует )/(1300) В имени функции отсутствует правая скобка. Либо данная строка содержит левую скобку, для которой отсутствует пра- вая скобка, либо функция содержит слишком много аргументов и правая скобка не воспринимается. /Отсутствует ,/(1306) FoxBASE+ ожидал запятую, но она не была найдена. Обычно это происходит при задании недопустимого количества аргументов для функции. /Отсутствует выражение/(1227) Ожидалось допустимое выражение, оно не найдено. /Отсутствует операнд/(1231) Был использован оператор, который подразумевает наличие двух операндов, без второго операнда, например (13+4)/. /Должен быть ключ символического или числового типа/(1145) Ключевое поле, используемое в команде UPDATE ON должно быть символического, числового типа или типа даты. /Должна быть переменная файла/(1226) Была использована переменная памяти или переменная массива вместо ожидаемой переменной файла. /Должна быть переменная памяти/(1225) Была использована переменная файла вместо ожидаемой пере- менной памяти или переменной массива. /Должно быть описание массива/(1232) Оператор DIMENSION содержит описание переменной без указа- ния индексов. /Не найден оператор PARAMETER/(1238) При выполнении программы командой DO с оператором PARAMETER первым оператором вызванной программы должен быть оператор PARAMETER. /В области USE отсутствует база данных/(1119) Отсутствовала активная база данных в момент попытки выпол- нения команды. /Не найдены поля для копирования/(47) При попытке выполнения команд COPY или TOTAL для файла не было обнаружено доступных полей. /Нет памяти для буфера/(1149) Оказалось невозможным зарезервировать область памяти для буффера. Это сообщение встречается очень редко и только в ситуациях, когда доступный объем памяти очень ограничен. Рекомендуем вам расширить память. /Нет памяти для карты файла/(1150) Оказалось невозможным зарезервировать область памяти для внутреннего ресурса. Это сообщение встречается очень редко и только в ситуациях, когда доступный объем памяти очень ограничен. Рекомендуем вам расширить память. /Нет памяти для имени файла/(1151) Оказалось невозможным зарезервировать область памяти для внутреннего ресурса. Это сообщение встречается очень редко и только в ситуациях, когда доступный объем памяти очень ограничен. Рекомендуем вам расширить память. /Меню/пункт не определен (612) Значения, посланные командам READ MENU TO или READ MENU BAR TO не соответствуют меню или указанным в них пунктам. /Не символическое выражение/(45) Была предпринята попытка вызвать модуль командой CALL с вы- ражением несимволического типа. /Не файл базы данных/(15) Файл, который FoxBASE+ пытается использовать в качестве ба- зы данных, содержит недопустимый заголовок. /Не числовое выражение/(27) Была предпринята попытка использовать команду SUM для не- числового поля. /Не объектный файл/(1309) Была предпринята попытка загрузить компилированную програм- му FoxBASE+, которая имеет недопустимый заголовок. Наиболее вероятно, что исходная программа имеет расширение FOX или .FMX, которое зарезервировано для компилированных программ. /Недостаточен объем памяти для загрузки базы данных/(1600) Недостаточен объем памяти для открытия дополнительной базы данных. /Не приостановлено/(101) Была использована команда RESUME без использования ранее команды SUSPEND. /Несоответствие типа оператора/операнда/(107) Используется арифметический, логический или логический опе- ратор или функция с недопустимым типом данных. Эта ошибка может произойти, например, если вы попытаетесь сложить два логических значения. /Вне диска/(56) Операционная система передала в FoxBASE+ сообщение об ошиб- ке, указывающее, что на диске недостаточно места для зане- сения данных в соответствии с последней командой WRITE. /Ошибка оператора picture в выражении GET/(1217) Оператор picture в выражении @...SAY...GET содержит симво- лы, задающие значение, которое не может быть сформатирова- но. Эта ошибка может произойти в связи с ошибкой в операто- ре picture или в связи с тем, что форматируемое значение не соответствует указанному оператору picture. /Положение вне экрана/(30) Недопустимое значение номера строки или столбца в команде @. /Принтер не готов/(125) Указанное устройство печати в текущий момент недоступно, или нарушен временной режим работы принтера. Возможно, сле- дует увеличить параметр "time" в файле CONFIG.FX. /Программа слишком велика/(1202) Программа, которую пытается загрузить FoxBASE+, не помеща- ется в памяти. В случае, если FoxBASE+ обладает достаточным объемом памяти, наибольшая программа может содержать не бо- лее 65,000 байт. /Запись используется другим/(109) Была сделана попытка запереть запись, которая заперта дру- гим пользователем. /Запись вне индекса/(20) Ключевое поле базы данных было изменено в момент, когда ин- дексный файл не был активным. Для исправления этой ошибки выполните команду REINDEX для файла базы данных. /Запись не заперта/(130) Команды REPLACE или @...SAY...GETбыли введены в отношении записи, которая не была заперта. Заприте запись и повторите попытку. /Запись вне диапазона/(5) Номер записи, которую вы пытаетесь использовать, вне диапа- зона фактически имеющихся в базе данных записей. Проверьте, не пользуетесь ли вы ключем активации от демонстрационной версии. Если это так, снова проинстолируйте FoxBASE+ и пов- торите свои действия. /Запись слишком длина/(1126) При попытке создания файла базы данных была превышена мак- симальная длина данных в записи (4000 байт). Длина данных в записи равна сумме длин отдельных полей записи. /Рекурсивное макроопределение/(1206) Максимальное количество макрозамен (256 в одном выражении) было выполнено в текущей строке. Возможной причиной этой ошибки является ссылка макро самой на себя. /Выражение отношений слишком длинное (1108) Компилированыый вариант выражения с отношениями превысил 60 байт. /Поврежден файл отчетов/(50) В описании отчета имеется ошибка. /Необходимый оператор в команде отсутствует/(1221) Была использована команда без оператора, который подразуме- вается синтаксисом команды FoxBASE+. /Ошибка команды RUN/!/(1405) Операционная система передала FoxBASE+ сообщение об ошибке, указывающее что не может быть организован вторичный процесс для выполнения команды RUN. Наиболее часто эта ошибка явля- ется следствием невозможности найти программу интерпретато- ра команд, или недостаточным объемом свободной памяти для загрузки программы интерпретатора команд в память. Удосто- верьтесь, что органзован доступ к файлу COMMAND.COM с по- сощью переменной конфигурации COMSPEC. /Внутренняя ошибка SQRT/(61) Аргумент функции SQRT не может быть отрицательным. /Выражение недопустимо в интерактивном режиме/(95) Команды IF, ELSE, ENDIF, TEXT, ENDTEXT, EXIT, RETRY, RETURN, SUSPEND, DO WHILE, ENDDO, DO CASE и ENDCASE недо- пустимы в интерактивном режиме. /Переполнение области символической переменной памяти/(21) Общий объем всех символических переменных памяти превысил размер пула памяти, заданный в файле config.fx/db. /Строка слишком длинна/(1903) Была превышена максимальная длина строки функциями REPLICATE или SPACE. /Недопустимая структура/(1235) В команде CREATE FROM была указана база данных, структура которой не соответствует формату STRUCTURE EXTENDED. /Слишком велика вложенность в структуре/(1212) Превышен максимально допустимый уровень вложенности команд при структурном программировании, равный 64. /Индекс вне диапазона/(1234) Была сделана попытка ссылки на элемент массива с индексом, который находистя вне диапазона, заданного в операторе DIMENSION. /Синтаксическая ошибка/(10) Была введена команда с синтаксической ошибкой. Ошибка может быть вызвана ошибкой в названии команды или имени перемен- ной, или использованием оператора, который не имеет смысла в таком контексте. /Синтаксическая ошибка в выражении поля/(1242) Команда REPORT обнаружила ошибку в выражении поля. /Цель уже использована в связи/(1147) В указанной ситуации существует несколько связей между ак- тивным файлом базы данных и одной из целей при связи. /Слишком мало аргументов/(1229) Вызов функции содержит аргументов меньше, чем требуется. /Слишком много аргументов/(1230) Вызов функции содержит количество аргументов, превышающее разрешенное для этой функции значение. /Слишком много открытых файлов/(6) FoxBASE+ попытался открыть файлов больше, чем позволяет его внутренняя структура. /Слишком много индексов/(28) Максимальное количество индексов (7), которое может быть открыто одновременно, было превышено. /Слишком много переменных памяти/(22) Максимальное количество переменных памяти, которое может быть создано, было превышено. Увеличьте значение параметра MVCOUNT в файле config.fx/db. /Слишком много символов PICTURE/(1310) Общее количество символов во всех операторах picture для активных операторов GET превысило предел 2064 символа. Уве- личьте параметр BUCKET в файле CONFIG.FX. /Слишком много процедур PROCEDURE/(1250) FoxBASE+ обнаружил, что максимальное количество процедур в процедурном файле (128) было превышено при выполнении ко- манды SET PROCEDURE TO. /Слишком много связей/(1148) Слишком много связей (более 15) установлено сежду файлами базы данных. Уменьшите количество связей между открытыми файлами базы данных. /Общая длина ярлыков превышает максимальную величину/(1246) Команда LABEL обнаружила условие, для которого сумма длин отдельных ярлыков плюс промежутки между ними превышает мак- симально допустимую длину. /Невозможно создать временные рабочие файлы/(1410) Команда SORT или INDEX, которой необходимы временные рабо- чие файлы не получила от операционной системы разрешения на их создание. Это может быть вызвано переполнением каталога или проблемами доступа в каталог с временными файлами. /Запереть невозможно/ В командах EDIT или CHANGE был введен символ Ctrl-O для за- пирания записи, которая заперта другим пользователем. /Неизвестная функциональная клавиша/(104) Была предпринята попытка выполнить команду SET FUNCTION для функциональной клавиши, которая не соответствует по имени или по номеру ни одной из существующих функциональных кла- виш. /Неопознанная команда/(16) В начале командной строки было использовано слово, которое не является известной командой FoxBASE+. /Неопознанная фраза/ключевое слово в команде/(36) В командой строке была использована конструкция, начинающа- яся с недопустимого ключевого слова. /Переменная должна быть в выбранной базе данных/(1134) Переменная, выбранная для замены в команде REPLACE, отсутс- твует в активной в текущий момент базе данных. /Переменная не найдена/(12) Переменная, указанная в операторе "field" для команд CHANGE, TOTAL или UPDATE, отсутствует в активной базе дан- ных. /Ошибка вложения while/(96) Для выражения ENDWHILE отсутствует соответствующее выраже- ние DO WHILE. /Недопустимая длина ключа/(1117) Длина ключевого поля не соответствует командам UPDATE или SET RELATION TO при работе с двумя файлами. /Неверное количество параметров/(94) Количество параметров, указанное в выражении DO...WITH не соответствует количеству параметров, заданному выражением PARAMETER в вызванной программе. . Сообщения об ошибках FoxBASE+ и соответствующие номера Ниже приведен список ошибок, в котором они расположены по номерам, а также сообщения, соответствующие каждому номеру. Номер ошибки Текст сообщения об ошибке 1 Файл не существует 3 Файл используется 4 Запись вне диапазона 5 Запись вне диапазона 6 Слишком много открытых файлов 7 Файл уже существует 9 Несоответствие типа данных 10 Синтаксическая ошибка 11 Недопустимое значение, кол-во или тип арг-тов 12 Переменная не найдена 13 ALIAS не найден 15 Не файл базы данных 16 Неопознанное командное слово 17 Недопустимый номер базы данных 18 Строка слишком длинна 19 Индесный файл не соответствует базе данных 20 Записи нет в индексе 21 Переполнение области памяти переменных 22 Слишком много переменных памяти 23 Индексное выражение слишком велико 24 Имя ALIAS уже используется 26 База не индексирована 27 Не числовое выражение 28 Слишком много индексов 30 Позиция вне экрана 31 Ссылка на недопустимый индекс 34 Недопустимая операция для поля MEMO 36 Неопознанная фраза/ключ.слово в команде 37 FILTER требует логического выражения 38 Обнаружено начало файла 39 Числовое переполнение (данные потеряны) 41 Отсутствует файл MEMO 42 CONTINUE без LOCATE 43 Недостаточно памяти 44 Циклическая связь 45 Не символическое выражение 47 Не найдены поля для копирования 50 Поврежден файл отчетов 54 Поврежден файл ярлыков 55 Поврежден файл переменных памяти 56 Вне диска 58 Внутренняя ошибка LOG 61 Внутренняя ошибка SQRT 62 Вне строки 66 Ошибка внутренней структуры 67 Ошибка анализатора выражений 78 Внутренняя ошибка ** или ^ 91 Файл не был загружен 94 Ошибочное количество параметров 95 Выражение недопустимо в интерактивном режиме 96 Ошибка вложения while 101 Не приостановлено 103 Вложение do слишком велико 104 Неизвестная функциональная клавиша 107 Несоответствие типов операнд/оператор 108 Файл используется другим 109 Запись используется другим 110 Требуется ислючительно открытый файл 111 Запись в файл только для чтения невозможна 112 Индексное выражение слишком велико 114 Индекс поврежден 124 Недопустимое переназначение принтера 125 Принтер не готов 130 Запись не заперта 138 Не найдены поля для копирования 607 Превышено максимално разрешенное число пунктов меню 608 Превышено максимално разрешенное число меню 609 Превышен размер пункта меню 611 Меню пункты/заголовки должно иметь тип CHARACTER 612 Такой мень/пункт не определен 1001 Возможность не поддерживается 1101 Невозможно открыть файл 1102 Невозможно создать файл 1103 Недопустимое смещение при поиске 1104 Ошибка чтения файла 1105 Ошибка записи в файл 1108 Ключевое выражение слишком длинное 1111 Недопустимый описатель файла 1112 Ошибка закрытия файла 1113 Файл не открыт 1115 Запись базы данных повреждена 1117 Ошибочная длина ключа 1119 В области USE нет базы данных 1124 Ключ слишком велик 1126 Запись слишком длинная 1127 В for/while необходимо логическое выражение 1134 Переменная должна быть в выбранной базе 1140 Выражение FILTER слишком велико 1141 Недопустимый номер индекса 1145 Должно быть числовое или символическое поле 1147 Цель уже состоит в связи 1148 Слишком много связей 1149 Нет памяти для буфера 1150 Нет памяти для карты файла 1151 Нет памяти для имени файла 1152 Невозможно достичь выбранную базу 1153 Попытка переместить файл на дургое устройство 1156 Дублирующиеся имена файлов 1157 Невозможно откорректировать файл 1201 Попытка использовать более 2048 имен 1202 Программа слишком велика 1206 Рекурсивное макроопределение 1211 Несоответствие if/else/endif 1212 Структура со слишком глубоким вложением 1213 Несоответствующая структура case 1214 Endtext буз text 1217 Ошибка picture в операторе GET 1220 Недопустимый символ в команде 1221 Необходимый оператор отсутствует в команде 1223 Недопустимая ссылка на переменную 1225 Должна быть переменная памяти 1226 Должна быть переменная файла 1227 Отсутствует выражение 1229 Слишком мало аргументов 1230 Слишком много аргументов 1231 Отсутствует операнд 1232 Должно быть описание массива 1234 Индекс вне диапазона 1235 Ошибочная структура 1238 Не найден оператор PARAMETER 1241 Недопустимый тип данных в групповом выражении 1242 Синтаксическая ошибка в выражении поля 1243 Внутренняя ошибка: Много символов в отчете 1244 Тип поля ярлыка м.б. символ., числовым и даты 1245 Ошибка в описании поля ярлыка 1246 Общая длина ярлыка превышает допустимую 1249 Команда READ активна 1250 Слишком много процедур 1252 Компилированный код строки слишком длинный 1300 Отсутствует ) 1304 Отсутствует ( 1305 Недопустимое значение 1306 Отсутствует , 1307 Деление на 0 1309 Не объектный файл 1310 Указано слишком много символов PICTURE 1405 Ошибка команда RUN/! 1410 Невозможно создать временные рабочие файлы 1503 Файл не может быть заперт 1600 Недостаточнго памяти для открытия базы данных 1705 Отказано в доступе к файлу 1903 Строка слишком длинная 1907 Ошибочный указатель дисковода 1908 Ошибочный аргумент длины или дробной части 1999 Функция не реализована . Приложение A. О файле VIDEO.DBF _______________________________________________________________ A.1 Структура VIDEO.DBF _______________________________________________________________ Структура базы данных : C:DB3VIDEO.DBF Количество записей : 35 Дата последней кооректировки: 07/08/86 Поле Имя поля Тип Ширина Дробная часть 1 TITLE Character 30 2 DESCRIPT Memo 10 3 RATING Character 4 4 TYPE Character 10 5 DATE_ARRIV Date 8 6 AVAILABLE Logical 1 7 COST_RENT Numeric 6 2 8 COST_BUY Numeric 6 2 9 TIMES_RENT Numeric 5 10 NUM_SOLD Numeric 5 11 FORMAT Character 3 12 LENGTH Numeric 3 ** Total ** 92 Содержание файла VIDEO.DBF # TITLE RATING TYPE 1 AMADEUS PG Drama 2 NORMA RAE PG Drama 3 KRAMER VS.KRAMER PG Drama 4 PLACES IN THE HEART PG Drama 5 THE WAY WE WERE PG Drama 6 ORDINARY PEOPLE R Drama 7 THE SONS OF KATIE ELDER G Western 8 A FISTFUL OF DOLLARS PG Western 9 BARBAROSA PG Western 10 ARSENIC AND OLD LACE N/R Classic 11 THE MALTESE FALCON N/R Classic 12 CASABLANCA N/R Classic 13 TOPPER N/R Classic 14 SUNSET BOULEVARD N/R Classic 15 MURDER BY DEATH PG Suspense 16 REBECCA PG Suspense 17 FRIDAY THE 13TH R Suspense 18 EYEWITNESS R Suspense 19 THE FOG R Suspense 20 NIGHT OF THE LIVING DEAD N/R Suspense 21 A NIGHTMARE ON ELM STREET R Suspense 22 TOOTSIE PG Comedy 23 48 HRS. R Comedy 24 BEVERLY HILLS COP R Comedy 25 THE FLAMINGO KID PG Comedy 26 GHOSTBUSTERS PG Comedy 27 FUNNY GIRL G Musical 28 GUYS AND DOLLS N/R Musical 29 CABARET PG Musical 30 SOUTH PACIFIC N/R Musical 31 GREASE PG Musical 32 CHINESE CONNECTIONS R Action 33 A VIEW TO KILL PG Action 34 20,000 LEAGUES UNDER THE SEA G Action 35 BLADE RUNNER R Action Record# AVAILABLE COST_RENT COST_BUY TIMES_RENT 1 .T. 2.00 59.95 244 2 .T. 1.39 39.95 132 3 .F. 2.99 39.95 559 4 .T. 1.99 39.95 149 5 .T. 1.99 29.95 405 6 .T. 2.99 39.95 708 7 .T. 0.99 24.95 309 8 .F. 2.99 29.95 899 9 .T. 0.99 29.95 20 10 .F. 2.99 29.95 1000 11 .F. 1.99 29.95 945 12 .T. 1.99 29.95 1782 13 .T. 1.89 29.95 578 14 .T. 2.59 29.95 438 15 .F. 1.99 29.95 2887 16 .T. 2.69 29.95 4738 17 .F. 2.99 29.95 9897 18 .T. 1.89 29.95 6673 19 .F. 2.99 29.95 4478 20 .F. 2.99 29.95 4783 21 .F. 2.99 29.95 6894 22 .T. 2.99 29.95 5784 23 .F. 1.99 29.95 4783 24 .F. 2.99 29.95 8478 25 .T. 1.49 29.95 678 26 .F. 2.99 59.95 10934 27 .T. 1.99 24.95 834 28 .T. 2.99 39.95 783 29 .T. 1.99 29.95 470 30 .F. 1.99 29.95 342 31 .T. 2.99 29.95 3459 32 .T. 2.99 29.95 3482 33 .F. 2.99 29.95 8932 34 .T. 1.99 29.95 3979 35 .F. 2.99 39.95 3412 Record# TIMES_BUY FORMAT LENGTH 1 125 VB 160 2 57 VB 114 3 312 VB 104 4 103 BV 113 5 309 VB 118 6 305 VB 124 7 210 VB 122 8 514 8 96 9 99 VB 90 10 510 VB 118 11 210 8 102 12 512 VB 102 13 157 VB 97 14 123 VB 110 15 504 VB 94 16 347 8 131 17 2343 VB 93 18 343 8 95 19 2348 VB 94 20 483 VB 95 21 3094 VB 92 22 3478 VB 116 23 989 VB 97 24 2348 VB 105 25 202 VB 98 26 8384 VB 105 27 123 8 148 28 87 8 150 29 231 VB 119 30 123 VB 150 31 2345 VB 110 32 1238 VB 107 33 4234 VB 131 34 342 8 126 35 1343 VB 119 Приложение В. Коды клавиш для команды "ON KEY=" Приведенная ниже таблица представляет числовые значения, используемые для обозначения клавиши, которая должна быть отсле- жена командой "ON KEY=". Код клавиши Соответствующая клавиша(и) 272-281 Alt Q, W, E, R, T, Y, U, I, O, P 286-294 Alt A, S, D, F, G, H, J, K, L 300-306 Alt Z, X, C, V, B, N, M 315-324 Функциональные клавиши с F1 по F10 327 Home 328 Стрелка вверх 329 PgUp 331 <- 333 -> 335 End 336 Стрелка вниз 337 PgDn 338 Ins 339 Del 340-349 Shift F1 по Shift F10 350-359 Ctrl F1 по Ctrl F10 360-369 Alt F1 по Alt F10 370 Ctrl Print-Scrn 371 Ctrl <- 372 Ctrl -> 373 Ctrl End 374 Ctrl PgDn 375 Ctrl Home 376-387 Alt 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, 388 Ctrl PgUp // TopList