Распечатать страницу

Открытие и закрытие таблицы в Visual FoxPro

« Назад

Команда

USE [[DatabaseName!]Table | SQLViewName | ?]
                   [IN nWorkArea | cTableAlias] [ONLINE] [ADMIN] [AGAIN]
                   [NOREQUERY [nDataSessionNumber]] [NODATA]
                   [INDEX IndexFileList | ?
                   [ORDER [nIndexNumber | IDXFileName
                  
| [TAG] TagName [OF CDXFileName]

                   [ASCENDING | DESCENDING]]]] [ALIAS cTableAlias]
                   [EXCLUSIVE] [SHARED] [NOUPDATE]
                   [CONNSTRING cConnectionString | (m.nStatementHandle)]

открывает (закрывает) таблицу или SQL-вид, а также индексные файлы таблицы.

Опции и параметры:

TableName – имя открываемой таблицы. Может содержать путь; расширение необязательно.

Если открывается таблица нетекущей открытой базы данных, то имени таблицы предшествует DatabaseName!, где DatabaseName – это имя базы данных.

Если имя таблицы TableName и/или базы данных содержит пробелы то имя [DatabaseName!]Table заключается в качычки.

Замечание. VFP не распознает правильно путь, если в его имени есть восклицательный знак.

SQLViewName – имя открываемого SQL-вида, созданного интерактивно или командой CREATE SQL VIEW. Вид может быть и автономным.

? – открывает Use-диалог выбора таблицы.

IN nWorkArea – рабочая область, в которой таблица открывается. Однако команда

USE IN nWorkArea

закрывает таблицу, открытую в рабочей области nWorkArea.

Команда USE с опцией IN 0 откроет таблицу в самой низкой свободной области, например:

close databases

close tables all

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors in 0                 && Открываем таблицу в области 1

use Books in 0                    && Открываем таблицу в области 2

use in 1                               && Закрываем таблицу Authors

IN cTableAlias – открывает таблицу в области, в которой используется псевдоним cTableAlias, например:

use Authors in 0                 && Открываем таблицу в области 1

use Books in Authors         && Закрываем Authors и открываем Books

Если параметр nWorkArea или cTableAlias опущен, то таблица открывается в текущей рабочей области. Команда USE, выполненная без других опций, закрывает таблицу, открытую в текущей рабочей области. Например:

&& Выбираем область, использующую псевдоним Authors

select Authors

use                                      && Закрываем Authors

ONLINE – открывает автономный вид, созданный CREATEOFFLINE( ). Имя открываемого автономного вида указывается параметром SQLViewName. После открытия вида данные на сервере могут быть обновлены функцией TABLEUPDATE( ).

Автономные виды должны открываться в режиме монопольного доступа. Это обеспечивается либо использованием в USE опции EXCLUSIVE, либо в результате установки SET EXCLUSIVE в ON.

Автономный вид нельзя открыть или закрыть во время транзакции.

ADMIN – открывает автономный вид, созданный CREATEOFFLINE( ), но не обновляет данные на сервере (не переносит туда изменений, выполненных в автономном виде).

Опция ADMIN, как и опция ONLINE, не может быть использована внутри транзакции.

AGAIN – открывает повторно таблицу в заданной опцией IN или текущей рабочей области.

При повторном открытии таблицы в другой рабочей области берутся все атрибуты области, в которой таблица открыта первый раз. Например, если таблица первоначально открыта для чтения и в монопольном режиме, то и в другой обрасти она будет доступна только для чтения и монопольно. Индексные файлы, открытые с первичной таблицей, доступны и в области, в которой таблица открывается повторно (если только при выполнении USE AGAIN не открываются индексы). При  повторном открытии SET ORDER устанавливается в 0.

Если USE AGAIN открываются новые дополнительные индексы таблицы, то в первичной области SET ORDER устанавливается в 0.

Если таблица открывается повторно в другой рабочей без употребления опции AGAIN, то в первичной рабочей области таблица будет закрыта.

Таблица, открываемая повторно, получает по умолчанию псевдоним по имени рабочей области, например:

use Books again in 200 && Псевдоним таблицы – W200

В VFP повторное открытие таблицы не приводит к выделению нового идентификатора файла.

NOREQUERY [nDataSessionNumber] – данные удаленного SQL-вида не будут загружаться повторно. Опция применяется только с SQL-видами и, как правило, в команде USE с опцией AGAIN. Цель ее употребления – повышение быстродействия за счет отказа от повторной загрузки данных (она уже выполнена при первом вызове команды USE).

Параметр nDataSessionNumber задает номер сессии данных; если он опущен то берется текущая сессия.

NODATA – загружается только структура SQL-вида. Применяется для быстрого определения структуры SQL-вида. Скорость обеспечивается отказом от загрузки данных.

INDEX IndexFileList – задает список открываемых вместе с таблицей индексных IDX- и независимых составных CDX-файлов. Расширения должны присутствовать, если открываемые IDX- и CDX-файлы имеют одинаковое имя.

Порядок нумерации индексов IDX-файлов и тегов CDX-файлов см. в описании команды SET ORDER. Индекс или тег, имеющий номер 1, если в команде USE опущена опция ORDER и имеется опция INDEX, становится управляющим.

INDEX ? – открывает Open-диалог выбора IDX- или CDX-файла.

ORDER nIndexNumber – задает позицию, по которой выбирается управляющий индекс или тег. Выбранный индекс может отличаться от установленного опцией INDEX.

Порядок выбора управляющего индекса или тега см. в описании команды SET ORDER.

Если nIndexNumber = 0, то управляющий индекс (тег) не устанавливается (записи таблицы отображаются и обрабатываются в соответствии с физическом порядком их следования), но все индексные файлы остаются открытыми. Это обеспечивает их обновление при изменениях в таблице. Опция ORDER без nIndexNumber равнозначна ORDER 0.

ORDER IDXFileName – задает управляющий индексный IDX-файл. Параметр IDXFileName может включать путь.

ORDER [TAG] TagName [OF CDXFileName] – устанавливает управляющим тег TagName структурного или независимого CDX-файла. Если тег TagName имеется в нескольких открытых индексных файлах таблицы, то обязательно наличие опции OF CDXFileName.

ASCENDING (DESCENDING) – открывает таблицу, располагая ключи управляющего индекса по возрастанию (убыванию). Сам же способ формирования индексного файла, заданный при его создании, не меняется. Опция не может быть использована, если не задан управляющий индекс.

Пример:

use Authors order AuthorId descending

ALIAS cTableAlias – создает псевдоним cTableAlias таблицы. Он используется при обращении к полям таблицы в функциях и командах, требующих его присутствия. Может содержать до 254 символов включительно.

Если опция ALIAS опущена, то псевдоним совпадает с именем таблицы.

Если опция ALIAS опущена и имя открываемой таблицы вступает в конфликт с существующим псевдонимом, то для нее берется псевдоним по умолчанию (символьное представление номера рабочей области), например:

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors alias Books

use Books in 3                    && Получит псевдоним "C"

Если употребляется уже существующий псевдоним, то генерируется ошибка, например:

use Authors alias Tbl

use Books in 0 alias Tbl      && Генерируется ошибка

Замечание. Для указания имени поля Field в командах и функциях, принимающих это имя в качестве параметра, может быть использован один из следующих способов:

cTableAlias.Field

или

cTableAlias->Field

EXCLUSIVE – открывает таблицу в режиме монопольного доступа.

SHARED – открывает таблицу в режиме разделяемого доступа. Опция имеет приоритет над установкой SET EXCLUSIVE в ON.

NOUPDATE – предотвращает изменения таблицы и ее структуры.

CONNSTRING cConnectionString | (m.nStatementHandle) – строка SQL-соединения (cConnectionString) с ODBC-источником данных или переменная памяти (m.nStatementHandle), хранящая идентификатор существующего SQL-соединения.

При включении cConnectionString VFP передает строку соединения удаленному, заданному параметром SQLViewName виду, который ее использует для соединения с указанным в строке источником данных. Если cConnectionString – это строка нулевой длины, то появляется диалог выбора источника данных.

Если cConnectionString содержит не все необходимые для соединения данные, то откроется Login-диалог.

Если опция CONNSTRING опущена, то используется установленное по умолчанию соединение.

Параметр m.nStatementHandle употребляется с разделяемыми соединениями.

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

&&

&& Используем строку соединения

use BookSale in 0 connstring "dsn=BookSaleDataBase;uid='nick';pwd='name'"

&&

&& Используем идентификатор SQL-соединения

myUid = 'nick'

myPass = 'name'

nStHandle = SQLStringConnect('dsn=BookSaleDataBase;uid=<myUid>;pwd=<myPass>')

use BookSale in 0 connstring nStHandle again

activate window View

Функция

ISREADONLY([nWorkArea | cTableAlias])

возвращает .T., если текущая или заданная параметром nWorkArea | cTableAlias таблица открыта только для чтения, или .F. – в противном случае. Если осуществлен вызов ISREADONLY(0), то функция вернет результат для текущей базы данных. Если нет текущей таблицы или базы данных или если указан неиспользуемый псевдоним, то функция сгенерирует ошибку.

Программно таблица открывается для чтения при наличии опции NOUPDATE в команде USE. Также DBF-файлу таблицы в окне задания его свойств можно установить атрибут MS-DOS "Только чтение".

Чтобы убедиться в наличии текущей базы данных, можно использовать условие

not Empty(Dbc( ))

Курсор, созданный командой SELECT – SQL, всегда имеет статус "Только чтение".

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors noUpdate

? IsReadOnly('Authors')     && Напечатает: .T.

? IsReadOnly(0)                  && Напечатает: . F.

Функция

ISEXCLUSIVE([nWorkArea | cTableAlias | cDatabaseName [, nType]])

возвращает.T., если таблица или база данных cDatabaseName открыта в режиме монопольного доступа, или .F. – в противном случае.

Параметр:

nType – равен 1 (по умолчанию), если результат возвращается для таблицы, или 2, если – для базы данных.

Команда

CLOSE TABLES [ALL]

закрывает все таблицы текущей базы данных. Если таковой не имеется, то закрываются все свободные таблицы.

Опция ALL закрывает все таблицы всех баз данных и все свободные таблицы. Все базы данных остаются открытыми.

Если команда выполнена во время транзакции, то возникнет ошибка.

Таблица в текущей или указанной рабочей области закрывается командой USE.

Команда

CLOSE ALL

выбирает рабочую область 1 и закрывает следующие файлы:

базы данных, таблицы и индексы текущей и всех других сессий данных;

файлы низкого уровня, созданные FCREATE( ) и FOPEN( );

проектировщики формы, этикетки, отчета и запроса и диспетчер проекта.

Команда не закрывает командное, отладочное и трассировочное окна. Также она не закрывает файл, открытый SET PRINTER, и Help.

Команда

SET TABLEPROMPT ON | OFF

активизирует (ON) или отключает (OFF) режим появления диалога Open в командах, позволяющих пользователю выбирать таблицу, если она не открыта.

Если задана опция OFF и таблица не открыта, то возникнет ошибка исполнения.

Установка SET TABLEPROMPT действует на следующие команды: BROWSE, DELETE – SQL, GO | GOTO, INDEX, INSERT – SQL, PACK, REPLACE, REPORT FORM, SELECT – SQL, SET FILTER, SKIP, UPDATE – SQL и ZAP.