Секция WITH позволяет вам использовать существующую команду выборки SQL SELECT для обработки данных из буферизированных курсоров или из фактических хранилищ данных.

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

[WITH (BUFFERING = lExpr) ]

Параметры

lExpr

Логического типа. В следующей таблице описаны возможные значения параметра lExpr.

lExpr Установка, описание

True (.T.)

Данные в операторе SQL-SELECT выбираются из буферизированных таблиц, если такие буферы актуальны.

False (.F.)

(По-умолчанию) Данные в операторе SQL-SELECT выбираются из фактического хранилища, с диска.

Expand imageКомментарии

В следующем программном коде представлены все ключевые секции общей команды SELECT - SQL:

  CopyCode imageКопировать Код
SELECT Select_List
FROM Table_List
...[WITH (BUFFERING = lExpr)]
[WHERE Conditions]
[GROUP BY Column_List]
[UNION Clause]
[HAVING Conditions]
[ORDER BY Column_List]
[INTO Clause | TO Clause ]
[Additional_Display_Options]

Детальная информация о каждой ключевой секции команды SQL SELECT представлена в следующих разделах:

Если вы используете BUFFERING = True (.T.), данные для запроса выбираются из соответствующих буферизированных курсоров, которые могут содержать откорректированные данные, не сброшенные в хранилища Таблиц. В противном случае данные выбираются из хранилищ таблиц, т.е. из записей, сохранненных на диске.

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

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

Параметры секции WITH BUFFERING поддерживаются только для локальных данных  Visual FoxPro и не поддерживаются для удаленных серверов типа Back-End-DataBases.

Если вы используете BUFFERING = False (.F.), тогда ваш оператор выборки SELECT "вытягивает" необходимые данные из хранилища на диске, которые могут отличаться от уже измененных данных (находящихся в буферах таблиц). Если вы не используете рассматриваемых параметр BUFFERING, тогда результаты Запроса основываются на правилах, изложенных в следующем разделе: SET SQLBUFFERING, команда. По-умолчаниюt, данные для результатов Запроса "вытягиваются" из хранилищ на диске. Использование в операторе SELECT секции буферизации WITH BUFFERING = True (.T.) перекрывает текущие установки команды SET SQLBUFFERING.

Использование параметров секции WITH BUFFERING имеет эффект в следующих случаях:

  • Отсутствует рабочая область и именем / алиасом, который имеет имя Результата Запроса.

  • Исходный Курсор не буферизирован.

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

Expand imageПример 1

В следующем примере выполняется простейшая выборка данных из одной таблицы. Для эффективной работы параметров секции WITH (буфферизация данных) требуется, чтобы была уже открыта рабочая область с соответствующим именем "Customers".

  CopyCode imageКопировать Код
SELECT * FROM customers WITH (BUFFERING=.T.)

Expand imageПример 2

В следующем примере демонстрируется, что для каждой исходной таблицы данных, определяемых в секции FROM требуется использование соответствующей секции WITH BUFFERING.

  CopyCode imageКопировать Код
SET MULTILOCKS ON
CREATE TABLE Table1 (Field1 N(10), Field2 N(10))
CREATE TABLE Table2 (Field3 N(10), Field4 N(10))

CURSORSETPROP("Buffering", 5, "Table1")
CURSORSETPROP("Buffering", 5, "Table2")

INSERT INTO Table1 VALUES (1, 1)
INSERT INTO Table2 VALUES (0, 100)

SELECT Table1.*, Table2.* ;
   FROM FORCE Table1 ;
      JOIN Table2 ;
      ON Field1>=Field3 AND Field2>0 AND Field4<100

REPLACE Field4 WITH 99 IN Table2

SELECT Table1.*, Table2.* ;
   FROM FORCE Table1 ;
      JOIN Table2 ;
      ON Field1>=Field3 AND Field2>0 AND Field4<100

SELECT Table1.*, Table2.* ;
   FROM FORCE Table1 WITH (BUFFERING=.T.) ;
      JOIN Table2 WITH (BUFFERING=.T.) ;
      ON Field1>=Field3 AND Field2>0 AND Field4<100

Expand imageСм. также