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

Команды для баз данных в Visual FoxPro

« Назад

Команда

CREATE DATABASE [DatabaseName | ?]

создает базу данных и открывает ее.

Созданная база данных всегда открывается монопольно независимо от установки команды SET EXCLUSIVE.

Файл базы данных имеет расширение DBC, ассоциированный memo-файл – расширение DCT, ассоциированный индексный файл – расширение DCX.

Параметр (см. также табл. 1.6):

DatabaseName – имя файла базы данных. Если путь отсутствует, то база данных создается в директории по умолчанию, задаваемой командой SET DEFAULT.

Информация об открытых базах данных заносится в массив функцией ADATABASES( ); информация о текущей базе данных отображается командой DISPLAY DATABASE.

Созданная база данных становится текущей, поэтому следующие за ней команды CREATE TABLE, не имеющие опции FREE, создадут таблицы, этой базе принадлежащие.

Пример. В корневой директории диска d: создается база данных People и в нее добавляется таблица Friends. Затем выводится информация о созданных объектах.

set safety on

create database d:\People

create table d:\Friends (FirstName C(20), LastName C(20))

clear

&& Выводим информацию о базе данных

display databases

Результат:

Database Name:                  PEOPLE

Database Path:            d:\people.dbc

Database Version:       10

Database    StoredProceduresDependencies

Table          friends

                   *Path        friends.dbf

                   Field         firstname

                   Field         lastname

Для повторного использования этого кода необходимо предварительно проверить, открыта ли база данных d:\People.dbc. Если да, то, сделав базу данных d:\People.dbc текущей, выполнить следующее:

  • удалить таблицу Friends из базы данных (команда REMOVE TABLE), предварительно проверив, входит ли эта таблица в базу данных d:\People.dbc;

  • закрыть базу данных (команда CLOSE DATABASES).

Если база данных d:\People.dbc закрыта, то проверить, имеется ли она на диске. Если да, то удалить ее с диска (команда DELETE DATABASE).

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

&& Проверяем, открыта ли база данных d:\People.dbc, имеющая длинное имя People

if DBUsed('PEOPLE') then

                                            && Проверяем, является ли база данных d:\People.dbc текущей

                                            if not DBC( ) = 'D:\PEOPLE.DBC' then

                                               set database to 'd:\People'

                                            endif

                                            && Проверяем, входит ли таблица Friends в текущую базу данных

                                            if InDBC('Friends', 'TABLE') then

                                            remove table 'Friends'

                                            endif

                                            close databases

else

                                            && База данных d:\People.dbc закрыта

                                            && Проверяем, есть ли файл 'd:\People.dbc' на диске

                                            if File('d:\People.dbc') then

                                               delete database d:\People.dbc

                                            endif

endif

&& Теперь можно создать базу данных и принадлежащую ей таблицу

create database d:\People

create table d:\Friends (FirstName C(20), LastName C(20))

Поведение программы зависит от установки SET SAFETY. Так, если SET SAFETY установлен в ON, то обширное предупреждение возникнет при выполнении команды REMOVE TABLE (рис. 14.3).

197.1.-Выполняется-команда-REMOVE-TABLE

Рис. 14.3. Выполняется команда REMOVE TABLE

Ответив Yes, мы потеряем длинное имя таблицы, заголовки полей, постоянные отношения, в которых участвует таблица, правила проверки, триггеры, значения по умолчанию и другие свойства таблицы и ее полей, хранимые в базе данных. (В нашем примере ничего подобного таблица не имеет.)

Команда

MODIFY DATABASE [DatabaseName | ?] [NOWAIT] [NOEDIT]

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

Параметр (см. также табл. 1.6):

DatabaseName – имя или полное имя DBC-файла базы данных. Если параметр опущен, то откроется проектировщик для текущей базы данных. Если таковой не имеется, то откроется диалог Open выбора базы данных.

Замечание. Выполнение команды MODIFY DATABASE активизирует событие dbc_Activate базы данных.

Команда

SET DATABASE TO [DatabaseName]

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

Параметр:

DatabaseName – имя или полное имя DBC-файла текущей базы данных.

Установка команды SET DATABASE сохраняется с текущей сессией данных.

Замечания:

1. VFP может автоматически открывать базы данных, выполняя запрос или форму.

2. Базу данных можно сделать текущей, выбрав ее из раскрывающегося списка стандартной панели управления (рис. 14.4).

197.2.-В-качестве-текущей-выбрана-база-данных-People

Рис. 14.4. В качестве текущей выбрана база данных People

3. При выполнении в командном окне базу данных можно выбрать из появляющегося списка (рис. 14.5).

197.3.-SET-DATABASE-в-командном-окне

Рис. 14.5. SET DATABASE в командном окне

Команда

OPEN DATABASE [FileName | ?] [EXCLUSIVE | SHARED]
                   [NOUPDATE] [VALIDATE]

открывает базу данных. Команда OPEN DATABASE не будет выполнена, если база данных открыта другим пользователем в режиме монопольного доступа.

Опции и параметры (см. также табл. 1.6):

FileName – имя файла открываемой базы данных. Может быть указано без расширения. Если параметр FileName отсутствует, то открывается диалог Open, в котором можно выбрать файл базы данных.

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

EXCLUSIVE – открывает базу данных для монопольного доступа.

SHARED – открывает базу данных для разделяемого доступа.

Если опция EXCLUSIVE | SHARED опущена, то способ открытия базы данных зависит от установки команды SET EXCLUSIVE.

NOUPDATE – запрещает изменения базы данных. Если опция опущена, то изменения возможны. На таблицы базы данных эта опция не влияет. Чтобы запретить изменения таблицы, то ее нужно открыть командой USE с опцией NOUPDATE.

VALIDATE – задает режим проверки базы данных. При наличии опции VFP проверяет, все ли файлы и индексы базы данных имеются на диске. Также проверяется наличие всех индексов в CDX-файлах.

При открытии базы данных ее таблицы не открываются. При необходимости это выполняется либо интерактивно, либо командой USE.

При выполнении команды USE, если в команде имя таблицы указано без пути, таблица прежде ищется среди таблиц базы данных, а затем на диске.

Команда

CLOSE DATABASES [ALL]

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

Опция ALL означает, что в текущей и во всех неактивных сессиях данных закрываются:

  • все открытые базы данных и их таблицы за исключением текущих баз данных и их таблиц;

  • все свободные таблицы;

  • все индексные файлы во всех рабочих областях.

Выбирается затем рабочая область 1.

Выполнение команды CLOSE DATABASES в командном окне не закрывает базу данных, если она была открыта в диспетчере проекта, например для просмотра, или формой в ее собственной сессии данных. База данных в таких ситуациях будет закрыта при закрытии проекта или формы.

Команда

VALIDATE DATABASE [RECOVER] [NOCONSOLE]
                   [TO PRINTER [PROMPT] | TO FILE FileName]

проверяет, все ли файлы и индексы текущей базы данных имеются на диске, а также наличие всех индексов в CDX-файлах.

Проверяемая база данных должна быть текущей и открыта монопольно.

Опции:

RECOVER – отображает диалог, позволяющий найти (включить) таблицы и/или индексы не найденные VALIDATE, но на которые в базе данных имеются ссылки.

NOCONSOLE – подавляет вывод сообщений VALIDATE в окно VFP.

TO PRINTER [PROMPT] – направляет вывод сообщений VALIDATE на принтер. Если задана опция PROMPT, то откроется диалог настройки принтера.

TO FILE FileName – направляет вывод сообщений VALIDATE в текстовый файл FileName. Потребуется подтвердить перезапись файла, если SET SAFETY установлен в ON.

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary exclusive

validate database

Возможные сообщения VALIDATE:

Validate Database HOMELIBRARY:

Rebuilding structural index.... Index rebuilt.

Database container is valid.

Команда

DELETE DATABASE DatabaseName | ? [DELETETABLES] [RECYCLE]

удаляет базу данных и, если задана опция DELETETABLES, ее таблицы с диска.

Опции и параметр (см. также табл. 1.6):

DatabaseName – имя или полное имя DBC-файла удаляемой базы данных. Удаляемая база данных должна быть закрыта.

DELETETABLES – удаляет таблицы базы данных и их CDX- и FPT-файлы.

RECYCLE – помещает удаленные файлы в корзину.

Базы данных всегда должны удаляться командой DELETE DATABASE, а не ERASE или интерактивно, поскольку команда удаляет в таблицах, если они остаются на диске, имеющиеся в них ссылки на базу данных.

Команда

PACK DATABASE

удаляет записи с пометкой удаления в контейнере текущей базы данных. База данных должна быть открыта монопольно, а ее таблицы и виды могут быть закрыты.

Контейнер базы данных будет содержать запись с пометкой удаления, например, если из нее удалена таблица или вид или если изменена структура таблицы базы данных.

Пример:

close databases

open database 'd:\HomeLibrary\HomeLibrary' exclusive

pack database

Замечание. При упаковке базы данных или таблиц установка SET DELETED не имеет значения.