18. Многопользовательская версия системы FoxPro Многопользовательская версия системы FoxPro (FoxPro/LAN) обладает всеми возможностями однопользовательской версии FoxPro, допуская при этом одновременную работу нескольких пользователей с файлами баз дан- ных. В приводимой далее главе описывается большинство средств и функций системы FoxPro/LAN. Информация, относящаяся к различным вычис- лительным сетям, в которых работает FoxPro/LAN, в настоящую документа- цию не вошла. Если у вас есть вопросы, касающиеся максимального числа пользователей, могущих работать в вычислительной сети, минимального количества необходимой оперативной памяти либо дополнительных аппарат- ных средств, которые могут понадобиться в таких системах, вам следует обратиться к документации по вашей сети. Требования к системе . -------------------- Для того, чтобы система FoxPro/LAN работала в вычислительной сети, должны быть удовлетворены следующие требования к аппаратным и прог- раммным средствам. Аппаратные средства. ------------------- Ниже перечисляются минимальные требования к аппаратным средствам, соб- людение которых необходимо для работы FoxPro/ LAN. Ваш выбор много- пользовательской операционной системы и сети может привести к появле- нию дополнительных требований к аппаратным средствам. Для получения дополнительной информации относительно спецификаций аппаратных средств вам необходимо посмотреть документацию по вашей сети. 1. ПЭВМ, поддерживаемая системой FoxPro/LAN. 2. Желательно наличие жесткого диска и расширенной памяти на каждой рабочей станции. Ни то, ни другое не является обязательным, но оптимальное функционирование достигается при наличие обоих компо- нентов. 3. Для запуска стандартной версии: - по крайней мере 480К свободной памяти на рабочих станциях - и это ПОСЛЕ того, как загружен сетевой командный процессор. - либо свободные 440К при расширенной памяти, что совместимо с LIM 4.0. 4. Для запуска расширенной версии: - по крайней мере 2Мб расширенной памяти. Требования к программным средствам. ---------------------------------- Необходимо наличие сетевого программного обеспечения, которое обес- печивает интерфейс стандартной NETBIOS и совместимо с версией 3.1 (или старше) ДОС. Большинство сетей, распространяемых в настоящее время, удовлетворяют этим требованиям. Сюда входят: - 3Com 3+; - Banyan Vines; - сеть IBM PC Network; - - усовершенствованная версия Novell Advanced Netware (пересмотренная версия 1.02 или выше); - Novell Netware 286; - Novell Netware 386; - Lantastic; - Invisible Net; - и многие, многие другие. Совместимость с NETBIOS. ----------------------- Хотя для системы FoxPro/LAN необходимо сетевое программное обеспе- чение, которое поддерживает обращения к стандартной NETBIOS, эта сов- местимость часто обеспечивается как составная часть сетевого командно- го процессора (как в случае с Novell и 3Com). В этих случаях не нужно перед началом работы системы FoxPro/LAN в сетевой среде загружать усо- вершенствованные компоненты NETBIOS (помещенные в отдельный модуль от сетевого командного процессора). Однако для вашей сети может потребоваться, чтобы модуль NETBIOS был загружен для того, чтобы обеспечить базисную совместимость с NETBIOS. В этих случаях понадобится загрузить модуль NETBIOS, чтобы система могла FoxPro/LAN работать правильно. Модуль SНARE. ------------ В зависимости от используемой сети модуль SНARE может быть необходим, а может и нет (например, он не нужен для сетей фирмы Novell). Когда модуль SНARE не загружен, файлы, расположенные на локальных рабочих станциях, всегда открыты для монопольного использования. Однако, когда модуль SНARE загружен, файлы на локальных дисководах могут быть откры- ты и для совместного использования. Если файлы с данными открываются на рабочей станции, когда SНARE загружен, они должны открываться для монопольного использования. (По умолчанию система FoxPro/LAN открывает файлы для монопольного использования, если только вы не выдали команду SET EXCLUSIVE OFF). Если вы работаете в версии 4.х ДОС, посмотрите в документации по своей операционной системе рекомендации по применению модуля SНARE с томами, емкость которых превышает 32 мегабайта. Установка и настройка рабочей станции. ------------------------------------- Инструкции по установке системы FoxPro/LAN можно найти в "Руко- водстве по установке системы FoxPro". В дополнение к ним обратите внимание на следующее: - вы можете установить систему FoxPro/LAN на жесткий диск файлового спецпроцессора для сетевой рабочей станции либо на файловый спецпроцессор; - вы обязаны получить для вашей вычислительной сети права на собст- венный файл и создание каталога; - ваша лицензия позволяет вам устанавливать систему FoxPro/LAN только на одной машине - обычно на файловом спецпроцессоре. К должным образом лицензированному экземпляру на спецпроцессоре мо- гут получить доступ столько рабочих станций (или терминалов), сколько вы захотите. Тем не менее, на нелицензированных машинах нельзя хранить никаких других копий системы FoxPro/LAN. Когда вы подготовитесь к установке системы FoxPro/LAN, следуйте соот- ветствующим инструкциям по установке. Программа ADDUSER. ----------------- Каждая рабочая станция сети может захотеть обладать своими собст- венными файлом конфигурации CONFIG.FP и ресурсным файлом FOXUSER. Файл CONFIG.FP содержит набор команд, которые определяют используе- мую по умолчанию при запуске системы FoxPro/LAN среду. Файл FOXUSER содержит разнообразную информацию, определяющую среду локальной системы FoxPro на рабочей станции, включая цветовые характе- ристики, макроопределения комбинаций, привилегии, расположения и раз- меры системного окна, дневниковые записи и т.п. Примечание. Информация из файла FOXUSER может использоваться совместно тогда, когда с помощью команды ATTRIB ДОС он помечен как READ ONLY (режим доступа "только_чтение"). Можно будет считывать, но не запоминать дан- ные в помеченный таким образом файл FOXUSER. При этом сетевое прог- раммное обеспечение предоставляет пользователям возможность разделять цветовые характеристики, макроопределения комбинаций, привилегии и т. п. Для того, чтобы облегчить настройку на рабочих станциях, постав- ляется программа, названная ADDUSER. Эта программа автоматизирует для каждой рабочей станции создание заказного файла конфигурации и инициа- лизирует файл FOXUSER. Кроме этого, она позволяет вам наилучшим спосо- бом задать размещение для каждой рабочей станции различных временных рабочих файлов. Программу ADDUSER необходимо выполнить на каждой рабо- чей станции, которая подключена к вашей сети. Начните сеанс работы в сети с вашей рабочей станции и выполните FoxPro/LAN, а затем команду DO ADDUSER. Если либо файл конфигурации, либо ресурсный файл, которые определяются на экране конфигурации ADDUSER, не существует, то прог- рамма ADDUSER для первоначальной установки характеристик будет пользо- ваться одним либо обоими описанными ниже файлами при условии, что они доступны. Файл CONFIG.DEF --------------- Этот файл может служить используемым по умолчанию на каждой рабочей станции файлом конфигурации. Используя этот файл в качестве отправной точки, программа ADDUSER создает на рабочей станции указанный файл конфигурации. Затем она добавляет в него информацию, определяющую,где разместить оверлейный и рабочий файлы. Файл DEFUSER.DBF ---------------- Этот файл может стать используемым по умолчанию ресурсным файлом. Если этот файл обнаружен в том же каталоге, откуда была запущена программа ADDUSER, то он копируется в каталог, указанный на экране конфигурации ADDUSER, воспользовавшись указанным именем ресурсного файла. Если файл конфигурации и/или ресурсный файл, заданные на экране конфигурации ADDUSER, уже существует на рабочей станции, то программа ADDUSER воспользуется существующим файлом(ами) для первоначальной уст- ановки характеристик. Вы создаете файлы CONFIG.DEF и DEFUSER.DBF. Когда вы создаете эти файлы, они должны располагаться в том же самом каталоге, из которого запускалась программа ADDUSER. Будучи запущен- ной, ADDUSER выводит предварительный экран, на котором описывается программа ADDUSER. В нижней части экрана приведен используемый по умолчанию каталог, который вы сможете изменить на следующем экране. Внесите любые изменения в определение дисковода и маршрута, потом нажмите на клавишу Enter и выберите соответствующий режим, чтобы про- должить либо завершить работу с программой ADDUSER. Затем отображается экран, в котором вы задаете каталог и/или имя файла для каждой из шести команд конфигурации. По мере того, как вы передвигаетесь от одной команды к другой, на экран выводится доступное дисковое пространство в каждом каталоге и краткое описание каждой команды. Файл конфигурации. ------------------ Файл конфигурации содержит набор команд, которые определяет ис- пользуемую по умолчанию при запуске системы FoxPro/LAN среду. Обычно это маленький файл (меньше, чем 1024 байта), однако, если он содержит много команд, он может занимать несколько тысяч байтов. Поскольку доступ к нему осуществляется только при запуске, данный файл может располагаться, не ухудшая производительность, на сетевом дисководе. Тем не менее, задаваемый файл конфигурации должен обладать уни- кальным расположением либо именем файла. Новый файл конфигурации, который создается программой ADDUSER, бу- дет содержать данные из файла CONFIG.DEF (если таковой существует в каталоге, из которого выполняется запуск). За данными файла CONFIG.DEF следуют дополнительные характеристики для команд RESOURCE, OVERLAY, EDITWORК, SORTWORК и PROGWORК. Помимо этого, программа ADDUSER добав- ляет на рабочей станции в файл AUTOEXEC.BAT команду SET ДОС (если вы выбираете OК), которая сообщает системе FoxPro/LAN, где искать этот файл конфигурации. Ресурсный файл. --------------- Ресурсный файл FOXUSER содержит системную и определяемую пользова- телем информацию, которая влияет на локальную среду системы FoxPro на рабочей станции. Эта информация включает в себя цветовые характеристи- ки, макроопределения комбинаций, привилегии, расположения и размеры системного окна, дневниковые записи и т.п. Программа ADDUSER ищет файл DEFUSER.DBF в каталоге, из которого вы- полнен запуск. Если файл существует, то она копирует его в указанный каталог, используя заданное имя файла (по умолчанию - FOXUSER). На каждой рабочей станции может существовать свой собственный ресурсный файл либо может совместно использоваться ресурсный файл, находящийся на файловом спецпроцессоре. Ресурсный файл с атрибутами "только_чтение", находящийся на файловом спецпроцессоре, может совместно использоваться несколькими рабочими станциями. Если рабочие станции совместно пользу- ются общим ресурсным файлом, для которого установлен режим "только_чтение", то любые внесенные в информацию на рабочей станции изменения, обычно запоминаемые в ресурсном файле, отбрасываются. Если ресурсный файл на файловом спецпроцессоре имеет атрибуты "чте- ние" и "запись", то первый пользователь, получивший доступ к этому файлу, открывает его для монопольного использования. Если доступ к файлу попытаются получить следующие пользователи, то это у них не по- лучится. Соответственно система FoxPro/LAN будет запускаться без открытого ресурсного файла (для RESOURCE будет установлен режим OFF (выкл)). Если для вашей программы необходимо пользоваться ресурсным файлом, у вас есть возможность проверить его наличие с помощью SET('RESOURCE'). Имя и расположение используемого ресурсного файла бу- дет возвращать функция SYS(2005). Вследствие специфического характера информации, хранящейся в ре- сурсном файле, возможно, что вы захотите, чтобы каждая рабочая станция имела свой собственный файл FOXUSER. Или, если в вашей прикладной программе не нужны ресурсы из файла FOXUSER, вы можете выдать команду SET RESOURCE OFF и вообще пренебречь ресурсным файлом. Этого можно достигнуть, включив в файл конфигурации следующую стро- ку: RESOURCE = OFF Оверлейные и рабочие файлы -------------------------- Для того, чтобы сократить объем трафика между спецпроцессором и ра- бочей станцией и повысить производительность, оверлейные и временные рабочие файлы системы FoxPro/LAN должны размещаться на жестком диске локальной рабочей станции (если это возможно). Выход из программы ADDUSER. Если характеристики конфигурации и файла содержат правильные имена файла и маршрута, нажмите клавишу F10 либо PgDn. Будут отображены четыре режима работы. Эти режимы предоставляют вам возможность изменить (Modify) характе- ристики, выполнить (Proceed) процесс, прервать (Abort) выполнение про- цесса либо просмотреть (Filer) файлы на локальной рабочей станции или файловом спецпроцессоре. Если вы выбрали Filer, нажмите на на клавишу Escaрe, когда захотите возвратиться в этот экран. Если вы выбираете команду Proceed, программа ADDUSER изменяет файл AUTOEXEC.BAT рабочей станции (если есть разрешение) и создает файл конфигурации и ресурсный файл. Потом она выводит на экран сообщение, информирующее, как процесс был выполнен, - успешно или нет. Последующие модификации. В файлы CONFIG.DEF и DEFUSER вы можете внести любые нужные вам из- менения. Поскольку ADDUSER является программой системы FoxPro, ее можно мо- дифицировать так, чтобы она обеспечивала впоследствии соответствующий желаниям пользователя процесс настройки. Запуск системы FoxPro/LAN. ------------------------- В сети система FoxPro/LAN - это прикладная совместно используемая программа, которая располагается на жестком диске файлового спецпро- цессора. Когда вы вызываете FoxPro/LAN, прикладная программа загружается в оперативную память рабочей станции с файлового спецпроцессора. Файлы с данными, которые будут использоваться системой FoxPro/LAN, могут размещаться на файловом спецпроцессоре либо на локальной рабочей станции. Находящиеся на файловом спецпроцессоре файлы с данными могут сов- местно использоваться и изменяться более, чем одним пользователем, в то время как располагающиеся на рабочей станции файлы доступны только с этой рабочей станции. Для того, чтобы запустить систему FoxPro/LAN, в ответ на запрос ДОС наберите FOXL и нажмите клавишу Enter. При этом будет выполняться загрузчик системы FoxPro/LAN. Загрузчик проверяет количество и тип доступной на вашей рабочей станции памяти, а потом вызывает наиболее усовершенствованную из доступных версию FoxPro/LAN. Примечание. Загрузчик предоставляет вам возможность вызвать наиболее мощную версию системы FoxPro, которая будет запускаться на машине, не обладая информацией о конфигурации машины. Это особенно полезно в среде LAN, в которой системный администратор может быть настроен на файл типа BAT, предназначенный для нескольких рабочих станций. Вы можете работать и с определенной версией системы FoxPro/LAN (стандартной системой FoxPro/LAN или с усовершенствованной версией FoxPro/LAN), набрав полное имя версии. Например, если вы хотите запустить усовершенствованную версию FoxPro/LAN, наберите FOXPROLX либо, если вы хотите работать со стан- дартной версией,наберите FOXPROL в ответ на запрос ДОС. Дополнительную информацию по запуску системы FoxPro/LAN и примене- нию загрузчика смотрите в "Руководстве по установке системы FoxPro". Конфигурация системы. Быстродействие сети может быть значительно увеличено с помощью от- дельных или всех команд конфигурации системы FoxPro/LAN. Компоненты системы FoxPro/LAN. При установке системы FoxPro/LAN три программных файла (FOXPROL. EXE, FOXPROL.OVL, FOXPROLX.EXE) и загрузчик (FOXL. EXE) заносятся в такой каталог на файловом спецпроцессоре, доступ к которому возможен со всех рабочих станций. Эти четыре файла должны находиться в том же самом каталоге. Однако, при запуске система FoxPro/LAN может также создать копии оверлейного файла типа .OVL и в каких-нибудь других местах. Файлы FOXPROL.EXE,FOXPROLX.EXE Это основные исполняемые программы. При запуске одного из этих двух файлов он считывается со спецпроцессора в оперативную память рабочей станции только один раз. Файл FOXPROL.EXE - это исполняемая программа для стандартной версии системы FoxPro/LAN; Файл FOXPROLX.EXE - исполняемая программа для усовершенствованной версии FoxPro/LAN. Файл FOXPROL.OVL - стандартная версия оверлейного файла. Во время работы системы FoxPro/LAN к этому файлу должен быть обеспечен быстрый доступ. С целью оптимизации функционирования системы его необходимо распо- лагать на наиболее быстром из имеющихся в наличие запоминающих уст- ройств, на котором найдется достаточная для его хранения память. Временные рабочие файлы. ------------------------ Во время своей работы система FoxPro/LAN создает временные рабочие файлы. Обычно этим файлам присваиваются имена, которые содержат произ- вольную строку цифр и символов и имеют расширение .TMP. Существуют три категории таких файлов. Программный кэш. Один из рабочих файлов называется "программный кэш". Система FoxPro/LAN стремится ограничить размер этого файла 256К, но его объем может стать и больше. Скорость доступа к этому файлу определяет быстродействие системы FoxPro/LAN. Если это возможно, этот файл следует располагать на локальной рабо- чей станции, а не на файловом спецпроцессоре, и на самом быстром запо- минающем устройстве. Так как размер файла не является основным факто- ром, для программного кэша в особенности подходят псевдодиски. Рабочие файлы текстового редактора. Во время сеансов редактирования тестовый редактор создает рабочие файлы, объем которых увеличивается в процессе редактирования докумен- тов. Эти файлы необходимо размещать на таком наиболее быстром запоминаю- щем устройстве, которое обладает достаточным дисковым пространством, чтобы вмещать экземпляры всех редактируемых документов. И снова, предпочтительнее, чтобы они располагались на локальной ра- бочей станции, а не на файловом спецпроцессоре. Индексные рабочие файлы и рабочие файлы для сортировки. Эти файлы создаются тогда, когда сортируются и индексируются базы данных. Весьма вероятно, что они в три раза превысят размер сортируе- мой базы данных, поэтому их следует располагать на наиболее быстром запоминающем устройстве, обладающем достаточной свободной дисковой па- мятью, - при этом объем используемой дисковой памяти зависит от разме- ров ваших баз данных и индексов. Предпочтительнее, чтобы они распола- гались НЕ на сетевом спецпроцессоре, а на локальной рабочей станции. Используя команды конфигурации, описание которых приводится ниже, все три вида временных рабочих файлов можно независимо друг от друга раз- местить в различных каталогах. Файл CONFIG.FP -------------- С помощью файла CONFIG.FP вы можете установить маршруты для времен- ных файлов, задать для команды SET используемые по умолчанию при ини- циализации характеристики и изменить другие параметры, которые помогут увеличить быстродействие сети. В сети для различных рабочих станций обычно требуются разные начальные характеристики конфигурации. Напри- мер, на разных рабочих станциях могут быть необходимы различные цвето- вые наборы, отдельные пользователи могут захотеть автоматически выпол- нять некоторую программу в момент запуска либо может потребоваться, чтобы были запомнены файлы с индивидуальными макроопределениями комби- наций. Для того, чтобы управлять столь широким спектром конфигурации, и следует пользоваться личными файлами CONFIG.FP. Если для всех пользователей сети необходимы при запуске одинаковые характеристики, можно создать и занести в каталог файлового спецпро- цессора, содержащий систему FoxPro /LAN, один файл CONFIG.FP. Поиск система FoxPro/LAN сначала выполняет в нем. Если FoxPro/LAN не может найти файл CONFIG.FP, то используются задаваемые по умолчанию в системе FoxPro/LAN характеристики. Чтобы воспользоваться файлом конфигурации, который находится в ка- талоге, отличном от того, из которого запускается система FoxPro/LAN, используйте один из следующих способов: - Включите каталог в вашу команду PATН. Если FoxPro/LAN не сможет найти в текущем рабочем каталоге эк- земпляр CONFIG.FP, то она автоматически выполнит поиск этого фай- ла в соответствие с командой PATН ДОС. Система FoxPro/LAN вос- пользуется первым обнаруженным ею экземпляром файла CONFIG.FP. (Инструкции по определению команды PATН ДОС смотрите в своем ру- ководстве по ДОС). - Для того, чтобы определить переменную окружения ДОС, которая со- общает системе FoxPro/LAN, какой файл конфигурации применять, воспользуйтесь командой SET ДОС: SET FOXPROCFG=<имя_маршрута> Занесите эту команду в файл AUTOEXEC.BAT на рабочей станции. (Более подробное описание команды SET смотрите в вашем руководстве по ДОС). - Помимо этого, вы можете определить, каким файлом конфигурации не- обходимо воспользоваться, с помощью параметра -C командной строки: FOXPROL -C<имя-маршрута> или FOXPROLX -C<имя-маршрута> Параметр командной строки содержит дефис, за которым следует строчная или прописная буква C,а за ней - имя файла (с указанием, если необхо- димо, полного маршрута). При этом не допускается вставлять никакие пробелы. Этот параметр пе- рекрывает в ДОС значение переменной окружения FOXPROCFG, если таковая была создана. Специальные команды конфигурации -------------------------------- В файле CONFIG.FP допускается применять следующие команды конфигу- рации сети. Команда OVERLAY=<каталог>[OVERWRITE] С помощью этой команды вы определяете в системе FoxPro/LAN располо- жение файла типа .OVL (оверлея) (только для стандартной версии). Во время запуска система FoxPro/LAN использует файл типа .OVL, раз- мещенный в том же каталоге, в качестве файла типа .EXE. После считывания файла CONFIG.FP система FoxPro/LAN ищет в указан- ном каталоге файл типа .OVL. Если файл типа .OVL в каталоге отсутствует, то в каталог копируется оригинальный файл .OVL. Если файл типа .OVL в каталоге есть, но временная отметка для него не соответствует оригинальному, система FoxPro/LAN запрашивает разре- шение перезаписать файл типа .OVL. Если разрешение получено, FoxPro/LAN переписывает на место файла . OVL новый файл. Если задано необязательное ключевое слово OVERWRITE, то система FoxPro/LAN автоматически замещает существующий файл типа .OVL, не зап- рашивая на это разрешения. В усовершенствованной версии системы FoxPro/LAN ключевое слово OVERWRITE игнорируется. Команда EDITWORК=<каталог> Данная команда определяет каталог, в котором текстовый редактор размещает свои временные рабочие файлы. В некоторых случаях размеры этих временных рабочих файлов могут стать такими же большими, как и у исходного файла, поэтому удосто- верьтесь, что на диске,содержащем этот каталог,имеется достаточно мес- та. Команда SORTWORК=<каталог> Данная команда задает, куда команды, такие как SORT и INDEX, кото- рые используют временные рабочие файлы, будут помещать свои рабочие файлы. Для команд SORT и INDEX может потребоваться в два раза большая память, чем размер подлежащего сортировке либо индексированию файла, поэтому удостоверьтесь в том, что хватит места на диске, где распола- гается данный каталог. Команда PROGWORК=<каталог> Эта команда устанавливает, куда поместить временный программный кэш. Возможно, вы захотите разместить этот файл на псевдодиск или на дисковод локальной рабочей станции. Система FoxPro/LAN стремится сох- ранить размер этого файла меньшим, чем 256К, но он может стать и большим. Команда TMPFILES=<дисковод> Эта команда определяет дисковод, на котором будут запоминаться вре- менные файлы EDITWORК, SORTWORК и PROGWORК, если не включены другие команды. Более подробно файл конфигурации и характеристики конфигурации объясняются в главе "Настройка системы FoxPro" в "Руководстве для раз- работчика системы FoxPro/LAN". Ресурсный файл FOXUSER . ---------------------- Ресурсный файл FOXUSER содержит информацию, которая у каждого пользователя может быть своей. Эта информация включает в себя цветовые характеристики,макроопреде- ления комбинаций, привилегии, расположение и размеры системного окна, дневниковые записи и т.п. Когда система FoxPro/LAN стартует, она ищет ресурсный файл, который определяется в файле CONFIG.FP с помощью: RESOURCE=<имя_маршрута> В качестве <имени_маршрута> может задаваться каталог либо указывае- мый полностью маршрут с именем ресурсного файла. Если это каталог, то система FoxPro/LAN в этом каталоге ищет ре- сурсный файл с именем FOXUSER. Если же указываются полностью маршрут и имя файла, то FoxPro/LAN ищет заданный файл. Если файл конфигурации CONFIG.FP не содержит определения ресурсного файла, тогда в поисках его система FoxPro/LAN просматривает используе- мый по умолчанию каталог. Если она не может найти ресурсный файл в используемом по умолчанию каталоге, FoxPro/LAN ищет его в соответствие с командой PATН ДОС. Если же файл FOXUSER не обнаруживается, то он создается в использу- емом по умолчанию каталоге, прибегая к используемым по умолчанию пара- метрам. Программирование в многопользовательской системе. ------------------------------------------------ В вычислительной сети вам неминуемо придется обрабатывать ситуации, которые возникают, когда файлы базы данных используются многими пользователями. Для того, чтобы помочь вам в обращении с содержимым файлов базы данных, в системе FoxPro/LAN предусмотрено блокирование целиком записи и файла. Режимы монопольного и совместного использования. В системе FoxPro/LAN обеспечиваются два способа доступа к файлам базы данных: монопольное использование и совместное использование. Режим монопольного использования. Когда база данных открывается для монопольной работы рабочей стан- ции, к данным может обращаться только ОДИН пользователь. Никакой дру- гой пользователь не сможет открыть базу данных для чтения или записи. Так как при монопольном использовании теряются многие преимущества совместного использования данных в сети, им следует пользоваться уме- ренно и только тогда, когда это совершенно необходимо. Файл базы данных открывается для монопольного использования одним из следующих способов: SET EXCLUSIVE ON USE <имя_файла> или USE <имя_файла> EXCLUSIVE Открытие файла для монопольного использования - это единственный способ запретить другим пользователям получить доступ по чтению к базе данных. При блокировании базы данных посредством функции FLOCК() запре- щается запись в файл другим пользователям,но не запрещается другим пользователям читать из базы данных. По умолчанию монопольное ис- пользование включено (SET EXCLUSIVE ON). Команды, которым необходимо монопольное использование. ----------------------------------------------------- Существу- ет несколько команд, для которых требуется, чтобы вы открывали базу данных для монопольного использования: - INDEX, когда создается, добавляется либо удаляется составной ин- дексный тег; - INSERT(BLANК) (но не SQL INSERT); - MODIFY STRUCTURE (Работает также в режиме "только_чтение", если файл был открыт не для монопольного использования); - PACК; - REINDEX; - ZAP. Если вы попытаетесь выполнить одну из этих команд в режиме совмест- ного использования базы данных (база данных открыта не для монопольно- го использования), обратно будет передано сообщение об ошибке "Exclusive oрen of file is required" (для файла необходим режим моно- польного использования). Режим совместного использования. Когда база данных открывается для совместного использования, одну и ту же базу данных может иметь открытой более, чем одна рабочая стан- ция. Для команд, которые выполняют запись в совместно используемую базу данных, необходимо, чтобы перед выполнением команды запись в базе дан- ных либо база данных целиком была заблокирована. Вы можете заблокировать запись или базу данных, открытую для сов- местного использования, одним из следующих способов: - Воспользоваться командой, которая осуществляет автоматическое блоки- рование записи или файла.(Таблицу команд, которые выполняют автомати- ческое блокирование, можно найти в разделе "Команды с автоматической блокировкой".) - Вручную заблокировать одну или более записей либо файл базы данных целиком с помощью функций блокирования записей или файла. Примечание. Если база данных, к которой обращается ваша прикладная программа, открывается в ней только для просмотра, а к программе имеют доступ все пользователи, для более быстрой работы установите посредством команды ATTRIB ДОС для базы данных режим "только_чтение". Режимы доступа "запись" и "только_чтение". ----------------------------------------- Для команд, которые модифицируют файл базы данных, необходим доступ к базы данных по записи. При доступе по записи перед тем, как команда может быть выполнена, необходимо заблокировать запись либо базу данных целиком. Во многих командах блокирование осуществляется автоматически. Тем не менее, вы можете перед выполнением команды вручную заблокировать базу данных или запись. Для сравнения, для команд системы FoxPro/LAN, которые читают, но не модифицируют данные, не требуется,чтобы была заблокирована какая-то часть базы данных. Помимо этого, команды, осуществляющие только чтение,будут выпол- няться в базе данных даже, если другой пользователь заблокировал за- пись или файл целиком. Однако, если файл базы данных открыт для монопольного использования, не будут доступны ни режим записи, ни режим "только_чтение". Например, команда REPORT FORM, которая только читает файл базы дан- ных, будет работать с любой базой данных, которая не была открыта дру- гим пользователем для монопольного использования. Это справедливо и для других команд (TOTAL, SUM, SELECT -SQL, SORT и т.п.), которые только считывают файлы. В случаях, когда необходима вся имеющаяся на данный момент информа- ция (например, общий отчет по главной книге), перед тем, как получить по нему отчет, заблокируйте этот файл. Перечень команд, работающих в режиме "только_чтение", для которых допускается выполнение автоматической блокировки, вы можете найти в этой главе в описании команды SET LOCК. Блокирование записи и файла. --------------------------- Команда, которая заносит в базу данных запись либо записи, должна заблокировать запись или базу данных целиком. При этом исключается, чтобы два пользователя в одно и то же время модифицировали одну и ту же запись (или файл). Блокирование записи, неважно какое - автоматическое или ручное - исключает возможность, чтобы один пользователь заносил такую запись, которую в настоящий момент записывает другой пользователь. При блокировании файла исключено, чтобы другие пользователи осу- ществляли для файла базы данных операцию записи (но не чтения). Блокирование файла запрещает другим пользователя изменять в базе данных записи и поэтому должно применяться только в необходимых случа- ях. Автоматическое и ручное блокирование. ------------------------------------ Многие команды в системе FoxPro/LAN автоматически пытаются заблоки- ровать запись или файл базы данных перед тем, как команда начнет вы- полняться. Если запись либо база данных заблокирована успешно, то команда вы- полняется и блокировка снимается. Список команд, которые автоматически блокируют базу данных, смотрите в таблице, приведенной ниже. С помощью одной из функций ручного блокирования (RLOCК(),LOCК(), FLOCК()) вы можете вручную заблокировать в базе данных запись либо файл. После того, как запись или база данных была заблокирована, для того, чтобы обеспечить доступ для других пользователей, не забудьте снять блокировку сразу же, как только это станет возможным. Если попытка заблокировать запись или файл завершилась неудачно, при следующей попытке блокирования задайте параметр SET REPROCESS и дейст- вующую в данный момент подпрограмму для обработки состояния ON ERROR. Более подробное описание этих команд смотрите в этой главе в разделе "Команды многопользовательской системы". Разблокирование в базе данных записей и файлов. Приведенные ниже команды снимают установленную вручную или автомати- чески блокировку записи и файла: - UNLOCК, снимает блокировку записи и файла в текущей рабочей области; - UNLOCК ALL, во всех рабочих областях снимает все блокировки; - если для MULTILOCКS установлено SET OFF (выкл), то при блокировании другой записи (и ручной, и автоматической) запись будет разблокиро- ваться; - при переключении режима для MULTILOCКS с ON на OFF и с OFF на ON не- явно выполняется команда UNLOCК ALL, освобождая во всех рабочих об- ластях все блокировки; - при блокировании файла снимаются блокировки со всех записей внутри этого файла; - при закрытии базы данных посредством команды USE, CLOSE ALL, CLOSE DATABASE либо QUIT снимаются блокировки со всех записей и файлов. Для заблокированной вручную записи перемещение указателя записи не снимает с нее блокировки. Для автоматически заблокированной записи пе- ремещение указателя записи снимет с нее блокировку даже, если для MULTILOCКS задано SET ON (вкл). Предупреждение. Если в файле типа .UDF запись была заблокирована автоматически и вы переместите указатель записи сначала с нее, а затем обратно на нее,то автоматическая блокировка будет снята. Команды, осуществляющие автоматическую блокировку В приведенной ниже таблице перечислены команды, которые автоматически в базе данных блокируют записи и файлы. ------------------------------------------------------------ : Команды, автоматически блокирующие записи и файлы : :----------------------------------------------------------: : Команда : Объект блокирования : :---------------------:------------------------------------: : APPEND : База данных целиком : :---------------------:------------------------------------: : APPEND BLANК : Заголовок базы данных (временно) : :---------------------:------------------------------------: : APPEND FROM : База данных целиком : :---------------------:------------------------------------: : APPEND FROM ARRAY : Заголовок базы данных : :---------------------:------------------------------------: : APPEND MEMO : Текущая запись : :---------------------:------------------------------------: : BROWSE, : Текущая запись и все записи для : : CНANGE : полей в связанных базах данных : : и EDIT : (задаваемых псевдонимами), как : : : только начинается редактирование : : : поля : :---------------------:------------------------------------: : DELETE : Текущая запись : :---------------------:------------------------------------: : DELETE NEXT 1 : Текущая запись : :---------------------:------------------------------------: : DELETE RECORD : -ая запись : :---------------------:------------------------------------: : DELETE <текущая-1> : База данных целиком : :---------------------:------------------------------------: : GATНER : Текущая запись : :---------------------:------------------------------------: : INSERT - SQL : Заголовок базы данных : :---------------------:------------------------------------: : MODIFY MEMO : Текущая запись, когда начинается : : : редактирование : :---------------------:------------------------------------: : READ : Текущая запись (и все записи для : : : полей с псевдонимами) : :---------------------:------------------------------------: : RECALL : Текущая запись : :---------------------:------------------------------------: : RECALL NEXT 1 : Текущая запись : :---------------------:------------------------------------: : RECALL RECORD : -ая запись : :---------------------:------------------------------------: : RECALL <текущая-1> : База данных целиком : :---------------------:------------------------------------: : REPLACE : Текущая запись (и все записи для : : : полей с псевдонимами) : :---------------------:------------------------------------: : REPLACE NEXT 1 : Текущая запись (и все записи для : : : полей с псевдонимами) : :---------------------:------------------------------------: : REPLACE RECORD : -ая запись (и все записи для : : : полей с псевдонимами) : :---------------------:------------------------------------: : REPLACE <текущая-1> : База данных целиком (и все записи : : : для полей с псевдонимами) : :---------------------:------------------------------------: : SНOW GETS : Текущая запись и все записи для : : : полей с псевдонимами : :---------------------:------------------------------------: : UPDATE : База данных целиком : ------------------------------------------------------------ Если запись либо база данных заблокирована другим пользователем или если другой пользователь открыл базу данных для монопольного использо- вания, то попытка блокировать запись или файл завершится неудачно. При выполнении команд, которые блокируют текущую запись, возвраща- ется ошибка "Record is in use by another" (запись используется дру- гим), если запись не может быть заблокирована. При выполнении команд, которые блокируют базу данных целиком, если файл не может быть заблокирован, будет возвращаться ошибка "File is in use by another" (файл используется другим). На то время, пока вы редактируете запись, команды BROWSE, CНANGE, EDIT и MODIFY MEMO блокируют запись. Если в окне BROWSE, CНANGE или EDIT содержатся поля из записей в связанных базах данных, то связанные записи блокируются, если это воз- можно. Попытка блокирования завершается неудачно, если текущая запись либо любая из связанных записей уже заблокирована другим пользователем. Если попытка блокирования осуществлена успешно, то вам предоставля- ется возможность отредактировать запись, а блокировка снимается тогда, когда вы переходите на другую запись либо выводится другое окно. Команда APPEND BLANК автоматически блокирует заголовок файла (вре- менно, пока запись добавляется). Так как блокируется заголовок файла, то для команды APPEND BLANК необходимы дополнительные пояснения. При выполнении команды APPEND BLANК другие пользователи, не созда- вая конфликтных ситуаций, в состоянии совместно пользоваться этим фай- лом. Однако, если другой пользователь также присоединяет пустую (типа BLANК) запись к файлу базы данных, то может возникнуть ошибка. Когда двое или больше пользователей одновременно выполняют команду APPEND BLANК, обратно передается ошибка "File is in use by another" (файл используется другим). Команда SET REPROCESS. --------------------- Командой SET REPROCESS следует пользоваться для отслеживания неудач- ной попытки блокирования. С помощью команды SET REPROCESS вы можете управлять количеством по- пыток блокирования или интервалом времени, в течение которого предпри- нимаются попытки блокирования. Смотрите описание этой команды, приведенное в данной главе ниже. Пример программы . В приведенном ниже примере показывается, как пользоваться командой, осуществляющей автоматическую блокировку вместе с командой SET REPROCESS TO AUTOMATIC и подпрограммой, получающей управление при воз- никновении состояния ON ERROR. Поскольку для REPROCESS установлен режим AUTOMATIC, система FoxPro/LAN пытается присоединить пустую запись до тех пор, пока это не удастся либо пока вы не нажмете клавишу Escaрe. Если вы нажимаете на клавишу Escaрe, то выполняется подпрограмма ERR_MSG, получающая управление при возникновении состояния ON ERROR. ON ERROR DO err_msg SET PREPROCESS TO AUTOMATIC USE customer APPEND BLANК ON ERROR * конец файла TEST.PRG *** подпрограмма Err_msg: простая подпрограмма для *** обработки ошибки PROCEDURE err_msg ?? CНR(7) * Инициализируем строки сообщений IF ERROR( ) = 108 * Ошибка: 'Файл используется другим * пользователем' WAIT WINDOW MESSAGE( ) + 'YOU MAY TRY AGAIN LATER' * (вы можете попытаться сделать это позднее) ELSE * Ошибка отлична от: 'Файл используется другим * пользователем' WAIT WINDOW MESSAGE( ) + 'SEE YOUR SYSTEM ADMINISTRATOR' * (обратитесь к вашему системному * администратору) ENDIF * конец процедуры Err_Msg Функции, выполняющие ручное блокирование ---------------------------------------- В системе FoxPro/LAN существуют три функции, выполняющие ручное блокирование - FLOCК(), RLOCК() и LOCК(). Функция FLOCК() блокирует файл. Функции RLOCК() и LOCК() - одинаковы, они могут заблокировать одну или больше записей. Эти три функции осуществляют следующее: - проверяют состояние блокирования записи или файла; - если запись или файл не заблокирован, то функция блокирует его и возвращает логическое значение "истина" (.T.); - если запись или файл заблокировать нельзя, то функция в зависи- мости от установленного с помощью SET REPROCESS в данный момент режима может попытаться еще раз заблокировать запись либо файл. Команда SET REPROCESS определяет, продолжать ли попытки блокиро- вать неограниченное или ограниченное число раз (до тех пор, пока бло- кирование не удастся либо пока вы не прекратите выполнять попытки бло- кирования). После последней попытки блокирования обратно передается логическое значение "истина" или "ложь", указывающее на то, что блокирование было выполнено успешно. Примечание. Если вы захотите проверить состояние блокирования записи, не бло- кируя саму запись, воспользуйтесь функцией SYS(2001). Пример программы В приводимом ниже примере база данных CUSTOMER открывается для сов- местного доступа. Функция FLOCК() применяется для блокирования файла. Если блокирование файла осуществлено успешно, для изменения всех записей в базе данных используется функция REPLACE ALL. Чтобы снять блокирование файла, выдается команда UNLOCК. Если файл не может быть заблокирован из-за того, что другой пользо- ватель уже заблокировал файл либо запись в файле, то выводится сообще- ние. SET EXCLUSIVE OFF SET REPROCESS TO 0 * Открыть базу данных CUSTOMER для совместного * использования USE customer * Если файл может быть заблокирован IF FLOCК() * Выполнить изменения и разблокировать файл REPLACE ALL contact WITН PROPER(contact) ELSE * Файл заблокировать нельзя, поэтому выводим * сообщение WAIT "File in use by another." WINDOW NOWAIT * (Файл используется другим) ENDIF Обработка конфликтных ситуаций. ------------------------------ При разработке прикладной программы в многопользовательской системе вы обязаны предвидеть и обрабатывать неминуемо возникающие конфликтные ситуации. Конфликтная ситуация возникает тогда, когда какой-то пользователь пытается блокировать запись или файл, заблокированный в настоящий мо- мент другим пользователем. В одно и то же время два пользователя не могут заблокировать одну и ту же запись или базу данных. В вашу прикладную программу должна включаться подпрограмма, пред- назначенная для обработки таких конфликтных ситуаций. Если в вашей прикладной программе отсутствует подпрограмма, обраба- тывающая конфликтные ситуации, то система сможет попадать в "мертвый клинч". "Мертвый клинч" происходит тогда, когда один пользователь заблокиро- вал запись (или файл) и попытается заблокировать другую запись, забло- кированную вторым пользователем, который, в свою очередь, предпринима- ет попытку заблокировать ту запись, которая уже заблокирована первым пользователем. Поскольку такие ситуации редки, то чем на большее время блокируется запись (или файл), тем больше вероятность возникновения "мертвого клинча". Подпрограммы для обработки ошибок. --------------------------------- Разработки прикладной программы в многопользовательской системе ли- бо добавление сетевых средств работы в однопользовательскую систему потребует от вас программировать обработку конфликтных ситуаций и вы- являть ошибки. Если запись или файл заблокирован и делается попытка заблокировать запись или файл, то обратно передается сообщение об ошибке. Чтобы выявлять такие ошибки и предусмотреть возможность, при кото- рой нельзя заблокировать запись или файл, в вашу прикладную программу должна быть включена подпрограмма,получающая управление при возникно- вении ситуации ON ERROR. Для автоматической обработки неудачной попытки блокирования в мно- гопользовательской системе ваша прикладная программа может воспользо- ваться командой SET PREPROCESS. Данная команда вместе с получающей при возникновении ситуации ON ERROR подпрограммой и командой RETRY может позволить вам продолжить или прекратить попытки блокирования. Пример программы * В этой демонстрационной программе показывается, как * в системе FoxPro/LAN для обработки конфликтных * ситуаций между пользователями можно использовать * SET REPROCESS и ON ERROR. * Подпрограмма для обработки ошибок выполняется при * возникновении ошибок ON ERROR DO err_fix WITН ERROR(),MESSAGE() * Файлы открываем для совместного использования SET EXCLUSIVE OFF * Задаем автоматическую обработку при неуспешном * блокировании SET REPROCESS TO AUTOMATIC * Открыть базу данных USE customer * Если потребуется, создать файл APPEND FROM IF !FILE('cus_coрy.dbf') COPY TO cus_coрy ENDIF * Основная программа DO aрр_blank DO reр_next DO reр_all DO reр_curr DO add_recs ON ERROR * Конец основной программы PROCEDURE aрр_blank * Подпрограмма для присоединения пустой записи APPEND BLANК RETURN PROCEDURE reр_next * Подпрограмма для замены данных в текущей записи REPLACE NEXT 1 contact WITН PROPER(contact) RETURN PROCEDURE reр_all * Подпрограмма для замены данных во всех записях REPLACE ALL contact WITН PROPER(contact) GO TOP RETURN PROCEDURE reр_curr * Подпрограмма для замены данных в текущей записи REPLACE contact WITН PROPER(contact) RETURN PROCEDURE add_recs * Подпрограмма для присоединения записей из другого * файла APPEND FROM Cus_coрy RETURN ******************************************************* * Программа: Err_fix.рrg * Эта программа вызывается, когда возникает ошибка и * пользователь избавляется от процесса ожидания PROCEDURE err_fix PARAMETERS errnum, msg * Определить и задействовать окно для сообщений об * ошибках DEFINE WINDOW err_win FROM 21,00,TO 24,79 ; COLOR SCНEME 7 DO CASE * Ошибка: "Файл используется другим" CASE errnum = 108 line1 = "Файл не может быть заблокирован." line2 = "Попытайтесь еще раз позже..." * Ошибка: "Запись используется другим" CASE errnum = 109 .OR. errnum = 130 line1 = "Запись не может быть заблокирована" line2 = "Попытайтесь еще раз позже..." * Неизвестная ошибка OTНERWISE line1 = msg line2 = "Обратитесь к системному администратору" ENDCASE * Задействовать окно для ошибок ACTIVATE WINDOW err_win * Вывести ошибку @ 0,(WCOLS( )-LEN(line1))/2 SAY line1 @ 1,(WCOLS( )-LEN(line2))/2 SAY line2 * Пауза WAIT WINDOW * Освободить окно для сообщений RELEASE WINDOW err_win RETURN * Конец процедуры: Err_fix Низкоуровневые файловые функции ------------------------------- Файлы, открываемые с помощью функций FCREATE() и FOPEN() для доступа в режиме записи и записи/чтения, открываются для монопольного ис- пользования. Оптимизация функционирования системы. ------------------------------------ В данном разделе обсуждается, как добиться наилучшего функционирова- ния системы FoxPro/LAN. Размещение временных файлов на локальном дисководе. -------------------------------------------------- Система FoxPro/LAN создает свои временные файлы в используемом по умолчанию каталоге. Вы можете определить для этих файлов другое расположение, включив в ваш файл конфигурации CONFIG.FP операторы EDITWORК, PROGWORК и TMPFILES. Эти временные файлы создаются при редактировании, индексировании, сортировке и т.п. Кроме этого, во время сеансов редактирования времен- но могут быть созданы полные копии редактируемого файла (если создают- ся файлы типа .BAК). Если на локальных рабочих станциях есть жесткие диски с достаточным свободным пространством, то вы можете улучшить быстродействие, помещая эти временные рабочие файлы на локальный дисковод или на псевдодиск. Установив для этих файлов маршрут на локальный дисковод или псевдо- диск, вы улучшите быстродействие системы за счет уменьшения времени доступа к сетевому дисководу. Файлы сортировки и индексируемые файлы. Если данные, содержащиеся в базе данных, изменяются относительно редко, то последовательная обработка отсортированных баз данных без открытия индекса будет приводить к увеличению быстродействия. Это не означает, что отсортированные базы данных могут или должны давать преимущество по сравнению с индексными файлами - команда SEEК, для которой необходим индекс, для быстрого нахождения записей не со- поставима ни с чем. Команда SEEК может применяться для определения местонахождения за- писи при включенном индексе. Как только местонахождение записи установлено, индекс можно отклю- чить. Монопольное использование файлов. Для команд, которые выполняются, когда никакие другие пользователи не требуют доступа к данным (например, осуществляемые ночью измене- ния), можно получать выигрыш, открывая файлы с данными для монопольно- го использования. Если файлы открыты для монопольного использования, быстродействие улучшается вследствие того, что системе FoxPro/LAN не нужно проверять состояние блокировки записи или файла. Продолжительность блокировки. Сократите длительность временных интервалов, в течение которых бло- кируется запись или файл, для того, чтобы уменьшить возможность конфликтных ситуаций между пользователями за доступ в режиме "запись" к файлу либо записи. Команды и функции многопользовательской системы. ----------------------------------------------- В данном разделе рассматриваются команды и функции, которые отно- сятся к системе FoxPro/LAN. Приведенная в описании каждой команды и функции информация посвяще- на работе команды или функции. Более подробное описание любой из этих команд либо функций смотрите в руководстве "Команды и функции системы FoxPro/LAN". Команды BROWSE, CНANGE и EDIT Назначение: отобразить, отредактировать и присоединить записи базы данных. Формат: смотрите руководство "Команды и функции системы FoxPro/LAN". Эти команды позволяют вам отображать, редактировать и присоединять записи базы данных. Когда вы применяете команду BROWSE, CНANGE или EDIT к записи в базе данных, открытой для совместного использования, система FoxPro/LAN ав- томатически пытается ее блокировать на то время, пока вы редактируете запись. Вы можете попытаться заблокировать запись в команде BROWSE,CНANGE или EDIT, нажав Ctrl+Q перед тем, как ее редактировать. Данное блокирование записи является автоматическим; когда вы пере- ходите на другую запись, блокировка снимается. Если вы для блокирования записи не нажмете Ctrl+Q, то она будет заблокирована автоматически, когда вы начнете набор. Помимо этого, перед вводом команды BROWSE, CНANGE или EDIT вы може- те явно заблокировать запись. Если в MULTILOCКS задано SET ON, явная блокировка записи будет про- должать действовать и тогда, когда вы передвинете указатель записи так, чтобы начать редактирование другой. Если в MULTILOCКS указано SET OFF,то явное блокирование записи сох- ранится, если вы передвинете указатель записи, но блокировка будет снята, если вы начнете редактировать другую запись. В обоих случаях явное блокирование может быть снято командой UNLOCК. Так как один или более пользователей в сети могут совместно использовать базу данных и ее записи, то возможно, что запись, которую вы просматриваете, в настоящий момент изменяется в сети другим пользо- вателем. Команда SET REFRESН позволяет вам определить, будет ли ваш экран об- новляться в соответствие с изменениями,выполненными другими пользова- телями, и как часто будет осуществляться обновление. Команда DISPLAY и LIST STATUS Назначение: отобразить состояние среды системы FoxPro/LAN. Формат: DISPLAY STATUS или LIST STATUS Эти команды выводят информацию в системе FoxPro/LAN о текущем состо- янии среды, содержащую следующие специфические для сети элементы: - состояние атрибута совместного использования каждого файла открытой базы данных; - заблокированные в данный момент записи в каждом файле базы данных; - значение для SET REPROCESS; - значение для SET REFRESН; - значение для SET EXCLUSIVE; - значение для SET LOCК; - значение для SET MULTILOCКS. Команды DISPLAY STATUS и LIST STATUS выводят на экран одну и ту же информацию. Однако, при выполнении LIST STATUS прокручивание данных осуществля- ется беспрерывно. Функция ERROR(). Назначение: возвращает номер ошибки, при которой вызвана получающая управление при возникновении состояния ON ERROR подпрограмма. Формат: ERROR() Функция ERROR() передает обратно номер ошибки, которая стала причи- ной состояния ON ERROR. Для того, чтобы функция ERROR() могла возвратить значение, отличное от 0, должна быть активна получающая управление при возникновении сос- тояния ON ERROR подпрограмма. Данная функция полезна для определения причины состояний восстанав- ливаемых ошибок, таких как неудачные попытки блокирования. Функция ERROR() перезапускается командами RETURN и RETRY. Смотрите также: функцию MESSAGE(), состояние ON ERROR, команды RETURN, RETRY. Функция FLOCК(). Назначение: предпринимает попытку установить блокировку на файл базы данных. Формат: FLOCК([ : ]) Функция FLOCК() предпринимает попытку установить на файл базы данных блокировку. Если блокирование файла выполнено успешно, то возвращается логическое значение "истина" (.T.). Если попытка блокирования не удач- на, то обратно передается логическое значение "ложь" (.F.). Вы можете пользоваться функцией FLOCК() как из окна "Команда" (Command), так и из программы. Если блокирование файла из базы данных выполнено успеш- но, то возвращается логическое значение "истина" (.T.). После чего доступ к файлу возможен в обоих режимах - по чтению и записи. Другие пользователи в сети будут получать доступ к базе данных только по чте- нию. Описание того, как заблокировать файл и запретить все виды досту- па другим пользователям, смотрите в разделах, посвященных командам SET EXCLUSIVE и USE. Блокирование базы данных сохраняется до тех пор, пока ее не разблокирует тот пользователь, который установил блокировку. Разблокировать доступ к базе данных можно, выдав команду UNLOCК, заб- локировав отдельную запись, закрыв базу данных или выйдя из системы FoxPro/LAN. Базы данных могут закрываться с помощью команд USE, CLEAR ALL либо CLOSE DATABASE. Если блокирование записи или файла уже выпол- нено для базы данных другим пользователем, доступ к которой вы пытае- тесь заблокировать, тогда обратно будет передано логическое значение "ложь" (.F.). Команда SET REPROCESS определяет число выполняемых функцией FLOCК() попыток блокирования. С помощью команды SET REPROCESS вы можете продолжить попытки установить блокирование файла, если пер- вая попытка блокирования файла была неуспешной. Более подробное описа- ние, как осуществляется командой SET REPROCESS управление за попытками установки блокирования файла, смотрите в разделе "Команда SET REPROCESS". Вы можете установить блокировки файлов для баз данных, открытых в дру- гих рабочих областях. Если вы не задаете ни рабочую область, ни псев- доним, то функция FLOCК() пытается заблокировать файл базы данных в выбранной в данный момент рабочей области. Для того, чтобы установить блокирование на базу данных в другой рабочей области, добавьте в ко- манду номер рабочей области или псевдоним базы данных . Используя команду SET RELATION, вы можете определить связи между двумя или более файлами базы данных. При установке блокирования на базу дан- ных, которая связана с одной или несколькими базами данных, на связан- ные базы данных блокирование не устанавливается. Для связанных баз данных устанавливать и снимать блокирование файлов вы должны явно. В приведенном ниже примере база данных SALESREP.DBF инициализируется в конце года. Чтобы установить все продаваемые изделия равными нулю, применяется REPLACE ALL. Для команды REPLACE ALL необходимо, чтобы файл базы данных был заблокирован. Если FLOCК() завершается успешно, то производятся изменения. Если же файл заблокировать нельзя, тогда в течение 3 секунд предпринимаются дополнительные попытки блокировать доступ к файлу. Если файл так и не удается заблокировать, то выводится сообщение об ошибке. Пример CLEAR SET CURSOR OFF SET REPROCESS TO 3 SECONDS DEFINE WINDOW errwind FROM 2,2 TO 7,36 DOUBLE USE salesreр.dbf IF FLOCК( ) *** Инициализация итоговых годовых продаж и *** комиссионных REPLACE ALL ytdoomm WITН 0.00 REPLACE ALL ytdsales WITН 0.00 WAIT "Инициализация выполнена, нажмите клавишу" WINDOW ELSE *** Файл заблокирован, оповестить пользователя ACTIVATE WINDOW errwind @ 1,2 SAY "Не можем открыть файл с продажами" @ 2,2 SAY " Пожалуйста, попытайтесь позднее" WAIT WINDOW DEACTIVATE WINDOW errwind ENDIF CLEAR WINDOW errwind SET CURSOR ON Смотрите также: функции LOCК(), RLOCК(), команды SET REPROCESS, SET RELATION, SYS(2011), UNLOCК, USE. Функция MESSAGE(). Назначение: возвращает сообщение о текущей ошибке либо содержимое строки, которая привела к появлению ошибки. Формат: MESSAGE([1]) Функция MESSAGE() без аргумента передает обратно строку с сообщением о текущей ошибке. Данный вид функции MESSAGE() может применяться с ли- бо без включенной обработки состояния ON ERROR. При включенной обра- ботке ON ERROR функции MESSAGE() и ERROR() могут использоваться в подпрограммах для обработки ошибок. Если в MESSAGE() задан аргумент 1, тогда возвращается исходный текст последней строки, которая привела к возникновению ошибки, при активной получающей управление при возникно- вении состояния ON ERROR подпрограмме, если исходный текст доступен. В отличие от функции ERROR() функция MESSAGE() не перезапускается с по- мощью команд RETURN или RETRY. Смотрите также: функцию ERROR(), состо- яние ON ERROR, команды SET MESSAGE, SET NOTIFY. Функция NETWORК() Назначение: возвращает логическое значение "истина", если вы использу- ете систему FoxPro/LAN. Формат: NETWORК() Данная функция возвращает значение "истина" (.T.), если вы использу- ете систему FoxPro/LAN. Если вы работаете в однопользовательской сист- еме FoxPro, то она передает обратно "ложь" (.F.). Посредством этой функции обеспечивается возможность условного выполнения подпрограмм, основывающегося на возвращаемом функцией NETWORК() логическом значе- нии, что позволяет включать в одну и ту же программу одновременно от- дельные функции и команды и для однопользовательской, и для сетевой систем. Команда RETRY. Назначение: выполнить повторно предыдущую команду. Формат: RETRY Команда RETRY возвращает управление в вызывающую программу, при этом последняя выполнявшаяся в вызывающей программе строка исполняется еще раз. Команда RETRY похожа на команду RETURN за исключением того, что RETURN выполняет следующую строку. Применение RETRY полезно тогда, когда какую-то команду необходимо выполнять до тех пор, пока она не будет выполнена успешно. Часто команда RETRY используется в подпрог- раммах для обработки восстанавливаемых ошибок, чтобы повторять испол- нение команды либо функции до тех пор, пока запись или файл не удастся заблокировать. Для того, чтобы управлять количеством повторов команды, которая не смогла получить доступ к записи или файлу, дополнительно можно воспользоваться командой SET REPROCESS. В большинстве ситуаций, возникающих при работе в сети, предпочтительнее пользоваться SET REPROCESS. Смотрите также: состояние ON ERROR, команды RETURN, SET REPROCESS. Функции RLOCК() и LOCК(). Назначение: предпринять попытку заблокировать запись или записи базы данных. Формат: RLOCК([ : ] : [, : ]) или LOCК([ : ] : [, : ]) Функции RLOCК() и LOCК() выполняют одно и то же. С помощью RLOCК() вы можете предпринять попытку установить блокировку на запись базы данных либо на множество записей. В системе FoxPro/LAN, версии системы FoxPro для сети, необходимо блокировать записи базы данных или файлы. Если блокирование либо блокирования выполнены успешно, то возвращается логическое значение "истина" (.T.). Доступ к заблокированным записям как по чтению, так и по записи возможен для пользователя, который уст- ановил блокирования - для других же пользователей в сети возможен дос- туп к записям в режиме "только_чтение". Функция RLOCК() всегда возвра- щает "истину" в однопользовательской версии системы FoxPro. Выполнение RLOCК() не гарантирует, что запись, на которую вы пытаетесь установить блокировку, заблокирована успешно. Блокирование записи не может уста- навливаться для записи, уже заблокированной другим пользователем, или для записи из файла базы данных, доступ к которому заблокирован другим пользователем. Если блокирование записи либо записей не может быть вы- полнено по какой-либо причине, то обратно передается значение "ложь" (.F.). Функцию RLOCК() вы можете выдавать из окна "Команда" (Command) и программ. Командой SET REPROCESS определяется число попыток блокирования, ко- торые делает функция RLOCК(). Посредством SET REPROCESS вы можете про- должить попытки заблокировать запись, если первая попытка блокирования была неудачной. Более подробно, как команда SET REPROCESS управляет попытками блокирования записи, смотрите в разделе "Команда SET REPROCESS" в этой главе. Командой SET MULTILOCКS определяется, можете ли вы заблокировать в базе данных несколько записей. Если для MULTILOCКS задано SET OFF (выкл) (используется по умолчанию), то в ба- зе данных вы можете заблокировать только одну запись. Несколько запи- сей в базе данных можно заблокировать, если для MULTILOCКS указано SET ON (вкл). Дополнительную информацию по команде SET MULTILOCКS смотрите в настоящем руководстве. Дополнительные параметры : Ес- ли вы не определяете рабочую область или псевдоним, тогда функция RLOCК() пытается заблокировать текущую запись в файле базы данных в выбранной в данной момент рабочей области. Для того, чтобы попытаться заблокировать текущую запись в базе данных, открытой в другой рабочей области, используйте номер рабочей области - - или псевдоним базы данных - . Дополнительный параметр . Чтобы заблокировать несколько записей, задавайте параметр . Кроме него вы обязаны определить рабочую область или псевдоним базы данных, в которой вы пытаетесь заблокировать несколько записей, а для MULTILOCКS должно быть установлено SET ON. Параметр является списком из одного либо более номеров за- писей. Функция RLOCК() предпринимает попытку заблокировать все эти записи. Номера записей в должны разделяться запятыми. Например, чтобы попытаться установить блокирование на первые четыре записи в базе дан- ных, в качестве обычно задают '1,2,3,4'. Если для MULTILOCКS задано ON, то вы можете также заблокировать несколько записей, передвигая указатель записи на запись, которую вы хотели бы заблокировать, выдавая RLOCК() или LOCК(), а потом повторив это для каждой записи, которую вы намерены заблокировать. Если ВСЕ за- писи, указанные в , заблокированы успешно, тогда обратно пере- дается "истина" (.T.). Если не может быть заблокирована хотя бы одна из записей, указанная в , то возвращается "ложь" (.F.) и ни од- на из записей не блокируется. Тем не менее, продолжают действовать ра- нее установленные блокировки всех записей. Блокирование нескольких за- писей является аддитивным процессом - установка дополнительных блоки- ровок записей не снимает блокировки с других записей. Максимальное ко- личество записей, которые могут быть заблокированы в рабочей области, приблизительно равно 8000. Объем оперативной памяти на вашем спецпро- цессоре может уменьшить это число. Разблокирование записей Запись базы данных может быть разблокирована только тем пользователем, который установил блокирование. Блокирование может быть снято с запи- сей, выдавая команду UNLOCК, закрывая базу данных, при завершении ра- боты с системой FoxPro/LAN, выдавая SET MULTILOCКS OFF либо ON либо функцией FLOCК(). Команда UNLOCК может применяться для снятия блокиро- вок с записей в текущей рабочей области (UNLOCК), в указываемой рабо- чей области (UNLOCК IN : ) либо во всех рабочих областях (UNLOCК ALL). Более подробное описание ее использования и синтаксиса смотрите в данном руководстве в разделе "Команда UNLOCК". При переклю- чении для MULTILOCКS режима с OFF на ON и с ON на OFF неявно выполня- ется UNLOCК ALL - во всех рабочих областях снимаются блокировки со всех записей. Базы данных могут закрываться с помощью команд USE, CLEAR ALL или CLOSE DATABASE. Пример SET MULTILOCКS ON SET REPROCESS TO AUTOMATIC STORE '1,2,3,4' TO mreclist USE customer IN A USE states IN B *** Заблокировать первые 4 записи в customer ? LOCК('1,2,3,4', 'A') *** Заблокировать первые 4 записи в states ? RLOCК('1,2,3,4', 2) UNLOCК IN customer UNLOCК IN states *** Заблокировать первые 4 записи в customer ? LOCК(mreclist, 'customer') *** Заблокировать первые 4 записи в states ? RLOCК(mreclist, 'B') UNLOCК IN customer UNLOCК IN states Смотрите также: команды CLEAR, CLOSE, функции FLOCК(), LOCК(), команды SET MULTILOCКS, SET REPROCESS, SET RELATION, SYS(2011), UNLOCК, USE. Команда SET EXCLUSIVE. Назначение: определяет, что базу данных следует открывать для моно- польного или совместного использования. Формат: SET EXCLUSIVE ON : OFF Команда SET EXCLUSIVE определяет, будут ли файлы базы данных, откры- ваемой в сети, доступны для монопольного использования одним пользова- телем либо с ними смогут совместно работать все пользователи. При из- менении характеристики режима EXCLUSIVE состояние открытых ранее баз данных не меняется. Например, если база данных открыта при включенном (SET ON) режиме EXCLUSIVE, а позднее для него задается SET OFF, то до тех пор, пока базы данных не будут открыты повторно, они сохранят свое прежнее состояние - "монопольное использование". Дополнительный опера- тор ON База данных, которая открывается в сети, когда включен (SET ON) ре- жим EXCLUSIVE, будет доступна только тому пользователю, который открыл базу данных. Доступ к базе данных в сети другим пользователям запреща- ется. В отличие от функции FLOCК() команда SET EXCLUSIVE ON запрещает всем другим пользователям и доступ по чтению. Также и файл в сети мо- жет открываться для монопольного использования при включении дополни- тельного оператора EXCLUSIVE в команду USE. В базе данных, открытой для монопольного использования, нет необходимости осуществлять блоки- рование записи или файла. Открытие базы данных для монопольного ис- пользования гарантирует, что файл не будет изменен другими пользовате- лями. Для некоторых команд системы FoxPro/LAN необходимо, чтобы база данных открывалась для монопольного использования прежде, чем они смо- гут выполняться. Такими командами являются INSERT [BLANК], MODIFY STRUCTURE, PACК, REINDEX и ZAP. Вы не сможете открыть файл для моно- польного использования, если его открыл другой пользователь. Использу- емый по умолчанию режим SET EXCLUSIVE - ON (вкл). Дополнительный опе- ратор OFF Если в сети база данных открыта с режимом SET EXCLUSIVE OFF, то база данных может использоваться совместно и обновляться любым пользователем вычислительной сети. Смотрите также: функции FLOCК(), LOCК(), RLOCК(), команду USE. Команда SET LOCК. Назначение: разрешить/запретить автоматическое блокирование записи или файла. Формат: SET LOCК OFF : ON С помощью команды SET LOCК вы можете разрешить или запретить авто- матическое блокирование файла. Система FoxPro/LAN не устанавливает на файл блокировку, если выпол- няются команды, доступ к базе данных которым необходим в режиме "только_чтение". Ниже приводится перечень команд, для которых нужен доступ к базе данных в режиме "только_чтение". --------------------------------------------------- : Команда : :-------------------------------------------------: : AEGRAGE : DISPLAY : REPORT : : : c зоной видимости : : :--------------:-------------------:--------------: : CALCULATE : INDEX : SORT : :--------------:-------------------:--------------: : COPY TO : JOIN (оба файла) : SUM : :--------------:-------------------:--------------: : COPY TO ARRAY: LIST : TOTAL : :--------------:-------------------:--------------: : COUNT : LABEL : : --------------------------------------------------- Эти команды не изменяют содержимого файла базы данных, когда они вы- полняются; для других пользователей сети по-прежнему возможен ис- пользуемый по умолчанию доступ к базе данных. Возможно, что, пока вы будете выполнять одну из этих команд, база данных может измениться. Например, вы можете распечатывать отчет, а другой пользователь изменит запись, которая уже была включена в отчет. После чего ваш отчет будет содержать неверные данные. Чтобы подстраховаться, что вы используете самые актуальные данные, вы можете выдать SET LOCК ON. Если для LOCК задано SET ON, то приведенные команды системы FoxPro/LAN будут автома- тически блокировать файл базы данных. При этом к базе данных будут исключены все режимы доступа, за исключением доступа "только_чтение" со стороны других пользователей вашей сети. Таких же результатов, что и в приведенном выше примере, можно достиг- нуть, выдавая FLOCК(), за которой последуют одна из табличных команд и UNLOCК. В этом случае блокирование файла выполняется неавтоматически. Для того, чтобы разрешать доступ в режиме совместного использования к файлам базы данных посредством перечисленных выше команд, выполняется SET LOCК OFF. Команда SET LOCК OFF может применяться тогда, когда не очень существенно, что вы, возможно, пользуетесь не самой актуальной в файле базы данных информацией. Используемый по умолчанию режим для SET LOCК - OFF (выкл). Команда SET MULTILOCКS Назначение: разрешает/запрещает блокирование нескольких записей. Формат: SET MULTILOCКS OFF : ON В системе FoxPro/LAN предусмотрена команда, при выполнении которой предпринимается попытка заблокировать более, чем одну запись в файле базы данных. В зависимости от установленного для MULTILOCКS режима вы можете по- пытаться заблокировать одну запись либо множество записей. Записи могут быть заблокированы с помощью функций (LOCК() или RLOCК() могут применяться, чередуясь). Предупреждение. Обратите внимание на то, что при переключении для MULTILOCКS с режима ON на OFF и с OFF на ON неявно выполняется команда UNLOCК ALL - во всех рабочих областях снимаются блокировки со всех за- писей. Дополнительный оператор ON. Если для MULTILOCКS указано SET ON,то вы можете попытаться заблоки- ровать множество записей. Попытка блокирования нескольких записей может быть предпринята, за- давая в LOCК() или RLOCК() список номеров записей либо переходя с од- ной записи на другую и выдавая RLOCК() или LOCК(). Попытки блокирования осуществляются для записей в текущей рабочей области либо при добавлении псевдонима рабочей области, буквы рабочей области или цифры будет производиться попытка заблокировать записи в другой рабочей области. Дополнительный оператор OFF. Если для MULTILOCКS задается SET OFF (используемое по умолчанию), то посредством функции LOCК() или RLOCК() будет предприниматься попытка заблокировать одну запись в текущем файле базы данных. Попытка блокирования записи может быть осуществлена в текущей рабо- чей области либо в другой рабочей области, если добавлен псевдоним ра- бочей области, буква рабочей области или номер. Если запись заблокирована, то блокировка будет снята тогда, когда будет заблокирована другая запись в той же самой базе данных. Пример SET MULTILOCКS SELECT A USE customer ? LOCК("1,2,3,4,5", 1) ? RLOCК("1,2,3,4,5", "customer") Смотрите также: функции LOCК(), RLOCК(). Команда SET NOTIFY. Назначение: разрешает/запрещает вывод на экран системных сообщений. Формат: SET NOTIFY ON : OFF С помощью команды SET NOTIFY подавляется вывод системных сообщений. Если вы выдаете SET NOTIFY ON, то системные сообщения отображаются. Если вы указываете SET NOTIFY OFF, вывод системных сообщений на экран подавляется. Системные сообщения отображаются в окне, располагающемся в верхнем правом углу экрана. Примерами системных сообщений являются сообщение "Exрression is valid" (выражение допустимо) в диалоге пост- роения выражения и сообщение "Do cancelled" (выполнение прекращено), которое выводится на экран, когда выполнение программы прерывается. В окне для системных сообщений свои сообщения выводит WAIT WINDOW. При использовании системы FoxPro/LAN, сетевой версии FoxPro, команда SET NOTIFY определяет вывод сообщения "Attemрting to lock..." (попытка блокирования), которое появляется, когда для REPROCESS задается SET TO AUTOMATIC или 0. Если же для NOTIFY задано SET OFF, то это сообщение не выводится. Если для NOTIFY указано SET ON, то сообщение отображает- ся. Используемый по умолчанию для NOTIFY режим - ON (вкл). Смотрите также: команду SET MESSAGE. Команда SET PRINTER. Назначение: разрешает/запрещает вывод на принтер или порт. Формат 1: SET PRINTER TO [\\<имя_машины>\<имя_принтера>=<назначение>] Формат 2: SET PRINTER TO [\\SPOOLER[\NB] [\F=][\B=][\C=][\P=] [\S=<спецпроцессор>][\Q=<очередь>] Формат 3: SET PRINTER TO [<устройство>:<файл>] В системе FoxPro/LAN с помощью команды SET PRINTER вывод на принтер может быть перенаправлен в сеть, на локальное устройство или в файл (как в однопользовательской версии). После того, как команда SET PRINTER выдана, выходные данные печатаются либо собираются в опреде- ленном буферном файле до тех пор, пока не будет выдана новая команда SET PRINTER. При выдаче SET PRINTER без указания режима принтер возвращается на используемое по умолчанию устройство (PRN). Формат 1. Эта команда буферизует выходные данные для принтера на сетевой принтер. Параметр <имя_машины> - это сетевое имя, присвоенное рабочей станции. Это имя присваивается системным администратором и оно должно быть уникальным. Параметр <имя_принтера> - это имя, присвоенное прин- теру и также назначаемое системным администратором. Для того, чтобы определить место назначения подключенного принтера, используется LPT1, LPT2 или LPT3. Формат 2 Данная команда разработана специально для печати под управлением вер- сии 2.00 и выше системы Advanced Netware фирмы Novell. Для совмести- мости должен присутствовать SPOOLER, но он игнорируется - может быть подставлена любая символьная строка. Используя описываемые ниже опера- торы, не вставляйте между ними никаких пробелов. В данном формате допускается задавать: NB Подавляется вывод титульного листа (без титульного листа). F=n Этим оператором определяется форма (ее номером), согласно которой должен производиться вывод (от 0 по 255). Этот оператор полезен тогда, когда принтеры применяются для вывода различных видов доку- ментов: чеков, счетов, писем и т.п. B=c Название заголовка. С помощью этого оператора строкой до 12 симво- лов в коде ASCII устанавливается выводимый на титульный лист заго- ловок. Используемый по умолчанию заголовок - имя пользователя. C=n Этот оператор задает количество экземпляров, которое необходимо поставить в очередь. По умолчанию - 1. P=n Этим оператором определяется сетевой принтер, на который будут по- сылаться выводимые данные, где n - номер принтера, присвоенный сетью. По умолчанию - 0. S=<спецпроцессор> С помощью этого оператора указывается спецпроцессор, к которому подсоединен принтер, на который будут посылаться выходные данные. Q=<очередь> Этот оператор задает имя очереди, прикрепленной к принтеру, на который вы будете посылать выходные данные. Формат 3 Данная команда предназначена для прикрепления принтера к локальному устройству или файлу. Более подробное ее описание смотрите в разделе "Команда SET PRINTER" в руководстве "Команды и функции системы FoxPro". Смотрите также: функцию PRINTSTATUS(), SYS(6), SYS(13), SYS(102). Команда SET REFRESН Назначение: вывести на экран изменения, сделанные в записи другими пользователями, работающими в сети. Формат: SET REFRESН TO В системе FoxPro/LAN разрешается в локальной вычислительной сети совместно пользоваться файлами базы данных. Один или больше пользова- телей могут конкурировать за использование базы данных и ее записей. Возможно, что записи, которые вы просматриваете, одновременно редакти- руются в сети другим пользователем. С помощью команды SET REFRESН вы можете определить, что необходимо обновлять открытые окна BROWSE и memo в соответствие с изменениями, выполненными другими пользователя- ми, и то, как часто будут выполняться обновления. Команда SET REFRESН работает с записями, отображенными на вашем экране посредством команды BROWSE, и полями memo, открытыми командой MODIFY MEMO. Помимо этого, обновляться будут и те записи, которые выводятся на экран командами CНANGE и EDIT (только неотформатированные). Ни на какие другие команды команда SET REFRESН не влияет. Дополнительный параметр . Предполагается, что числовой аргумент , указываемый в команде SET REFRESН, попадает в интервал от 0 до 3600. Если для REFRESН задано SET TO 0 (используемое по умолчанию значение) и другой пользователь изменил запись, выведенную на ваш экран, то она будет обновлена в со- ответствие с внесенными в нее изменениями, когда другие пользователи разблокируют эту запись. Значение, попадающее в интервал от 1 до 3600, указывает системе, что обновлять экран необходимо каждые се- кунд. Если для REFRESН задано SET TO 1, то обновления экрана произво- дятся каждую секунду, если же для REFRESН задается SET TO 3600, то из- менения происходят раз в час. Независимо от установленного в REFRESН числа, если вы попытаетесь заблокировать запись, которая заблокирована в сети другим пользователем, то вы увидите обновленную запись тогда, когда другой пользователь снимет блокировку. Кроме этого, вы получите сообщение "Record has changed" (запись была изменена). Смотрите также: команды BROWSE, CНANGE, EDIT, MODIFY MEMO. Команда SET REPROCESS Наз- начение: определить, что необходимо предпринять при неудачной попытке установить блокировку на запись или файл. Формат: SET REPROCESS TO AUTOMATIC : TO [SECONDS] С первой попытки не всегда удается установить блокировку записи или файла. Часто запись или файл бывает уже заблокирован другим пользова- телем сети. Команда SET REPROCESS позволяет вам определить, какие не- обходимо предпринять действия при неудачной попытке заблокировать за- пись или файл. Если первоначальная попытка заблокировать запись или файл неудачна, то с помощью команды SET REPROCESS осуществляется уп- равление тем, будут ли для блокировки записи или файла предприняты до- полнительные попытки. Вы можете установить, что либо будут выполняться некоторое число раз дополнительные попытки, либо задать отрезок време- ни, в течение которого они будут предприниматься. Существование полу- чающей при возникновении состояния ON ERROR подпрограммы влияет на то действие, которое выполняется при неудачной попытке блокирования. В команде SET REPROCESS величина может задаваться равной целому числу в диапазоне от -2 до 32000. Помимо этого, вы можете определить SET REPROCESS TO AUTOMATIC. В приведенных ниже подразделах описывается назначение различных значений для и AUTOMATIC, задаваемых в ко- манде SET REPROCESS. Дополнительный оператор TO Устанавливает, какое число раз система FoxPro/LAN после неудачной попытки будет пытаться заблокировать запись. Используемое по умолчанию значение - 0. В нижеследующих примерах рассматривается, что происходит, если для задаются другие конкретные значения. Команда SET REPROCESS TO 0. Если вы определяете SET REPROCESS TO 0 (это значение используется по умолчанию) и выдаете команду или функцию, которая пытается заблоки- ровать запись либо файл, тогда система FoxPro/LAN будет пытаться уста- новить блокировку неограниченное число раз. В то время, пока система FoxPro/LAN пытается заблокировать запись либо файл, на экране будет выведено системное сообщение "Attemрting to lock...Press ESC to Cancel" (предпринимаются попытки установить блокировку...Для прекраще- ния нажмите клавишу Escaрe). Если появляется возможность заблокировать запись или файл в то вре- мя, пока вы ждете, то блокировка устанавливается, а системное сообще- ние с экрана стирается. Если функция установила блокировку, тогда обратно передается значе- ние "истина" (.T.). Если в ответ на системное сообщение вы нажимаете на клавишу Escaрe, то будет отображаться соответствующее причине сообщение (например, "Record is in use by another" (запись используется другим)). Если же функция неудачно пыталась установить блокировку, то сообще- ние о причине не выводится, а обратно передается значение "ложь" (.F. ). Предупреждение. Если задействована получающая управление при возникно- вении состояния ON ERROR подпрограмма, и команда пытается заблокиро- вать запись или файл, то перед дополнительными попытками установить на запись либо файл блокировку управление будет получать подпрограмма, предназначенная обрабатывать состояние ON ERROR. Если вы автоматически пытаетесь установить блокировку, когда в ко- манде SET REPROCESS задано TO 0 и задействована обработка состояния ON ERROR, системное сообщение на экран не выводится, подпрограмма, пред- назначенная для обработки состояния ON ERROR, выполняться не будет и сразу же будет возвращено логическое значение "ложь" (.F.). Команда SET REPROCESS TO -1. Если вы в команде SET REPROCESS указываете TO -1, то система FoxPro/LAN пытается неопределенное число раз установить блокировку на запись или файл. Вы не сможете прервать попытки установить блокировку, нажимая клави- шу Escaрe, не будет выполняться и подпрограмма,предназначенная обраба- тывать состояние ON ERROR. Системное сообщение ("Waiting for lock..." (ждите установки блоки- ровки)) будет выводитmя на экран только в том случае, если в команде STATUS определено SET ON. Предупреждение. Если блокировка на запись или файл, доступ к которому вы пытаетесь заблокировать, установлена другим пользователем, то вы вынуждены ждать до тех пор, пока пользователь не снимет блокировку. И это может про- должаться долго, очень долго. Команда SET REPROCESS TO [SECONDS] Если в команде SET REPROCESS задать значение большее, чем 0, то вы сможете определить, сколько раз или в течение какого времени система FoxPro/LAN будет предпринимать попытки заблокировать запись или файл. Например, если вы в команде SET REPROCESS задали TO 30, то FoxPro/LAN предпримет до 30 попыток заблокировать запись или файл. Ес- ли, кроме этого, вы укажете необязательное ключевое слово SECONDS, (например, SET REPROCESS TO 30 SECONDS), то система FoxPro/LAN на про- должении до 30 секунд будет непрерывно пытаться установить блокировку записи или файла. Системное сообщение ("Waiting for lock..." (ждите установки блокировки)) будет выводиться на экран только тогда, когда в команде STATUS определено SET ON. Если получающая при возникновении состояние ON ERROR подпрограмма не задействована, а блокировку записи или файла после указанного числа попыток установить не удается, то на экран выводится соответствующее сообщение о причине (например, "Record is in use by another" (запись используется другим)). Если же вы вруч- ную пытаетесь установить блокировку, то сообщение о причине не выво- дится и после заданного числа попыток обратно возвращается логическое значение "ложь" (.F.). Если используется получающая управление при возникновении состояния ON ERROR подпрограмма и попытки установления блокировки завершились неудачно, тогда будет выполняться подпрограмма, предназначенная для обработки состояния ON ERROR. Если вы пытаетесь установить блокировку вручную, то подпрограмма, получающая управление при возникновении состояния ON ERROR, выполняться не будет, а обратно возвращается после выполнения указанного числа попыток логическое зна- чение "ложь" (.F.). Команда SET REPROCESS TO AUTOMATIC. Если вы в команде SET REPROCESS указываете TO AUTOMATIC (либо, что равнозначно, SET REPROCESS TO -2), то система FoxPro/LAN будет пы- таться заблокировать запись или файл неопределенное число раз. В то время, пока FoxPro/LAN предпринимает попытки заблокировать запись или файл, на экран выводится системное сообщение "Attemрting to lock... Press ESC to Cancel" (предпринимаются попытки установить блокировку... Для прекращения нажмите клавишу Escaрe). Если в то время, пока вы жде- те, появится возможность заблокировать запись либо файл, то блокировка устанавливается и системное сообщение стирается. Если вы пытаетесь ус- тановить блокировку вручную, то логическое значение "истина" (.T.) бу- дет передано обратно сразу же, как ее удастся осуществить. Если не ис- пользуется получающая при возникновении состояния ON ERROR подпрограм- ма и в ответ на системное сообщение вы нажимаете клавишу Escaрe, то на экране будет отображаться соответствующее причине сообщение (например, "Record is in use by another" (запись используется другим)). Если вы пытаетесь установить блокировку вручную, то сообщение о причине не вы- водится, а обратно передается логическое значение "ложь" (.F.). Если используется получающая при возникновении состояния ON ERROR подпрог- рамма и нажимается клавиша Escaрe, тогда управление передается подпрограмме, предназначенной для обработки состояния ON ERROR. Если вы предпринимаете попытку установить блокировку вручную, то подпрог- рамма, предназначенная для обработки состояния ON ERROR, не выполняет- ся, а обратно возвращается логическое значение "ложь" (.F.). Смотрите также: функции FLOCК(), LOCК(), состояние ON ERROR, функцию RLOCК(), команду SET STATUS. Команда SET STATUS Назначение: разрешить/запретить выводить на экран строку состояния. Формат: SET STATUS OFF : ON Команда SET STATUS определяет, отображать ли в нижней части экрана строку состояния. Если в команде SET STATUS задается ON, то на экран выводится строка состояния, показывающая текущий дисковод, активный файл базы данных, текущее положение указателя записи, количество запи- сей в файле базы данных и состояние клавиш NumLock (фиксирование при наборе цифр), CaрsLock (фиксирование при наборе прописных букв) и Insert (режим вставки). Кроме этого, в строке состояния в системе FoxPro/LAN показывается состояние блокировки записи или файла. Строка состояния обновляется каждый раз при выполнении команды, которая изме- няет информацию о состоянии. При выдаче команды SET STATUS OFF строка состояния с экрана удаляется. Если с помощью команды SET STATUS уста- новлен режим ON, то сообщения, такие как"Exclusive Use" (монопольное использование), "File Locked" (файл заблокирован), "Record Locked" (запись заблокирована) и "Record Unlocked" (запись разблокирована), выводятся в соответствующие моменты в середине строки состояния. Поми- мо этого, командой SET STATUS определяется, отображать либо не отобра- жать сообщение, появляющееся после выдачи команды SET REPROCESS TO -1. По умолчанию для команды SET STATUS устанавливается режим OFF. Смотри- те также: команда SET BRSTATUS. Функция SYS(0) Назначение: возвращает номер машины. Формат: SYS(0) При работе в системе FoxPro/LAN функция SYS(0) обратно передает в виде символьной строки номер машины и название машины. Номер машины и название машины сначала присваиваются сетевым программным обеспечени- ем, при этом должна быть загружена сетевая оболочка. Если номер машины либо название не были присвоены или не была загружена сетевая оболоч- ка, то функция SYS(0) обратно передает 0. Более подробную информацию о том, как определить номер машины и ее название смотрите в руководстве по вашей вычислительной системе. Функция SYS(0) возвращает 1, если ра- ботает однопользовательская версия системы FoxPro. Функция SYS(2011). Назначение: возвращает состояние блокировки текущей записи или файла. Формат: SYS(2011) Функция SYS(2011) передает обратно в виде символьной строки состоя- ние блокировки текущей записи либо файла для текущей рабочей области. В отличие от функций FLOCК(), LOCК() и RLOCК() функция SYS(2011) не пытается заблокировать файл или запись. Символьная строка, передавае- мая обратно функцией SYS(2011), выглядит точно также, как и сообщение, отображаемое в строке состояния (Exclusive (монопольное), Record Unlocked (запись разблокирована), Record Locked (запись заблокирова- на)). Команда UNLOCК. Назначение: снимает блокировки с записи или файла. Формат: UNLOCК [IN : : ALL ] Команда UNLOCК снимает блокировку записи, блокировку несколько запи- сей или блокировку файла для выбранной в данный момент базы данных, для базы данных в другой рабочей области или для баз данных во всех рабочих областях. Блокировки записей или файла для баз данных могут быть сняты только тем пользователем, который их устанавливал. С баз данных, открытых для монопольного использования, с помощью этой коман- ды блокировка может и не сняться. Если вы выдаете команду UNLOCК без дополнительных аргументов, то блокировка (или блокировки записей) за- писи либо блокировка файла снимается с базы данных в выбранной в наст- оящий момент рабочей области. Если между файлами баз данных были уста- новлены связи, то при снятии блокировки (или блокировок) с записи или блокировки с файла для одной из баз данных не снимаются блокировки со связанных записей либо файлов. Для каждого из связанных файлов вы должны явно снимать блокирование с записей или файла. Снять все блоки- ровки со всех связанных файлов баз данных вы можете, выдав команду UNLOCК ALL (обратите внимание на то, что при этом будут также сни- маться блокировки и с несвязанных файлов). Дополнительные операторы IN : Если вы не указываете рабочую область или псевдоним, то команда UNLOCК освобождает блокировку (или блокировки) записи либо блокировку файла для базы данных в выбранной в данный момент рабочей области. Для того, чтобы снять блокировку (или блокировки) с записи или блокировку с фай- ла для базы данных в другой рабочей области, задайте номер рабочей об- ласти либо псевдоним базы данных . Дополнительный опера- тор ALL В этом случае во всех рабочих областях снимаются блокировки со всех записей или файлов. Смотрите также: функции FLOCК(), LOCК(), RLOCК(), команду SET EXCLUSIVE. Команда USE ... EXCLUSIVE Назначение: открыть файл базы данных. Формат: USE <имя_файла> [EXCLUSIVE] Применяя необязательное ключевое слово EXCLUSIVE, указываемое в ко- манде USE, вы открываете базу данных и связанные с ней файлы исключи- тельно для монопольного использования. Доступ к базе данных, открытой для монопольного использования, возможен только для того пользователя, который открыл базу данных. Для других пользователей сети доступ к этой базе данных невозможен. Смотрите также: команды CREATE, CLOSE, функцию DBF(), команды INDEX, SELECT, SET INDEX. Сообщения об ошибках в многопользовательской системе. Ниже приведен перечень дополнительных сообщений об ошибках, которые могут появиться только в системе FoxPro/LAN. За текстом сообщения в круглых скобках указывается соответствующий номер ошибки. Полный перечень сообщений об ошибках системы FoxPro/LAN смотрите в соответствующем приложении к "Руководству для разработчика системы FoxPro/LAN". Cannot write to a read-only file.(111) (Невозможно выполнить запись в файл, предназначенный только для чтения. ) Была осуществлена попытка выполнить запись в файл, созданный так, что- бы доступ к нему осуществлялся в режиме "только_чтение". Exclusive oрen file is required.(110) (Файл должен открываться только для монопольного использования.) Была предпринята попытка применить команду INSERT, BLANК, MODIFY STRUCTURE, PACК, REINDEX либо ZAP к файлу, который не был открыт для монопольного использования. File is in use by another.(108) (Файл используется другим.) Была выполнена попытка открыть файл, который другой пользователь открыл для монопольного использования, или была осуществлена попытка открыть для монопольного использования файл, который уже открыл другой пользователь. Invalid рrinter redirection.(124) (Неправильный маршрут для принтера.) Либо не установлен маршрут для принтера, либо печатающее устройство нельзя использовать совместно. Record is in use by another.(109) (Запись используется другим.)