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

Команды и функции для SQL-видов VFP

« Назад

Команда

CREATE SQL VIEW [ViewName] [REMOTE]
[CONNECTION ConnectionName [SHARE]
| CONNECTION DataSourceName] [AS SQLSELECTStatement]

открывает, если не указана опция AS SQLSELECTStatement, проектировщик вида текущей базы данных. Если опция указана, то создает локальный или удаленный SQL-вид.

Если нет текущей базы данных, то VFP генерирует ошибку.

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

ViewName – имя создаваемого SQL-вида.

REMOTE – создаваемый вид использует удаленные таблицы. Если использована команда

CREATE SQL VIEW [ViewName] REMOTE

то откроется Select Connection or Data Source-диалог, а затем после выбора соединения – проектировщик вида.

Если опция REMOTE опущена и нет опции CONNECTION, то откроется проектировщик локального вида базы данных.

CONNECTION ConnectionName [SHARE] – именованное соединение с именем ConnectionName, используемое при открытии вида. Опция SHARE обеспечивает установление разделяемого соединения, то есть соединения, которое может быть использовано другими видами.

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

При наличии опции CONNECTION создается удаленный вид, даже если опция REMOTE опущена.

Пример. Открывается диалог Open (рис. 16.22) выбора таблиц удаленного источника данных и проектировщик вида.

&& Соединение BookSale существует и ссылается
&& на ODBC-источник данных BookSaleDataBase

create sql view SomeRemoteView connection BookSale

246.1.-Диалог-Open-выбора-удаленных-таблиц

Рис. 16.22. Диалог Open выбора удаленных таблиц

CONNECTION DataSourceName – задает имя ODBC-источника данных. В случае неверно заданного имени генерируется ошибка "Connectivity error".

После выполнения команды с этой опцией появляются диалог Open выбора удаленных таблиц и проектировщик вида.

Пример. Используется имя BookSaleDataBase ODBC-источника данных.

create sql view SomeRemoteView connection BookSaleDataBase

AS SQLSELECTStatement – SQL SELECT-оператор, определяющий состав вида.

При наличии этой опции проектировщик вида не открывается, а вид добавляется в ветвь Local Views либо, если задана опция CONNECTION, в ветвь Remote Views дерева текущей базы данных.

В случае локального вида имени таблицы могут предшествовать имя базы данных и восклицательный знак.

Пример 1. Создается локальный вид базы данных HomeLibrary из полей таблицы Authors.

close databases

open database d:\HomeLibrary\HomeLibrary

create sql view SomeLocalView ;
         as select * from HomeLibrary!Authors

close tables

&& Открываем вид и просматриваем его данные

use SomeLocalView in 0

select SomeLocalView

browse last

Пример 2. Создается удаленный вид из полей таблицы Publishers Access-базы данных BookSales.mdb, ассоциированной с ODBC-источником данных BookSaleDataBase. Связь устанавливается через соединение BookSale.

&& Соединение BookSale существует и ссылается
&& на ODBC-источник данных BookSaleDataBase

create sql view SomeRemoteView connection BookSale ;

as select * from Publishers

Замечание. База данных BookSales.mdb описана в разд. 16.3.2.

SQL SELECT-оператор может включать опцию WHERE. Например:

someYear = 1988

create sql view SomeRemoteView connection BookSale ;

as select * from Titles

where [Year Published] < 1988 and Price > 20

Параметру опции WHERE, если он задан в виде выражения, предшествует вопросительный знак, например:

create sql view SomeRemoteView connection BookSale ;

as select * from Titles ;

where [Year Published] < ?someYear and Price > ?somePrice

close tables

&& Задаем значения параметров перед выполнением команды USE

someYear = 1988

somePrice = 20

use SomeRemoteView in 0

select SomeRemoteView

browse last

Если значения параметров перед открытием вида не заданы, то команда USE инициирует View Parameter-диалог (рис. 16.23).

246.2.-Нужно-ввести-значение-параметра-someYear

Рис. 16.23. Нужно ввести значение параметра someYear

Замечание. Приведенный на рис. 16.23 диалог открывается функцией INPUTBOX( ).

Команды

DELETE VIEW ViewName

или

DROP VIEW ViewName

удаляют вид ViewName текущей базы данных. Открытый курсор удаляемого вида, содержащий SQL-результаты, при выполнении команды закрывается.

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

Команды DELETE VIEW и DROP VIEW идентичны. Синтаксис команды DROP VIEW удовлетворяет ANSI SQL-стандарту.

Пример. Вид SomeLocalView, если он имеется в текущей базе данных, будет из нее удален.

close databases

open database d:\HomeLibrary\HomeLibrary

if InDBC("SomeLocalView", "VIEW") then

         delete view SomeLocalView

endif

Команда

RENAME VIEW ViewName1 TO ViewName2

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

Команда

MODIFY VIEW [ViewName] [REMOTE] [NOWAIT]

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

Опция:

REMOTE – открывается проектировщик удаленного вида.

Функция

REFRESH([nRecords [, nRecordOffset]] [, nWorkArea | cTableAlias])

освежает данные обновляемого SQL-вида, текущего или заданного параметром nWorkArea | cTableAlias. Возвращает число обновленных записей.

Параметры:

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

nRecordOffset – число записей, расположенных между первой обновляемой записью и текущей записью. Например, если текущей является запись под номером 10 и nRecordOffset = 4, то первая обновляемая запись будет иметь номер 6. Если параметр опущен или равен нулю, то обновление начинается с текущей записи.

Обновление осуществляется из таблиц-источников данных SQL-вида.

Функция REFRESH( ) не может обновить блокированные записи. Кроме того, записи таблицы-источника данных должны иметь уникальный ключ. Если запись таблицы не является уникальной, то соответствующая запись SQL-вида получает пометку удаления.

Функция REFRESH( ) повторно выполняет запрос, на котором базируется вид. В ряде случаев это процедура может быть продолжительной, что отражается на общей производительности приложения.

Пример. В таблицу Authors, являющейся источником данных вида SomeLocalView, вносятся изменения. Затем эти изменения переносятся в вид.

close databases

open database d:\HomeLibrary\HomeLibrary

use Authors in 0

use SomeLocalView in 0

&& Уменьшаем дату на 1 день во всех записях таблицы

replace all InputDate with InputDate – 1 in Authors

&& Просматриваем результат

select Authors

browse last

&& Обновляем вид и просматриваем результат

Refresh(Reccount( ), 0, 'SomeLocalView')

&& Тот же результат даст функция REQUERY( )

&& REQUERY('SomeLocalView')

select SomeLocalView

browse last

Функция

REQUERY([nWorkArea | cTableAlias])

получает повторно данные для SQL-вида, текущего или заданного параметром nWorkArea | cTableAlias. Возвращает 1, если данные получены, или 0 – в противном случае.

Функция в отличие от REFRESH( ) обновляет все записи SQL-вида.

Пример см. в описании функции REFRESH( ).

Функция

ISMEMOFETCHED(cFieldName | nFieldNumber [, nWorkArea | cTableAlias])

определяет, было ли доставлено (в случае отложенной доставки, когда свойство FetchMemo установлено в .F.) значение memo-поля. Возвращает .T. в случае положительного ответа, или .F. – в противном случае. Всегда возвращается .T. для локальных данных. Возвращает NULL, если курсор позиционирован в начале или в конце файла. Функция работает как с memo-, так и с general-полями.

Параметры:

cFieldName | nFieldNumber – имя или номер (берется по физической структуре таблицы) memo-поля, для которого получается результат.