Открытие / закрытие базы данных в БЭСТ-5

 

NetUse() - Открытие базы данных в распределенном режиме
NetUseExc() - Открытие базы данных в монопольном режиме
NetUseRo() - Открытие базы данных только для чтения
Синтаксис     
 
      NetUse( cAlias, cFile , [lExc] ) --> lSuccess
      NetUseExc( cAlias, cFile ) --> lSuccess
      NetUseRo( cAlias, cFile ) --> lSuccess
 
Возвращаемое значение функции     
 
lSuccess – Результат выполнения функции. True при удачном открытии False при неудачном открытии таблицы.
 
Параметры
 
cAlias - Необязательный аргумент cAlias определяет алиас имя (должно быть уникально), используемое для идентификации рабочей области. Это имя может быть указано как литерал или как символьное выражение в круглых скобках. Если cAlias не указано, оно будет создано от имени файла cFileName.
 
cFile - литеральное имя файла или символьное выражение в круглых скобках, содержащее имя открываемого файла. <cFileName> может дополнительно включать информацию полного пути. Заданное по умолчанию расширение файла - ".DBF".
 
lExc - необязательный параметр, определяющий вариант открытия:
.F. - (по умолчанию) открытие таблицы в распределенном режиме (SHARED). Разрешается коллективный доступ к файлу. Эта особенность важна для многопользовательских сетевых приложений.
.T. - открытие таблицы в монопольном режиме ( EXCLUSIVE ) файл запирается сразу после его открытия. Это значит, что файл не может одновременно редактироваться на разных рабочих местах сети. Но доступ для чтения вполне возможен;
 
 
Описание
 
NetUse() - Открытие таблицы в распределенном режиме. Действие аналогично применению команды USE .
Для открытия таблицы в монопольном режиме можно использовать функцию NetUseExc( cAlias, cFile) . По своему действию функция NetUse()  аналогична использованию оператора USE:
     IF lExc!=NIL.AND.lExc
        USE 
(cFile) ALIAS (cAlias) NEW EXCLUSIVE // NetUseExc(cAlias,cFile)
     ELSE
        USE (cFile) ALIAS (cAlias) NEW SHARED // NetUse(cAlias,cFile)
     ENDIF 
NetUseRO() - открытие таблицы только для чтения в распредленном режиме.
 
Обратное действие - закрытие таблицы, осуществляется функцией dbCloseArea().
 
Несколько рекомендаций:
 
1. Открывайте все необходимые базы данных  в распределенном режиме.
 
Монопольный режим должен использоваться только для выполнения следующих команд:
PACK
INDEX ON
REINDEX
ZAP
 
Доступ  к рабочим  областям всегда  выполняйте по  алиасам, а  не по буквенным или числовым  обозначениям. Функции открытия базы данных выбирают неиспользуемую рабочую область.
 
2. При совместном использовании базы данных для записи информации необходима блокировка записи или всего файла. Блокировка временно "захватывает запись или файл для данного пользователя, другие пользователи при этом могут только читать соответствующие данные, но не править их. Блокировку всего файла необходимо производить только в крайних случаях, для команд, обрабатывающих группу записей:
APPEND FROM
DELETE (несколько записей)
RECALL (несколько записей)
REPLACE (несколько записей)
UPDATE ON
 
3. Блокировка записи, в том числе устанавливаемая автоматически после AddRec(), должна являться основным средством внесения изменений  в базу данных. Ее необходимо применять в следующих случаях:
- перед оператором REPLACE или FIELD:=... ;
- перед использованием @...GET с именем поля;
- перед одиночной командой DELETE.
Для чтения данных блокировка не нужна.
Вместо APPEND BLANK при работе в сетевой среде используйте функцию AddRec(). При попытке блокировки или добавления пустой записи никогда не надейтесь на положительный исход, обеспечьте информирование и выдачу рекомендаций пользователю в каждом конкретном случае невозможности блокировки.
 
4. Любую блокировку используйте на минимально возможный период, после чего необходимо выполнить команду UNLOCK (для текущей рабочей области) или UNLOCK ALL (для всех областей). Во избежания длительной блокировки записи при использовании GET с именем поля по возможности осуществляйте (где это логически допустимо) ввод данных через переменные, а блокировку используйте только на время REPLACE.
 
ПРИМЕР: 
IF SELECT('MDoc1') = 0
   NETUSE('MDoc1',LoadPath()+'Real\RBook')
ENDIF
// Закрытие таблицы
(mdoc1)->(DBCLOSEAREA())