Copyright: Сборка:   Tue Feb 04 13:13:34 1997


Инструкция ALTER TABLE

Изменяет структуру таблицы, созданной с помощью инструкции CREATE TABLE.

Примечание.   Ядро базы данных Microsoft Jet не поддерживает использование инструкции ALTER TABLE и всех инструкций языка определения данных (DDL) с базами данных, несовместимыми со стандартом Microsoft Jet.  Используйте вместо них методы Create объектов доступа к данным (DAO).

Синтаксис

ALTER TABLE таблица {ADD {COLUMN поле тип[(размер)] [NOT NULL]
[CONSTRAINT индекс] | CONSTRAINT составнойИндекс} |
DROP {COLUMN поле I CONSTRAINT имяИндекса} }

Ниже перечислены аргументы инструкции ALTER TABLE:

Элемент	Описание
таблица	Имя изменяемой таблицы.
поле	Имя поля, добавляемого в таблицу или удаляемого из нее.
тип	Тип данных поля.
размер	Размер поля в символах (только для текстовых и двоичных полей).
индекс	Индекс для поля.  Для получения более подробных сведений о создании индекса смотрите описание предложения CONSTRAINT.
составнойИндекс	Описание составного индекса, добавляемого к таблице.  Для получения более подробных сведений смотрите описание предложения CONSTRAINT.
имяИндекса	Имя составного индекса, который следует удалить.
Дополнительные сведения

С помощью инструкции ALTER TABLE существующую таблицу можно изменить несколькими способами, например:

•	Добавить новое поле в таблицу с помощью предложения ADD COLUMN.  В этом случае укажите имя поля, его тип и (для текстовых и двоичных полей) необязательный размер.  Например, следующая инструкция добавляет в таблицу "Сотрудники" текстовое поле "Примечания" длиной 25 символов:

ALTER TABLE Сотрудники ADD COLUMN Примечания TEXT(25)

Кроме того, можно создать индекс по этому полю.  Для получения более подробных сведений о простых индексах смотрите описание предложения CONSTRAINT.

Если для поля добавлено ограничение NOT NULL, то при добавлении новых записей это поле должно содержать допустимые данные.

•	Добавить составной индекс с помощью зарезервированных слов ADD CONSTRAINT.  Для получения более подробных сведений о составных индексах смотрите описание предложения CONSTRAINT.

•	Удалить поле с помощью зарезервированных слов DROP COLUMN.  В этом случае укажите только имя поля.

•	Удалить составной индекс с помощью зарезервированных слов DROP CONSTRAINT.  В этом случае укажите только имя составного индекса, следующее за зарезервированным словом CONSTRAINT.

Примечания

•	Нельзя добавить или удалить одновременно несколько полей или индексов.

•	Инструкцию CREATE INDEX можно использовать для добавления к таблице простого или составного индекса, а инструкции ALTER TABLE и DROP для удаления индекса, созданного с помощью инструкций ALTER TABLE или CREATE INDEX.

•	Допускается использование ограничения NOT NULL для одиночного поля, а также внутри именованного предложения CONSTRAINT, применяемого к одиночному полю или к именованному предложению CONSTRAINT.  Ограничение NOT NULL можно наложить на поле только один раз, в противном случае возникает ошибка выполнения.


Предложение CONSTRAINT

Создание ограничения с помощью предложения CONSTRAINT подобно применению индекса, хотя оно также применяется для установления отношений между таблицами.

Предложение CONSTRAINT используется в инструкциях ALTER TABLE и CREATE TABLE для создания или удаления индексов.  Существуют два типа предложений CONSTRAINT: одно для создания простого индекса (по одному полю), а второе для создания составного индекса (по нескольким полям).

Примечание.   Ядро базы данных Microsoft Jet не поддерживает использование инструкции CONSTRAINT и всех инструкций языка определения данных (DDL) с базами данных, несовместимыми со стандартом Microsoft Jet.  Используйте вместо них методы Create объектов доступа к данным (DAO).

Синтаксис

Простой индекс:

CONSTRAINT имя {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES внешняяТаблица [(внешнееПоле_1, внешнееПоле_2)]}

Составной индекс:

CONSTRAINT имя
{PRIMARY KEY (ключевое_1[, ключевое_2 [, ...]]) |
UNIQUE (уникальное_1[, уникальное_2 [, ...]]) |
NOT NULL (непустое_1[, непустое_2 [, ...]]) |
FOREIGN KEY (ссылка_1[, ссылка_2 [, ...]])
REFERENCES внешняяТаблица [(внешнееПоле_1 [, внешнееПоле_2 [, ...]])]}

Ниже перечислены аргументы предложения CONSTRAINT:

Элемент	Описание
имя	Имя индекса, который следует создать.
ключевое_1, ключевое_2	Имена одного или нескольких полей, которые следует назначить ключевыми.
уникальное_1, уникальное_2	Имена одного или нескольких полей, которые следует включить в уникальный индекс.
непустое_1, непустое_2	Имена одного или нескольких полей, в которых запрещаются значения Null.
ссылка_1, ссылка_2	Имена одного или нескольких полей, включенных во внешний ключ, которые содержат ссылки на поля в другой таблице.
внешняяТаблица	Имя внешней таблицы, которая содержит поля, указанные с помощью аргумента внешнееПоле.
внешнееПоле_1, внешнееПоле_2	Имена одного или нескольких полей во внешнейТаблице, на которые ссылаются поля, указанные с помощью аргумента ссылка_1, ссылка_2.  Это предложение можно опустить, если данное поле является ключом внешнейТаблицы.
Дополнительные сведения

Предложение CONSTRAINT, предназначенное для создания простого индекса, располагается сразу после описания типа поля в предложении, определяющем поля в инструкции ALTER TABLE или CREATE TABLE.

Применяйте предложение CONSTRAINT, предназначенное для создания составного индекса, если требуется использовать зарезервированное слово CONSTRAINT вне предложения, описывающего поля в инструкции ALTER TABLE или CREATE TABLE.

Предложение CONSTRAINT позволяет создать для поля индекс одного из двух описанных ниже типов:

•	Для создания уникального индекса используйте зарезервированное слово UNIQUE.  Это означает, что в таблице не может быть двух записей, имеющих одно и то же значение в этом поле.  Уникальный индекс создается для любого поля или любой группы полей. Если в таблице определен составной уникальный индекс, то комбинация значений включенных в него полей должна быть уникальной для каждой записи таблицы, хотя отдельные поля и могут иметь совпадающие значения.

•	Для создания ключа таблицы, состоящего из одного или нескольких полей, используйте зарезервированные слова PRIMARY KEY.  Все значения ключа таблицы должны быть уникальными и не значениями Null.  Кроме того, в таблице может быть только один ключ

Примечание.   Не используйте зарезервированные слова PRIMARY KEY при создании индекса в таблице, в которой уже определен ключ; в противном случае возникнет ошибка.

•	Для создания внешнего ключа можно использовать зарезервированные слова FOREIGN KEY.  Если ключ внешней таблицы состоит из нескольких полей, необходимо использовать предложение CONSTRAINT, предназначенное для создания составного индекса.  При этом следует перечислить все поля, содержащие ссылки на поля во внешней таблице, а также указать имя внешней таблицы и имена полей внешней таблицы, на которые ссылаются поля, перечисленные выше, причем в том же порядке.  Если последние поля являются ключом внешней таблицы, то указывать их необязательно, поскольку ядро базы данных считает, что в качестве этих полей следует использовать поля, составляющие ключ внешней таблицы.


Инструкция CREATE INDEX

Создает новый индекс для существующей таблицы.

Примечание.   Для баз данных, несовместимых со стандартом Jet, ядро базы данных Microsoft Jet не поддерживает применение инструкции CREATE INDEX (кроме случаев создания временного индекса для присоединенной таблицы ODBC) и любых других инструкций языка определения данных (DDL).  Используйте вместо них методы Create объектов доступа к данным (DAO). Подробное описание содержится в разделе "Дополнительные сведения".

Синтаксис

CREATE [ UNIQUE ] INDEX индекс
ON таблица (поле [ASC|DESC][, поле [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

Ниже перечислены аргументы инструкции CREATE INDEX:

Элемент	Описание
индекс	Имя создаваемого индекса.
таблица	Имя существующей таблицы, для которой создается индекс.
поле	Имена одного или нескольких полей, включаемых в индекс.  Для создания простого индекса (состоящего из одного поля) введите имя поля в круглых скобках сразу после имени таблицы.  Для создания составного индекса (состоящего из нескольких полей) перечислите имена всех этих полей.  Для расположения элементов индекса в убывающем порядке используйте зарезервированное слово DESC; в противном случае будет принят порядок по возрастанию.
Дополнительные сведения

Чтобы запретить совпадение значений индексированных полей в разных записях, используйте зарезервированное слово UNIQUE.

Необязательное предложение WITH позволяет задать условия на значения.  Например:

•	С помощью параметра DISALLOW NULL запретить значения Null в индексированных полях новых записей.

•	С помощью параметра IGNORE NULL запретить включение в индекс записей, имеющих значения Null в индексированных полях.

•	С помощью зарезервированного слова PRIMARY назначить индексированные поля ключом.  Такой индекс по умолчанию является уникальным, следовательно, зарезервированное слово UNIQUE можно опустить.

Инструкция CREATE INDEX позволяет создать временный индекс для присоединенной таблицы, еще не имеющей индекса, из такого источника данных ODBC как SQL Server.  Для создания временного индекса не требуется иметь доступ к удаленному серверу, поскольку удаленная база данных не будет знать о наличии этого индекса, который в свою очередь не будет оказывать на нее никакого влияния.  Синтаксис инструкции при этом не меняется. Это особенно полезно для создания индекса в таблице, которая обычно из-за отсутствия индекса открыта только для чтения.

Кроме того, инструкцию ALTER TABLE можно использовать для добавления к таблице простого или составного индекса, а инструкцию ALTER TABLE или DROP для удаления индекса, созданного с помощью инструкции ALTER TABLE или CREATE INDEX.

Примечание.   Не используйте зарезервированное слово PRIMARY при создании нового индекса в таблице, в которой уже определен ключ; в противном случае возникнет ошибка.


Инструкция CREATE TABLE

Создает новую таблицу.

Примечание.   Ядро базы данных Microsoft Jet не поддерживает использование инструкции CREATE TABLE или любой другой инструкции языка определения данных (DDL) с базами данных, несовместимыми со стандартом Microsoft Jet.  Применяйте вместо них методы Create объектов доступа к данным (DAO).

Синтаксис

CREATE TABLE таблица (поле_1 тип [(размер)]
[NOT NULL] [индекс_1] [, поле_2 тип [(размер)]
[NOT NULL] [индекс_2] [, ...]] [, CONSTRAINT составнойИндекс [, ...]])

Ниже перечислены аргументы инструкции CREATE TABLE:

Элемент	Описание
таблица	Имя создаваемой таблицы.
поле_1, поле_2	Имена одного или нескольких полей, создаваемых в новой таблице.  Таблица должна содержать хотя бы одно поле.
тип	Тип данных поля в новой таблице.
размер	Размер поля в символах (только для текстовых и двоичных полей).
индекс_1, индекс_2	Предложение CONSTRAINT, предназначенное для создания простого индекса.  Для получения более подробных сведений смотрите описание предложения CONSTRAINT.
составнойИндекс	Предложение CONSTRAINT, предназначенное для создания составного индекса.  Для получения более подробных сведений смотрите описание предложения CONSTRAINT.
Дополнительные сведения

Инструкция CREATE TABLE используется для описания новой таблицы, ее полей и индексов.  Если для поля добавлено ограничение NOT NULL, то при добавлении новых записей это поле должно содержать допустимые данные.

Предложение CONSTRAINT устанавливает различные ограничения на поле и может быть использовано для определения ключа.  Кроме того, для создания ключа или дополнительного индекса для существующей таблицы можно использовать инструкцию CREATE INDEX.

Допускается использование ограничения NOT NULL для одиночного поля, а также внутри именованного предложения CONSTRAINT, применяемого к одиночному полю или к именованному предложению CONSTRAINT.  Ограничение NOT NULL можно наложить на поле только один раз, в противном случае возникает ошибка выполнения.


Инструкция DROP

Удаляет существующую таблицу из базы данных или удаляет существующий индекс из таблицы.

Примечание.   Ядро базы данных Microsoft Jet не поддерживает использование инструкции DROP или любой другой инструкции языка определения данных (DDL) не поддерживает использование инструкции DROP или любой другой инструкции языка определения данных (DDL) для баз данных, несовместимых со стандартом Microsoft Jet.  Применяйте вместо этих инструкций метод Delete объектов доступа к данным (DAO).

Синтаксис

DROP {TABLE таблица | INDEX индекс ON таблица}

Ниже перечислены аргументы инструкции DROP:

Элемент	Описание
таблица	Имя таблицы, которую следует удалить или из которой следует удалить индекс.
индекс	Имя индекса, удаляемого из таблицы.
Дополнительные сведения

Прежде чем удалить таблицу или удалить из нее индекс, необходимо ее закрыть.

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

Для создания таблицы можно использовать инструкцию CREATE TABLE, а для создания индекса инструкцию CREATE INDEX или ALTER TABLE.  Чтобы изменить таблицу, примените инструкцию ALTER TABLE.


Инструкция SELECT

По этой инструкции ядро базы данных Microsoft Jet возвращает данные из базы данных в виде набора записей.

Синтаксис

SELECT [предикат] { * | таблица.* | [таблица.]поле_1
[AS псевдоним_2] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]}
FROM выражение [, ...] [IN внешняяБазаДанных]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Ниже перечислены аргументы инструкции SELECT:

Элемент	Описание
предикат	Один из следующих предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP.  Предикаты используются для ограничения числа возвращаемых записей.  Если они отсутствуют, по умолчанию используется предикат ALL.
*	Указывает, что выбраны все поля заданной таблицы или таблиц.
таблица	Имя таблицы, из которой должны быть отобраны записи.
поле_1, поле_2	Имена полей, из которых должны быть отобраны данные.  Если включить несколько полей, они будут извлекаться в указанном порядке.
псевдоним_2, псевдоним_2	Имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице.
выражение	Имена одной или нескольких таблиц, которые содержат отбираемые данные.
внешняяБазаДанных	Имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных.
Дополнительные сведения

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

Инструкции SELECT не изменяют данные в базе данных.

Обычно слово SELECT является первым словом инструкции SQL.  Большая часть инструкций SQL является инструкциями SELECT или SELECT...INTO.

Ниже приведен минимальный синтаксис инструкции SELECT:

SELECT поля FROM таблица

Для отбора всех полей таблицы можно использовать символ звездочки (*).  Следующая инструкция отбирает все поля из таблицы "Сотрудники":

SELECT * FROM Сотрудники;

Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, перед именем такого поля следует ввести имя таблицы и оператор . (точка).  Предположим, что поле "Отдел" содержится в таблицах "Сотрудники" и "Начальники".  Следующая инструкция SQL отберет поле "Отдел" из таблицы "Сотрудники" и поле "Начальник" из таблицы "Начальники":

SELECT Сотрудники.Отдел, Начальники.Начальник

FROM Сотрудники INNER JOIN Начальники

WHERE Сотрудники.Отдел = Начальники.Отдел;

При создании объекта Recordset ядро базы данных Microsoft Jet использует имя поля таблицы в качестве имени объекта Field в объекте Recordset.  Если требуется другое имя поля, или выражение, создающее поле, не определяет имя, используйте зарезервированное слово AS.  В следующем примере заголовок "Рождение" становится именем объекта Field в результирующем объекте Recordset:

SELECT [Дата рождения]

AS Рождение FROM Сотрудники;

При работе со статистическими функциями или запросами, которые возвращают повторяющиеся имена объекта Field, используйте предложение AS для задания другого имени объекта Field.  В следующем примере заголовок "Численность" задается для возвращаемого объекта Field результирующего объекта Recordset:

SELECT COUNT(КодСотрудника)

AS Численность FROM Сотрудники;

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


Предложение FROM

Указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT.

Синтаксис

SELECT списокПолей
FROM выражение [IN внешняяБазаДанных]

Ниже перечислены аргументы инструкции SELECT, содержащей предложение FROM:

Элемент	Описание
списокПолей	Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT.
выражение	Выражение, определяющее одну или несколько таблиц, откуда извлекаются данные.  Это выражение может быть именем отдельной таблицы, именем сохраненного запроса или результатом операции INNER JOIN, LEFT JOIN, или RIGHT JOIN.
внешняяБазаДанных	Полное имя внешней базы данных, содержащей таблицы, указанные в аргументе выражение.
Дополнительные сведения

Предложение FROM должно присутствовать в каждой инструкции SELECT.

Порядок следования имен таблиц в аргументе выражение не существенен.

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

Следующий пример показывает, как отобрать данные из таблицы "Сотрудники":

SELECT Фамилия, Имя

FROM Сотрудники;


Предложение IN

Определяет таблицы в любой внешней базе данных, с которой ядро базы данных Microsoft Jet может установить связь, например в базе данных dBASE, Paradox или внешней базе данных с ядром Microsoft Jet.

Синтаксис

Чтобы определить результирующую таблицу:

[SELECT | INSERT] INTO назначение IN
{путь | ["путь" "тип"] | ["" [тип; DATABASE = путь]]}

Чтобы определить исходную таблицу:

FROM выражение IN
{путь | ["путь" "тип"] | ["" [тип; DATABASE = путь]]}

Ниже перечислены аргументы инструкции SELECT, содержащей предложение IN:

Элемент	Описание
назначение	Имя внешней таблицы, в которую добавляются данные.
выражение	Имена одной или нескольких таблиц, откуда отбираются данные.  Это выражение может быть именем отдельной таблицы, сохраненным запросом или результатом операции INNER JOIN, LEFT JOIN или RIGHT JOIN.
путь	Полный путь к каталогу или файлу, в котором находится таблица.
тип	Имя типа базы данных, в которой создана таблица, если база данных несовместима со стандартом Microsoft Jet (например, dBASE III, dBASE IV, Paradox 3.x или Paradox 4.x).
Дополнительные сведения

С помощью предложения IN можно одновременно подключиться только к одной внешней базе данных.

В некоторых случаях аргумент путь задает ссылку на каталог, содержащий файлы базы данных.  Например, во время работы с таблицами баз данных dBASE, FoxPro или Paradox аргумент путь ссылку на каталог, содержащий файлы .dbf или .db.  Имя файла таблицы извлекается из аргументов назначение или выражение.

Чтобы определить базу данных, несовместимую со стандартом Microsoft Jet, следует добавить к ее имени знак точки с запятой (;) и заключить имя в одинарные (' ') или прямые (" ") кавычки.  Например, 'dBASE IV;' или "dBASE IV;".

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

... FROM Таблица IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

... FROM Таблица IN "C:\DBASE\DATA\SALES" "dBASE IV;"

Примечания

•	Для повышения быстродействия и упрощения применения вместо предложения IN рекомендуется использовать присоединение таблиц.

•	Кроме того, зарезервированное слово IN может использоваться как оператор сравнения в выражении.  Для получения более подробных сведений смотрите описание оператора In.


Предложение WHERE

Определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкции SELECT, UPDATE или DELETE.

Синтаксис

SELECT списокПолей
FROM выражение
WHERE условиеОтбора

Инструкция SELECT, содержащая предложение WHERE, состоит из трех частей:

Элемент	Описание
списокПолей	Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT.
выражение	Имена одной или нескольких таблиц, из которых отбираются данные.
условиеОтбора	Выражение, которому должны удовлетворять записи, включаемые в результат выполнения запроса.
Дополнительные сведения

Ядро базы данных Microsoft Jet отбирает записи, соответствующие условиям, перечисленным в предложении WHERE.  Если не задавать предложение WHERE, запрос возвращает все строки таблицы.  Если в запросе определить несколько таблиц и не включить предложение WHERE или JOIN, запрос будет возвращать скалярное произведение таблиц.

Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM.  Например, можно отобрать всех сотрудников отдела продаж (WHERE Отдел = 'Продажи') или всех клиентов в возрасте от 18 до 30 лет (WHERE Возраст Between 18 And 30).

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

Предложение WHERE похоже на предложение HAVING.  Предложение WHERE указывает, какие записи должны быть отобраны.  Аналогично, после того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны.

Используйте предложение WHERE для исключения записей из группировки, выполняемой предложением GROUP BY.

Допускается использование различных выражений.  Например, следующая инструкция SQL отбирает всех сотрудников, зарплата которых превышает 810 000 рублей:

SELECT Фамилия, Оклад

FROM Сотрудники

WHERE Оклад > 810000;

Предложение WHERE может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.

Имена полей, которые содержат пробелы или знаки препинания, необходимо заключать в квадратные скобки ([ ]).  Например, в таблицу, содержащую сведения о клиентах, можно включить сведения о привычках клиентов:

SELECT [Любимый ресторан]

При указании аргумента условиеОтбора литералы даты символы дат должны вводиться в американском формате, даже если используется неамериканская версия ядра базы данных Jet.  Например, дата 10 мая 1996 года записывается в России как 10.05.94, а в США как 5/10/94.  Обязательно заключите даты в символы "решетки" (#), как показано в следующих примерах.

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

SELECT *

FROM Заказы

WHERE ДатаИсполнения = #5/10/96#;

Кроме того, можно применять функцию DateValue, которая поддерживает международные стандарты, заданные в Microsoft Windows.  Например, для отбора записей в американской базе данных создайте текст программы:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('5/10/96');

Для российской базы данных текст программы будет выглядеть так:

SELECT *

FROM Заказы

WHERE ДатаИсполнения = DateValue('10.5.96');

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

WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}

Фигурные скобки и дефисы являются обязательными.


Предложение GROUP BY

Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись.  Если инструкция SELECT содержит статистическую функцию SQL, например, Sum или Count, то для каждой записи будет вычислено итоговое значение.

Синтаксис

SELECT списокПолей
FROM таблица
WHERE условиеОтбора
[GROUP BY группируемыеПоля]

Ниже перечислены аргументы инструкции SELECT, содержащей предложение GROUP BY:

Элемент	Описание
списокПолей	Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT.
таблица	Имя таблицы, из которой отбираются записи.  Для получения более подробных сведений смотрите описание предложения FROM.
условиеОтбора	Условия отбора записей.  Если инструкция содержит предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE.
группируемыеПоля	Имена полей (до 10), которые используются для группировки записей.  Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей.
Дополнительные сведения

Предложение GROUP BY является необязательным.

Итоговые значения не рассчитываются, если инструкция SELECT не содержит статистической функции SQL.

Значения Null, которые находятся в полях, заданных в предложении GROUP BY, группируются и не опускаются.  Однако статистические функции SQL не обрабатывают значения Null.

Используйте предложение WHERE для исключения записей из группировки, а предложение HAVING для применения фильтра к записям после группировки.

Если поле, включенное в предложение GROUP BY, не является полем типа Memo или объекта ActiveX, оно может содержать ссылку на любое поле, перечисленное в предложении FROM, даже если это поле не включено в инструкцию SELECT, при условии, что инструкция SELECT содержит по крайней мере одну статистическую функцию SQL.  Ядро базы данных Jet не поддерживает группировку полей МЕМО или объекта ActiveX.

При использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL.


Предложение HAVING

Определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с предложением GROUP BY.  После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING отберет те из полученных записей, которые удовлетворяют условиям отбора, указанным в предложении HAVING.

Синтаксис

SELECT списокПолей
FROM таблица
WHERE условиеОтбора
GROUP BY группируемыеПоля
[HAVING условиеГруппировки]

Ниже перечислены аргументы инструкции SELECT, содержащей предложение HAVING:

Элемент	Описание
списокПолей	Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT.
таблица	Имя таблицы, из которой отбираются записи.  Для получения более подробных сведений смотрите описание предложения FROM.
условиеОтбора	Условия отбора записей.  Если инструкция содержит предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE.
группируемыеПоля	Имена полей (до 10), которые используются для группировки записей.  Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей.
условиеГруппировки	Выражение, определяющее, какие сгруппированные записи следует отображать.
Дополнительные сведения

Предложение HAVING является необязательным.

Предложение HAVING похоже на предложение WHERE, которое определяет, какие записи должны быть отобраны.  После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны:

SELECT КодТипа,

Sum(НаСкладе)

FROM Товары

GROUP BY КодТипа

HAVING Sum(НаСкладе) > 100 And Like "МА*";

Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как And и Or.


Предложение ORDER BY

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

Синтаксис

SELECT списокПолей
FROM таблица
WHERE условиеОтбора
[ORDER BY поле_1 [ASC | DESC ][, поле_2 [ASC | DESC ]][, ...]]]

Ниже перечислены аргументы инструкции SELECT, содержащей предложение ORDER BY:

Элемент	Описание
списокПолей	Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT.
таблица	Имя таблицы, из которой отбираются записи.  Для получения более подробных сведений смотрите описание предложения FROM.
условиеОтбора	Условия отбора записей.  Если инструкция содержит предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE.
поле_1, поле_2	Имена полей, по которым сортируются записи.
Дополнительные сведения

Предложение ORDER BY является необязательным.  Однако оно необходимо для отображения данных в порядке сортировки.

По умолчанию используется порядок сортировки по возрастанию (от "A" до "Я" и от 0 до 9).  Обе приведенные ниже инструкции SQL одинаково сортируют записи по фамилиям сотрудников:

SELECT Фамилия, Имя

FROM Сотрудники

ORDER BY Фамилия;

SELECT Фамилия, Имя

FROM Сотрудники

ORDER BY Фамилия ASC;

Для сортировки по убыванию (от "Я" до "A" и от 9 до 0), следует добавить зарезервированное слово DESC после имени каждого поля, которое нужно отсортировать в убывающем порядке.  В приведенной ниже инструкции SQL отбор происходит на основе окладов, которые сортируются по убыванию:

SELECT Фамилия, Оклад

FROM Сотрудники

ORDER BY Оклад DESC, Фамилия;

При включении поля Memo или объекта ActiveX в предложение ORDER BY возникает ошибка.  Ядро базы данных Microsoft Jet не поддерживает сортировку по полям этих типов.

Предложение ORDER BY обычно является последним элементом инструкции SQL.

Предложение ORDER BY может содержать несколько полей.  Сначала записи сортируются по первому полю в списке ORDER BY, затем записи, имеющие совпадающие значения в первом поле, сортируются по второму полю и т.п.


Предикаты ALL, DISTINCT, DISTINCTROW, TOP

Позволяют отобрать записи среди выбранных с помощью запроса на языке SQL.

Синтаксис

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM таблица

Ниже перечислены аргументы инструкции SELECT, содержащей эти предикаты:

Элемент	Описание
ALL	Если инструкция SQL не содержит ни одного предиката, то подразумевается предикат ALL.  Ядро базы данных Microsoft Jet отбирает все записи, соответствующие условиям, заданным в инструкции SQL.  Приведенные ниже инструкции SQL эквивалентны; они возвращают все записи из таблицы "Сотрудники": SELECT ALL * FROM Сотрудники ORDER BY КодСотрудника; SELECT * FROM Сотрудники ORDER BY КодСотрудника;
DISTINCT	Исключает записи, которые содержат повторяющиеся значения в выбранных полях.  Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными.  Например, в таблице "Сотрудники" есть однофамильцы.  Если две записи содержат значение "Иванов" в поле "Фамилия", то следующая инструкция SQL возвратит только одну из них: SELECT DISTINCT Фамилия FROM Сотрудники; Если опустить предикат DISTINCT, этот запрос возвратит обе записи для фамилии Иванов. Если предложение SELECT содержит более одного поля, то для включения записи в результат выполнения запроса необходимо, чтобы совокупность значений во всех этих полях была уникальной. Результат выполнения инструкции SQL, содержащей предикат DISTINCT, является необновляемым и не отражает последующие изменения, внесенные другими пользователями.
DISTINCTROW	Опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях.  Например, создан запрос, объединяющий таблицы "Клиенты" и "Заказы" по полю "Клиент".  В поле "Клиент" таблицы "Клиенты" нет повторяющихся значений, однако, они есть в одноименном поле таблицы "Заказы", поскольку каждый клиент может разместить несколько заказов.  Следующая инструкция SQL показывает, как можно использовать предикат DISTINCTROW для получения списка клиентов, разместивших хотя бы один заказ, без включения сведений о самих заказах: SELECT DISTINCTROW Название FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента= Заказы.КодКлиента ORDER BY Название; Если опустить предикат DISTINCTROW, в результат выполнения запроса будет включено несколько строк о каждом клиенте, сделавшем несколько заказов. Предикат DISTINCTROW влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц.  Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц.
TOP n [PERCENT]	Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.  Следующая инструкция SQL позволяет получить список 25 лучших студентов выпуска 1996 года: SELECT TOP 25 Имя, Фамилия FROM Студенты WHERE ГодВыпуска = 1996 ORDER BY СреднийБалл DESC; Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы "Студенты", удовлетворяющих предложению WHERE. Предикат TOP не осуществляет выбор между равными значениями.  Если в предыдущем примере средние балы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей. Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.  Предположим, что вместо 25 лучших студентов следует отобрать студентов, попавших в последние 10 процентов: SELECT TOP 10 PERCENT Имя, Фамилия FROM Студенты WHERE ГодВыпуска = 1994 ORDER BY СреднийБалл ASC; Предикат ASC обеспечивает возврат последних значений.  Значение, следующее после предиката TOP должно быть числовым значением типа Integer без знака. Предикат TOP не влияет на возможность обновления запроса.
таблица	Имя таблицы, из которой отбираются записи.


Инструкция DELETE

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

Синтаксис

DELETE [таблица.*]
FROM таблица
WHERE условиеОтбора

Ниже перечислены аргументы инструкции DELETE:

Элемент	Описание
таблица	Необязательное имя таблицы, из которой удаляются записи.
таблица	Имя таблицы, из которой удаляются записи.
условиеОтбора	Выражение, определяющее удаляемые записи.
Дополнительные сведения

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

Чтобы удалить из базы данных целую таблицу, можно использовать метод Execute вместе с инструкцией DROP.  Однако при таком удалении таблицы теряется ее структура.  Если же применить инструкцию DELETE, удаляются только данные.  При этом сохраняются структура таблицы и все остальные ее свойства, такие как атрибуты полей и индексы.

Инструкцию DELETE можно использовать для удаления записей из таблиц, связанных отношением "один-ко-многим" с другими таблицами.  Операции каскадного удаления приводят к удалению записей из таблиц, находящихся на стороне отношения "многие", когда в запросе удаляется соответствующая им запись на стороне "один".  Например, в отношении между таблицами "Клиенты" и "Заказы", таблица "Клиенты" расположена на стороне "один", а таблица "Заказы" на стороне "многие".  Если разрешено каскадное удаление, то удаление записи из таблицы "Клиенты" приводит к удалению соответствующих записей из таблицы "Заказы".

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

Внимание!

•	Нельзя восстановить записи, удаленные с помощью запроса на удаление.  Чтобы узнать, какие записи будут удалены, просмотрите сначала результаты запроса на выборку, использующего те же самые условие отбора, а затем выполните запрос на удаление.

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


Операция INNER JOIN

Объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения.

Синтаксис

FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 оператор таблица_2.поле_2

Ниже перечислены аргументы операции INNER JOIN:

Элемент	Описание
таблица_1, таблица_2	Имена таблиц, записи которых подлежат объединению.
поле_1, поле_2	Имена объединяемых полей.  Если эти поля не являются числовыми, то должны иметь одинаковый тип данных и содержать данные одного рода, однако, поля могут иметь разные имена.
оператор	Любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>".
Дополнительные сведения

Операцию INNER JOIN можно использовать в любом предложении FROM.  Это самые обычные типы связывания.  Они объединяют записи двух таблиц, если связующие поля обеих таблиц содержат одинаковые значения.

Операцию INNER JOIN можно использовать с таблицами "Отделы" и "Сотрудники" для отбора всех сотрудников каждого отдела.  Для отбора же всех отделов (в том числе тех, в которых нет ни одного сотрудника) или всех сотрудников (в том числе тех, которые не приписаны ни к какому отделу) следует использовать операцию LEFT JOIN или RIGHT JOIN, которая создает внешнее объединение.

Попытка объединить поля Memo или объекта ActiveX приведет к возникновению ошибки.

Допускается объединение двух числовых полей подобных типов, например, поле счетчика и поля с типом "Длинное целое".  Однако нельзя объединить типы полей "С плавающей точкой (4 байт)" и "С плавающей точкой (8 байт)".

Следующая инструкция SQL объединяет таблицы "Типы" и "Товары" по полю "КодТипа":

SELECT Категория, Марка

FROM Типы INNER JOIN Товары

ON Типы.КодТипа = Товары.КодТипа;

В предыдущем примере поле "КодТипа" используется для объединения таблиц, однако, оно не включается в результат выполнения запроса, поскольку не включено в инструкцию SELECT.  Чтобы включить связующее поле (в данном случае поле Типы.КодТипа) в результат выполнения запроса, следует включить имя этого поля в инструкцию SELECT.

Чтобы связать несколько предложений ON в инструкции JOIN, используйте следующий синтаксис:

SELECT поля
FROM таблица_1 INNER JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_1 AND
ON таблица_1.поле_2 оператор таблица_2.поле_2) OR
ON таблица_1.поле_3 оператор таблица_2.поле_3)];

Операции JOIN могут быть вложенными; в таком случае используйте следующий синтаксис:

SELECT поля
FROM таблица_1 INNER JOIN
(таблица_2 INNER JOIN [( ]таблица_3
[INNER JOIN [( ]таблица_X [INNER JOIN ...)]
ON таблица_3.поле_3 оператор таблица_X.поле_X)]
ON таблица_2.поле_2 оператор таблица_3.поле_3)
ON таблица_1.поле_1 оператор таблица_2.поле_2;

Операции LEFT JOIN или RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в LEFT JOIN или RIGHT JOIN.


Инструкция INSERT INTO

Добавляет запись или записи в таблицу.  Эта инструкция образует запрос на добавление записей.

Синтаксис

Запрос на добавление нескольких записей:

INSERT INTO назначение [IN внешняяБазаДанных] [(поле_1[, поле_2[, ...]])]
SELECT [источник.]поле_1[, поле_2[, ...]
FROM выражение

Запрос на добавление одной записи:

INSERT INTO назначение [(поле_1[, поле_2[, ...]])]
VALUES (значение_1[, значение_2[, ...])

Ниже перечислены аргументы инструкции INSERT INTO:

Элемент	Описание
назначение	Имя таблицы или запроса, в который добавляются записи.
внешняяБазаДанных	Путь к внешней базе данных.  Более подробные сведения об этом аргументе можно найти в описании предложения IN.
источник	Имя таблицы или запроса, откуда копируются записи.
поле_1, поле_2	Имена полей для добавления данных, если они следуют за аргументом назначение; имена полей, из которых берутся данные, если они следуют за аргументом источник.
выражение	Имена таблицы или таблиц, откуда вставляются данные.  Это выражение может быть именем отдельной таблицы или результатом операции INNER JOIN, LEFT JOIN или RIGHT JOIN, а также сохраненным запросом.
значение_1, значение_2	Значения, добавляемые в указанные поля новой записи.  Каждое значение будет вставлено в поле, занимающее то же положение в списке: значение_1 вставляется в поле_1 в новой записи, значение_2 в поле_2 и т.д.  Каждое значение текстового поля следует заключать в кавычки (' '); для разделения значений используйте запятые.
Дополнительные сведения

Инструкцию INSERT INTO можно использовать для добавления одной записи в таблицу с помощью запроса на добавление одной записи, описанного выше.  В этом случае инструкция содержит имя и значение каждого поля записи.  Нужно определить все поля записи, в которые будет помещено значение, и значения для этих полей.  Если поля не определены, в недостающие столбцы будет вставлено значение по умолчанию или значение Null.  Записи добавляются в конец таблицы.

Инструкцию INSERT INTO можно также использовать для добавления набора записей из другой таблицы или запроса с помощью предложения SELECT ... FROM, как показано выше в запросе на добавление нескольких записей.  В этом случае, предложение SELECT определяет поля, добавляемые в указанную таблицу назначение.

Аргументы источник или назначение определяют таблицу или запрос.  Если указан запрос, ядро базы данных Microsoft Jet добавляет записи во все таблицы, указанные в запросе.

Инструкция INSERT INTO является необязательной, однако, если она присутствует, то должна находиться перед инструкцией SELECT.

Если результирующая таблица содержит ключ, убедитесь, что в ключевое поле (или поля) добавляются уникальные непустые значения; в противном случае, ядро базы данных ядро базы данных Microsoft Jet не будет добавлять записи.

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

При добавлении записей в таблицу в другой базе данных используйте предложение IN.

Для создания новой таблицы используйте инструкцию SELECT... INTO вместо запроса на создание таблицы.

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

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

Вместо добавления существующих записей из другой таблицы, можно указать значения полей одной новой записи с помощью предложения VALUES.  Если список полей опущен, предложение VALUES должно содержать значение для каждого поля таблицы; в противном случае инструкция INSERT не будет выполнена.  Используйте дополнительную инструкцию INSERT INTO с предложением VALUES для каждой добавляемой новой записи.


Операции LEFT JOIN, RIGHT JOIN

Объединяют записи исходных таблиц при использовании в любом предложении FROM.

Синтаксис

FROM таблица_1 [ LEFT | RIGHT ] JOIN таблица_2
ON таблица_1.поле_1 оператор таблица_2.поле_2

Ниже перечислены аргументы операций LEFT JOIN и RIGHT JOIN:

Элемент	Описание
таблица_1, таблица_2	Имена таблиц, записи которых подлежат объединению.
поле_1, поле_2	Имена объединяемых полей.  Поля должны иметь одинаковый тип данных и содержать данные одного рода, однако, могут иметь разные имена.
оператор	Любой оператор сравнения: "=," "<," ">," "<=," ">=," или "<>".
Дополнительные сведения

Используйте операцию LEFT JOIN для создания левого внешнего объединения, при котором все записи из первой (левой) таблицы включаются в динамический набор, даже если во второй (правой) таблице нет соответствующих им записей.

Используйте операцию RIGHT JOIN для создания правого внешнего объединения, при котором все записи из второй (правой) таблицы включаются в динамический набор, даже если в первой (левой) таблице нет соответствующих им записей.

Например, операцию LEFT JOIN можно использовать с таблицами "Отделы" (левая) и "Сотрудники" (правая) для отбора всех отделов, в том числе тех, в которых нет ни одного сотрудника.  Для отбора всех сотрудников, в том числе тех, которые не приписаны ни к одному отделу, используйте операцию RIGHT JOIN.

Следующая инструкция SQL объединяет таблицы "Типы" и "Товары" по полю "КодТипа".  Результатом является список категорий, в том числе тех, которые не содержат ни одного товара:

SELECT Категория,

Марка

FROM Типы LEFT JOIN Товары

ON Типы.КодТипа = Товары.КодТипа;

В предыдущем примере поле "КодТипа" используется для объединения таблиц, однако, не включается в результат выполнения запроса, поскольку не включено в инструкцию SELECT.  Чтобы включить связующее поле (в данном случае поле Типы.КодТипа) в результат выполнения запроса, включите имя этого поля в инструкцию SELECT.

Примечания

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

•	Операции LEFT JOIN или RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN.  Более подробные сведения по этому вопросу можно найти в описании операции INNER JOIN.

•	Можно связать несколько предложений ON.  Более подробные сведения по этому вопросу можно найти в описании операции INNER JOIN.

•	Попытка объединить поля Memo или объекта ActiveX приведет к возникновению ошибки.


Описание PARAMETERS

Описывает имя и тип данных каждого параметра в запросе с параметрами.

Синтаксис

PARAMETERS имя типДанных [, имя типДанных [, ...]]

Ниже перечислены аргументы описания PARAMETERS:

Элемент	Описание
имя	Имя параметра.  Задается в свойстве Name объекта Parameter и используется для обращения к этому параметру в семействе Parameters.  Значение аргумента имя может быть строкой, которая отображается в окне диалога при выполнении запроса.  Строку, содержащую пробелы и знаки препинания, необходимо заключить в квадратные скобки ([ ]) .  Например, допустимыми значениями этого аргумента являются [Минимальная цена] и [Сведения за какой месяц Вы хотите получить?].
типДанных	Один из первичных типов данных SQL ядра Microsoft Jet или их синонимы.
Дополнительные сведения

Для регулярно выполняемых запросов можно использовать описание PARAMETERS, чтобы создать запрос с параметрами.  Запрос с параметрами помогает автоматизировать процесс изменения условий отбора запроса.  При наличии запроса с параметрами программа должна поставлять параметры при каждом запуске запроса.

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

Для разделения параметров в описании следует использовать запятые.  В следующем примере описаны два параметра:

PARAMETERS [Минимальная цена] Currency, [Начальная дата] DateTime;

В предложении WHERE или HAVING можно использовать аргумент имя, но не типДанных.  Следующая инструкция SQL запрашивает у пользователя два параметра, а затем использует их при отборе записей из таблицы "Заказы":

PARAMETERS [Минимальная цена] Currency,

[Начальная дата] DateTime;

SELECT КодЗаказа, СуммаЗаказа

FROM Заказы

WHERE СуммаЗаказа > [Минимальная цена]

AND ДатаРазмещения >= [Начальная дата];


Предложение PROCEDURE

Описывает имя и необязательные параметры запроса.

Синтаксис

PROCEDURE имя [параметр_1 типДанных[, параметр_2 типДанных[, ...]]

Ниже перечислены аргументы предложения PROCEDURE:

Элемент	Описание
имя	Имя процедуры, удовлетворяющее стандартным правилам именования.
параметр_1, параметр_2	Одно или несколько имен полей или параметров.  Например: PROCEDURE Продажи_по_странам [Начальная дата] DateTime, [Конечная дата] DateTime; Более подробные сведения о параметрах содержатся в разделе PARAMETERS.
типДанных	Один из первичных типов данных SQL ядра Microsoft Jet или их синонимы.
Дополнительные сведения

Процедура SQL состоит из предложения PROCEDURE (которое определяет имя процедуры), необязательного списка описаний параметров и одной инструкции SQL.  Например, процедура  Получение_компонента может выполнять запрос, который отбирает указанные компоненты.

Примечания

•	Если предложение содержит несколько описаний полей (т. е. пар параметр-типДанных), разделяйте их запятыми.

•	За предложением PROCEDURE должна следовать инструкция SQL (например, инструкция SELECT или UPDATE).


Инструкция SELECT...INTO

Создает запрос на создание таблицы.

Синтаксис

SELECT поле_1[, поле_2[, ...]] INTO новаяТаблица [IN внешняяБазаДанных]
FROM источник

Ниже перечислены аргументы инструкции SELECT...INTO:

Элемент	Описание
поле_1, поле_2	Имена полей, которые следует скопировать в новую таблицу.
новаяТаблица	Имя создаваемой таблицы.  Это имя должно удовлетворять стандартным правилам именования.  Если новаяТаблица совпадает с именем существующей таблицы, возникает перехватываемая ошибка.
внешняяБазаДанных	Путь к внешней базе данных.  Более подробные сведения об этом аргументе можно найти в описании предложения IN.
источник	Имя существующей таблицы, из которой отбираются записи.  Это может быть одна таблица, несколько таблиц или запрос.
Дополнительные сведения

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

Примечания

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

•	Для добавления данных в существующую таблицу используйте инструкцию NSERT INTO вместо запроса на добавление записей.

•	Чтобы узнать, какие записи будут отобраны при выполнении запроса на создание таблицы, сначала просмотрите результаты инструкции SELECT, использующей те же условия отбора.


Подчиненные запросы SQL

Подчиненным запросом называют инструкцию SELECT, вложенную в инструкцию SELECT, SELECT...INTO, INSERT...INTO, DELETE или UPDATE или в другой подчиненный запрос.

Синтаксис

Подчиненный запрос создается одним из трех способов:

сравнение [ANY | ALL | SOME] (инструкцияSQL)

выражение [NOT] IN (инструкцияSQL)

[NOT] EXISTS (инструкцияSQL)

Ниже перечислены аргументы подчиненного запроса:

Элемент	Описание
сравнение	Выражение и оператор сравнения, который сравнивает выражение с результатами подчиненного запроса.
выражение	Выражение, для которого проводится поиск в результирующем наборе записей подчиненного запроса.
инструкцияSQL	Инструкция SELECT, которая соответствует формату и всем правилам, принятым для инструкций SELECT.  Она должна быть заключена в круглые скобки.
Дополнительные сведения

Подчиненный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в предложениях WHERE и HAVING.  Инструкция SELECT используется в подчиненном запросе для задания набора конкретных значений, вычисляемых в выражениях предложений WHERE или HAVING.

Предикаты ANY или SOME, являющиеся синонимами, используются для отбора записей в главном запросе, которые удовлетворяют сравнению со всеми записями, отобранными в подчиненном запросе.  В следующем примере отбираются все товары, цена которых больше, чем цена  любого товара, проданного со скидкой в 25 процентов или более:

SELECT * FROM Товары

WHERE Цена > ANY

(SELECT Цена FROM Заказано

WHERE Скидка >= .25);

Предикат ALL используется для отбора в главном запросе только тех записей, которые удовлетворяют сравнению со всеми записями, отобранными в подчиненном запросе.  Если в предыдущем примере предикат ANY заменить предикатом ALL, результат запроса будет включать только те товары, чья цена больше, чем цена всех товаров, проданных со скидкой 25 или более.  Это условие является значительно более жестким.

Предикат IN используется для отбора в главном запросе только тех записей, которые содержат значения, совпадающие с одним из отобранных подчиненным запросом.  Следующий пример возвращает все товары, проданные со скидкой, большей или равной 25 процентам:

SELECT * FROM Товары

WHERE КодТовара IN

(SELECT КодТовара FROM Заказано

WHERE Скидка >= .25);

И наоборот, предикат NOT IN используется для отбора в главном запросе только тех записей, которые содержат значения, не совпадающие ни с одним из отобранных подчиненным запросом.

Предикат EXISTS (с необязательным зарезервированным словом NOT) используется в логическом выражении для определения того, должен ли подчиненный запрос возвращать какие-либо записи.

В подчиненном запросе можно использовать псевдонимы таблиц для ссылки на таблицы, перечисленные в предложении FROM, расположенном вне подчиненного запроса.  В следующем примере отбираются фамилии  и имена сотрудников, чья зарплата равна или больше средней зарплаты сотрудников, имеющих ту же должность.  В данном примере таблица "Сотрудники" получает псевдоним "Т1":

SELECT Фамилия,

Имя, Должность, Оклад

FROM Сотрудники AS T1

WHERE Оклад >=

(SELECT Avg(Оклад)

FROM Сотрудники

WHERE T1.Должность = Сотрудники.Должность) Order by Должность;

В последнем примере зарезервированное слово AS не является обязательным.

Некоторые подчиненные запросы можно использовать в перекрестных запросах как предикаты (в предложении WHERE).  Подчиненные  запросы, используемые для вывода результатов (в списке SELECT), нельзя использовать в перекрестных запросах.


Инструкция TRANSFORM

Создает перекрестный запрос.

Синтаксис

TRANSFORM статФункция
инструкция
PIVOT поле [IN (значение_1[, значение_2[, ...]])]

Ниже перечислены аргументы инструкции TRANSFORM:

Элемент	Описание
статФункция	Статистическая функция SQL, обрабатывающая указанные данные.
инструкция	Инструкция SELECT.
поле	Поле или выражение, которое содержит заголовки столбцов для результирующего набора.
значение_1, значение_2	Фиксированные значения, используемые при создании заголовков столбцов.
Дополнительные сведения

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

Инструкция TRANSFORM является необязательной, однако, если она присутствует, то должна быть первой инструкцией в строке SQL.  Она должна находиться впереди инструкции SELECT, которая указывает поля, содержащие заголовки строк, и предложения GROUP BY, которое задает группировку по строкам.  При желании можно включить и другие предложения, например, WHERE, для описания дополнительных условий отбора и сортировки. Кроме того, можно использовать подчиненные запросы как предикаты в перекрестном запросе, особенно в предложении WHERE.

Значения, возвращенные аргументом поле, используются в качестве заголовков столбцов в результирующем наборе запроса.  Например, продажи по месяцам в перекрестном запросе образуют результирующую таблицу из 12 столбцов.  Аргумент поле можно ограничить, чтобы создать заголовки из фиксированных значений (значение_1, значение_2 ), перечисленных в необязательном предложении IN.  Кроме того, фиксированные заголовки, которым не соответствуют реальные данные, можно использовать для создания дополнительных столбцов.


Операция UNION

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

Синтаксис

[TABLE] запрос_1 UNION [ALL] [TABLE] запрос_2 [UNION [ALL] [TABLE] запрос_n [ ... ]]

Ниже перечислены аргументы операции UNION:

Элемент	Описание
запрос_1-n	Инструкция SELECT, имя сохраненного запроса или имя сохраненной таблицы, перед которым стоит зарезервированное слово TABLE.
Дополнительные сведения

В одной операции UNION можно объединить в любом наборе результаты нескольких запросов, таблиц и инструкций SELECT.  В следующем примере объединяется существующая таблица "Новые счета" и инструкции SELECT:

TABLE [Новые счета] UNION ALL

SELECT *

FROM Клиенты

WHERE СуммаЗаказа > 1000;

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

Все запросы, включенные в операцию UNION, должны отбирать одинаковое число полей; при этом типы данных и размеры полей не обязаны совпадать.

Используйте псевдонимы только в первом предложении SELECT, потому что в остальных они пропускаются.  В предложении ORDER BY ссылайтесь на поля по их названиям в первом предложении SELECT.

Примечания

•	В каждом аргументе запрос допускается использование предложения GROUP BY или HAVING для группировки возвращаемых данных.

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


Инструкция UPDATE

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

Синтаксис

UPDATE таблица
SET новоеЗначение
WHERE условиеОтбора;

Ниже перечислены аргументы инструкции UPDATE:

Элемент	Описание
таблица	Имя таблицы, данные в которой следует изменить.
новоеЗначение	Выражение, определяющее значение, которое должно быть вставлено в указанное поле обновленных записей.
условиеОтбора	Выражение, отбирающее записи, которые должны быть изменены.  При выполнении этой инструкции будут изменены только записи, удовлетворяющие указанному условию.
Дополнительные сведения

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

Одновременно можно изменить значения нескольких полей.  Следующая инструкция SQL увеличивает стоимость заказа на 10 процентов, а стоимость доставки на 3 процента:

UPDATE Заказы

SET СуммаЗаказа = СуммаЗаказа * 1.1,

СтоимостьДоставки = СтоимостьДоставки * 1.03

WHERE СтранаПолучателя = 'Грузия';

Внимание!

•	Инструкция UPDATE не приводит к созданию результирующего набора записей.  Чтобы узнать, какие записи будут изменены, сначала просмотрите результаты запроса на выборку, использующего те же самые условия отбора, а затем выполните запрос на обновление записей.

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


Описание WITH OWNERACCESS OPTION

При работе в сети в составе защищенной рабочей группы используйте с запросом это описание, чтобы предоставить пользователю, выполняющему запрос, те же разрешения, которые имеются у владельца запроса.

Синтаксис

инструкцияSQL
WITH OWNERACCESS OPTION

Дополнительные сведения

Описание WITH OWNERACCESS OPTION является необязательным.

Следующий пример позволяет пользователю просмотреть сведения о зарплате (даже, если в остальных случаях пользователь не имеет разрешений на просмотр ведомости о зарплате).  Предполагается, что у владельца запроса эти разрешения есть:

SELECT Фамилия,

Имя, Оклад

FROM Сотрудники

ORDER BY Фамилия

WITH OWNERACCESS OPTION;

Если в обычных условиях пользователю запрещено создавать или дополнять таблицы, описание WITH OWNERACCESS OPTION, позволяет разрешить этому пользователю выполнить запрос на создание таблицы или запрос на добавление записей.

Если требуется соблюдать правила защиты рабочих групп и разрешения пользователей, не пользуйтесь описанием WITH OWNERACCESS OPTION.

Этот элемент требует наличия доступа к файлу System.mdw базы данных.  Он полезен только при использовании в защищенных сетевых реализациях.


Статистические функции SQL

Статистические функции SQL используются для определения статистических данных на основе наборов числовых значений.  Допускается использование этих функций в запросах и статистических выражениях свойства SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.

Функция Avg

Функция Count

Функции Min, Max

Функции StDev, StDevP

Функция Sum

Функции Var, VarP


Функция Avg

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

Синтаксис

Avg(выражение)

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

Дополнительные сведения

Среднее значение, вычисленное функцией Avg, является числовым значением (сумма значений, деленная на их количество).  Возможно использование функции Avg для вычисления, например, средней стоимости доставки.

Функция Avg не включает в вычисления поля со значениями Null.

Функция Avg используется в выражении запроса и в свойстве SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.


Функция Count

Вычисляет количество записей, возвращаемых запросом.

Синтаксис

Count(выражение)

Аргумент выражение является строковым выражением, которое определяет поле, содержащее данные для подсчета, или выражение, выполняющее вычисления с данными из этого поля.  Операнды аргумента выражение могут включать имя поля таблицы, константу или функцию.  (Функция может быть внутренней или определяться пользователем, но не одной из других статистических функций SQL).  Подсчитывать можно любые данные, включая текстовые.

Дополнительные сведения

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

Хотя аргумент выражение допускает выполнение вычислений над полем, функция Count возвращает просто количество записей, независимо от того, какие данные содержатся в этих записях.

Функция Count не подсчитывает записи со значениями Null, если только аргумент выражение не содержит подстановочный знак звездочки (*).  Если используются знаки звездочки, функция Count вычисляет общее количество записей, включая те, которые содержат  пустые поля.  Функция Count(*) работает значительно быстрее функции Count([Имя столбца]).  Не следует заключать символ звездочки в прямые кавычки (" ").  В следующем примере вычисляется количество записей в таблице "Заказы":

SELECT Count(*)

AS ЧислоЗаказов FROM Заказы;

Если в аргументе выражение задано несколько полей, функция Count подсчитывает запись только в том случае, если хотя бы одно из полей не содержит значение Null.  Если все указанные поля содержат значения Null, запись не подсчитываются.  Для разделения имен полей используется символ (&).  В следующем примере демонстрируется способ ограничения числа записей теми записями, для которых поле "ДатаИсполнения" или поле "СтоимостьДоставки" не содержат пустые значения:

SELECT

Count('ДатаИсполнения & СтоимостьДоставки')

AS [Not Null] FROM Заказы;

Функцию Count можно использовать в выражении запроса, а также в свойстве SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.


Функции First, Last

Возвращают значение поля из первой или последней записи результирующего набора запроса.

Синтаксис

First(выражение)

Last(выражение)

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

Дополнительные сведения

Функции First и Last могут рассматриваться как аналоги методов MoveFirst и MoveLast объекта доступа к данным (DAO) Recordset.  Они возвращают значение указанного поля, находящееся соответственно в первой или последней записях результирующего набора запроса.  Поскольку записи обычно возвращаются без какого-либо специального порядка (кроме случаев, когда запрос содержит предложение ORDER BY), эти функции возвращают случайные записи.


Функции Min, Max

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

Синтаксис

Min(выражение)

Max(выражение)

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

Дополнительные сведения

Функции Min и Max используются для определения наименьшего и наибольшего значений из поля на основе выборки или группировки.  Например, можно применить эти функции для возврата наименьшей и наибольшей стоимости доставки.  Если не указан способ группировки, используется  вся таблица.

Функции Min и Max используются в выражении запроса и в свойстве SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.


Функции StDev, StDevP

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

Синтаксис

StDev(выражение)

StDevP(выражение)

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

Дополнительные сведения

Функции StDevP и StDev вычисляют величину смещенного и несмещенного среднеквадратичного отклонения.

Если базовый запрос содержит меньше двух записей (или не содержит записей для функции StDevP), эти функции возвращают значение Null (что означает невозможность вычисления среднеквадратичного отклонения).

Функции StDev и StDevP используются в выражении запроса, а также в свойстве SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.


Функция Sum

Возвращает сумму набора значений, содержащихся в заданном поле запроса.

Синтаксис

Sum(выражение)

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

Дополнительные сведения

Функция Sum выполняет суммирование значений в поле.  Например, функцию Sum можно использовать для определения полной стоимости доставки.

Функция Sum пропускает записи с полями, содержащим значения Null.  В следующем примере показано, как вычислить сумму произведений полей "Цена" и "Количество":

SELECT

Sum(Цена * Количество)

AS [Общий доход] FROM Заказано;

Функция Sum используется в выражении запроса, а также в свойстве SQL объекта QueryDef или при создании объекта Recordset на основе запроса SQL.


Функции Var, VarP

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

Синтаксис

Var(выражение)

VarP(выражение)

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

Дополнительные сведения

Функции VarP и Var вычисляют значение смещенной и несмещенной дисперсии.

Если базовый запрос содержит меньше двух записей, функции Var и VarP возвращают значение Null (что означает невозможность вычисления дисперсии).

Функции Var и VarP используются в выражении запроса или в инструкции SQL.


Вычисление полей в статистических функциях SQL

В статистической функции SQL допускается использование аргументов в виде строковых выражений при выполнении вычислений со значениями полей.  Например, чтобы вычислить величину в процентах (скидок или налогов), следует умножить значение поля на дробное число.

Следующая таблица содержит примеры вычислений с полями из таблиц "Заказы" и "Заказано" в базе данных Northwind.mdb.

Вычисление	Пример
Добавление числа к значению поля	СтоимостьДоставки + 5
Вычитание числа из значения поля	СтоимостьДоставки - 5
Умножение значения поля на число	Цена * 2
Деление значения поля на число	СтоимостьДоставки / 2
Добавление значения одного поля к другому	НаСкладе + Заказ
Вычитание значений одного поля из другого	МинимальныйЗапас - НаСкладе
В следующем примере вычисляется среднее значение скидки для всех заказов в базе данных Northwind.mdb.  Вычисляется произведение значений полей "Цена" и "Скидка" для определения скидки с каждого заказа, а затем определяется среднее значение.  Имеется возможность ввести это выражение в инструкцию SQL в программе Visual Basic:

SELECT Avg(Цена * Скидка) AS [Средняя скидка] FROM Заказано;


Оператор Between...And

Определяет принадлежность значения выражения указанному диапазону.  Этот оператор можно использовать в инструкциях SQL.

Синтаксис

выражение [Not] Between значение_1 And значение_2

Ниже перечислены аргументы оператора Between...And:

Элемент	Описание
выражение	Выражение, определяющее поле, значение которого проверяется на принадлежность к диапазону.
значение_1, значение_2	Выражения, задающие границы диапазона.
Дополнительные сведения

Если значение поля, определенного в аргументе выражение, попадает в диапазон, задаваемый аргументами значение_1 и значение_2 (включительно), оператор Between...And возвращает значение True; в противном случае возвращается значение False.  Логический оператор Not позволяет проверить противоположное условие (что выражение находится за пределами диапазона, заданного с помощью аргументов значение_1 и значение_2).

Оператор Between...And часто используют для проверки, попадает ли значение поля в указанный диапазон чисел.  В следующем примере проверяется, был ли заказ отправлен в место, индекс которого попадает в указанный диапазон.  Если значение индекса попадает в диапазон от 109000 до 109999, функция IIf возвращает значение "Местный".  В противном случае, она возвращает значение "Междугородный".

SELECT IIf(Индекс Between 109000 And 109999, "Местный", "Междугородный")

FROM Заказы

Если выражение, значение_1 или значение_2 имеет значение Null, оператор Between...And возвращает значение Null.

Поскольку подстановочные знаки, такие как символ звездочки * считаются текстовыми символами, их нельзя использовать в операторе Between...And.  Например, нельзя задать 980* и 989* для поиска всех индексов, начинающихся с цифр от 980 до 989.  Для выполнения этой задачи воспользуйтесь другими способами.  Можно добавить выражение в запрос, который отбирает в текстовом поле три левых символа и применяет к ним оператор Between...And.  Или добавьте к значениям верхней и нижней границы недостающие символы, в данном случае, от 980000 до 989999.


Сравнение языка SQL ядра базы данных Microsoft Jet и ANSI SQL

Язык SQL ядра базы данных Microsoft Jet в основном соответствует стандарту ANSI-89 (уровень 1).  Однако некоторые средства ANSI SQL не реализованы в языке SQL ядра Microsoft Jet.  И наоборот, язык SQL ядра Microsoft Jet использует зарезервированные слова и средства, не поддерживаемые ANSI SQL.

Основные различия

•	Язык SQL ядра базы данных Microsoft Jet  и ANSI SQL имеют разные наборы зарезервированных слов и типов данных.  Более подробные сведения содержатся в разделах Зарезервированные слова SQL ядра базы данных Microsoft Jet и Эквивалентные типы данных ANSI SQL.

•	Разные правила применимы к оператору Between...And, имеющему следующий синтаксис:

выражение [NOT] Between значение_1 And значение_2

В языке SQL Microsoft Jet значение_1 может превышать значение_2; в ANSI SQL, значение_1 должно быть меньше или равно значение_2.

•	Разные подстановочные знаки используются с оператором Like.

Соответствующие символы	Язык SQL Microsoft Jet	ANSI SQL
Любой одиночный символ	?	_ (подчеркивание)
Любое число символов	*	%
•	Язык SQL ядра Microsoft Jet обычно предоставляет пользователю большую свободу.  Например, разрешается группировка и сортировка по выражениям.

•	Язык SQL Microsoft Jet позволяет использовать более мощные выражения.

Особые средства языка SQL Microsoft Jet

В языке SQL Microsoft Jet поддерживаются следующие дополнительные средства:

•	Инструкция TRANSFORM предназначенная для создания перекрестных запросов.

•	Дополнительные статистические функции, такие как StDev и VarP.

•	Описание PARAMETERS, предназначенное для создания запросов с параметрами.

Средства ANSI SQL, не поддерживаемые в языке SQL Microsoft Jet

В языке SQL Microsoft Jet не поддерживаются следующие средства ANSI SQL:

•	Инструкции, управляющие защитой, такие как COMMIT, GRANT и LOCK.

•	Зарезервированное слово DISTINCT в качестве описания аргумента статистической функции.  Например, в языке SQL Microsoft Jet нельзя использовать выражение SUM(DISTINCT имяСтолбца).

•	Предложение LIMIT TO nn ROWS, используемое для ограничения количества строк, возвращаемых в результате выполнения запроса.  Для ограничения количества возвращаемых запросом строк можно использовать только предложение WHERE.


Эквивалентные типы данных ANSI SQL

В следующей таблице перечислены типы данных ANSI SQL , эквивалентные им типы данных языка SQL ядра базы данных Microsoft Jet и допустимые синонимы.

Типы данных ANSI SQL	Типы данных SQL  Microsoft Jet	Синоним
BIT, BIT VARYING	BINARY  (см. "Примечания")	VARBINARY
Не поддерживается	BIT  (см. "Примечания")	BOOLEAN, LOGICAL, LOGICAL1, YESNO
Не поддерживается	BYTE	INTEGER1
Не поддерживается	COUNTER	AUTOINCREMENT
Не поддерживается	CURRENCY	MONEY
DATE, TIME, TIMESTAMP	DATETIME	DATE, TIME, TIMESTAMP
Не поддерживается	GUID
DECIMAL	Не поддерживается
REAL	SINGLE	FLOAT4, IEEESINGLE, REAL
DOUBLE PRECISION, FLOAT	DOUBLE	FLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC
SMALLINT	SHORT	INTEGER2, SMALLINT
INTEGER	LONG	INT, INTEGER, INTEGER4
INTERVAL	Не поддерживается
Не поддерживается	LONGBINARY	GENERAL, OLEOBJECT
Не поддерживается	LONGTEXT	LONGCHAR, MEMO, NOTE
CHARACTER, CHARACTER VARYING	TEXT	ALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR
Не поддерживается	VALUE  (см. "Примечания")
Примечания

•	Тип данных BIT стандарта ANSI SQL не соответствует типу данных BIT языка SQL Microsoft Jet, зато совпадает с типом данных BINARY.  Для типа данных BIT языка SQL Microsoft Jet нет эквивалентного типа в ANSI SQL.

•	Зарезервированное слово VALUE не является описанием типа данных, определенного в ядре базы данных Microsoft Jet.


Оператор In

Проверяет, совпадает ли значение выражения с одним из элементов указанного списка.

Синтаксис

выражение [Not] In(значение_1, значение_2,  . . .)

Дополнительные сведения

Ниже перечислены аргументы оператора  In:

Элемент	Описание
выражение	Выражение, определяющее поле, значение которого нужно вычислить.
значение_1, значение_2	Выражение или список выражений, с которыми сравнивается выражение.
Если выражение содержится в списке значений, оператор In возвращает значение True; в противном случае возвращается значение False.  С помощью логического оператора Not можно проверить обратное условие (т. е., что выражение не принадлежит списку значений).

В следующем примере оператор In использован для определения, какие заказы отправлены в указанные области:

SELECT *

FROM Заказы

WHERE ОбластьПолучателя In ('Московская','Тверская','Тульская')


Оператор Like

Используется для сравнения строкового выражения с образцом в выражении SQL.

Синтаксис

выражение Like "образец"

Ниже перечислены аргументы оператора Like:

Элемент	Описание
выражение	Выражение SQL, используемое в предложении WHERE.
образец	Строка, с которой сравнивается выражение.
Дополнительные сведения

Оператор Like используется для нахождения в поле значений, соответствующих указанному образцу.  Для аргумента образец можно задавать полное значение (например, Like "Иванов") или использовать подстановочные знаки для поиска диапазона значений (например, Like "Ив*").

Оператор Like используется в выражении для сравнения значений поля со строковым выражением.  Например, если в запросе SQL ввести Like "C*", запрос возвратит все значения поля, начинающиеся с буквы "C".  В запросе с параметрами можно пригласить пользователя указать искомый образец.

В следующем примере возвращаются данные, начинающихся с буквы "Р", за которой следуют любые буквы от "А" до "Д" и три цифры:

Like "Р[А-Д]###"

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

Тип совпадения	Образец	Совпадение (True)	Несовпадение (False)
Несколько символов	a*a	aa, aBa, aBBBa	aBC
	*ab*	abc, AABB, Xab	aZb, bac
Специальный символ	a[*]a	a*a	aaa
Несколько символов	ab*	abcdefg, abc	cab, aab
Одиночный символ	a?a	aaa, a3a, aBa	aBBBa
Одиночная цифра	a#a	a0a, a1a, a2a	aaa, a10a
Диапазон символов	[a-z]	f, p, j	2, &
Вне диапазона	[!a-z]	9, &, %	b, a
Не цифра	[!0-9]	A, a, &, ~	0, 1, 9
Комбинированное выражение	a[!b-m]#	An9, az0, a99	abc, aj0


Типы данных SQL ядра базы данных Microsoft Jet

Типы данных языка SQL ядра базы данных Microsoft Jet включают 13 основных типов данных, определенных в ядре базы данных Microsoft Jet, и несколько синонимов, которые можно использовать вместо основных типов.

В следующей таблице перечислены основные типы данных.  Синонимы описаны в разделе Зарезервированные слова SQL ядра базы данных Microsoft Jet.

Тип данных	Размер	Описание
BINARY	1 байт на символ	В поле этого типа могут храниться данные любого типа.  Данные не преобразуются (например, в текстовые) и отображаются в том же виде, в каком они вводятся в это поле.
BIT	1 байт	Значения "Да" (Yes) и "Нет" (No), а также поля, содержащие одно из двух возможных значений.
BYTE	1 байт	Целое значение от 0 до 255.
COUNTER	4 байт	Число, автоматически увеличиваемое ядром базы данных Microsoft Jet при добавлении в таблицу новой записи.  В ядре базы данных Microsoft Jet этому типу данных соответствует тип данных Long.
CURRENCY	8 байт	Масштабируемое целое от  –922 337 203 685 477,5808 до 922 337 203 685 477,5807.
DATETIME (см. DOUBLE)	8 байт	Дата или время; допустим любой год от 100 до 9999.
GUID	128 бит	Уникальный идентификатор, используемый при вызовах удаленных процедур.
SINGLE	4 байт	Число с плавающей точкой и одинарной точностью  от –3,402823E38 до –1,401298E-45 для отрицательных значений,  от 1,401298E-45 до 3,402823E38 для положительных значений или значение 0.
DOUBLE	8 байт	Число с плавающей точкой и двойной точностью  от –1,79769313486232E308  до –4,94065645841247E-324 для отрицательных значений,  от 4,94065645841247E-324  до 1,79769313486232E308 для положительных значений или значение 0.
SHORT	2 байт	Короткое целое от –32 768 до 32 767.
LONG	4 байт	Длинное целое от –2 147 483 648  до 2 147 483 647.
LONGTEXT	1 байт на символ	От 0 до 1,2 Гбайт.
LONGBINARY	Не ограничено	От 0 до 1,2 Гбайт.  Используется для объектов ActiveX.
TEXT	1 байт на символ	От 0 до 255 символов.
Примечание.   В инструкциях SQL допускается также использование зарезервированного слова VALUE.


Зарезервированные слова SQL ядра базы данных Microsoft Jet

Ниже перечислены все слова, зарезервированные ядром базы данных Microsoft Jet для использования в инструкциях SQL.  Слова, включающие строчные буквы, также зарезервированы другими приложениями.  Поэтому разделы справочной системы, посвященные этим словам, содержат общие сведения, а не только описание их использования в языке SQL.

Примечание.   Слова, отмеченные знаком звездочки (*) (например, Level и TableID) также являются зарезервированными, однако, в данный момент не имеют определенного значения в контексте инструкций SQL ядра Microsoft Jet.

A

ADD ALL  Alphanumeric — см. TEXT ALTER  And	ANY  AS  ASC AUTOINCREMENT — см. COUNTER Avg
B-C

Between BINARY  BIT  BOOLEAN — см. BIT BY BYTE  CHAR, CHARACTER — см. TEXT	COLUMN CONSTRAINT  Count COUNTER CREATE  CURRENCY
D

DATABASE DATE — см. DATETIME DATETIME  DELETE DESC	DISALLOW DISTINCT  DISTINCTROW  DOUBLE   DROP
E-H

Eqv EXISTS FLOAT, FLOAT8 — см. DOUBLE FLOAT4 — см. SINGLE FOREIGN	FROM  GENERAL — см. LONGBINARY GROUP GUID HAVING
I

IEEEDOUBLE — см. DOUBLE IEEESINGLE — см. SINGLE IGNORE Imp In IN INDEX	INNER  INSERT INT, INTEGER, INTEGER4 — см. LONG INTEGER1 — см. BYTE INTEGER2 — см. SHORT INTO Is
J-M

JOIN KEY LEFT Level* Like LOGICAL, LOGICAL1 — см. BIT LONG	LONGBINARY  LONGTEXT  Max  MEMO — см. LONGTEXT Min  Mod MONEY — см. CURRENCY
N-P

Not NULL  NUMBER — см. DOUBLE NUMERIC — см. DOUBLE OLEOBJECT — см. LONGBINARY ON OPTION Or	ORDER  Outer* OWNERACCESS  PARAMETERS  PERCENT  PIVOT  PRIMARY  PROCEDURE
Q-S

REAL — см. SINGLE  REFERENCES  RIGHT  SELECT  SET  SHORT  SINGLE	SMALLINT — см. SHORT SOME  StDev StDevP  STRING — см. TEXT Sum
T-Z

TABLE TableID* TEXT  TIME — см. DATETIME TIMESTAMP — см. DATETIME TOP TRANSFORM UNION UNIQUE UPDATE	VALUE  VALUES  Var  VARBINARY — см. BINARY VARCHAR — см. TEXT VarP  WHERE  WITH  Xor YESNO — см. BIT


Выражения SQL

Выражением SQL называют строку, составляющую часть или всю инструкцию SQL.  Например, метод FindFirst объекта Recordset использует выражение SQL, состоящее из условия отбора, найденного в предложении WHERE SQL.

В ядре базы данных Microsoft Jet используется разработчик выражений на языке Visual Basic для приложений (VBA) для выполнения простых арифметических операций и вычисления значений функций.  Все операторы выражений, которые используются в выражениях SQL ядра базы данных Microsoft Jet (за исключением Between, In и Like), определены в службе выражений VBA.  Кроме того, служба выражений VBA поддерживает более 100 функций VBA, доступных в выражениях SQL.  Например, запрос SQL, созданный в режиме SQL окна конструктора запросов Microsoft Access может использовать эти функции VBA; это же может делать запрос SQL, использованный в методе OpenRecordset объектов доступа к данным (DAO) в тексте программы Microsoft Visual C++, Microsoft Visual Basic и Microsoft Excel.


Использование подстановочных знаков при сравнении строк

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

Знак(и)  в образце	Соответствие  в выражении
?	Любой одиночный символ.
*	Произвольное количество символов.
#	Любая одиночная цифра (0 – 9).
[список_знаков]	Любой одиночный символ, входящий в список_знаков.
[!список_знаков]	Любой одиночный символ, не входящий в список_знаков.
Группа из одного или более символов (список_знаков), заключенных в квадратные скобки ([ ]), используется для установления совпадения с одним знаком выражения и может содержать практически любые знаки из набора символов ANSI, включая цифры.  Специальные символы: открывающая квадратная скобка ([ ), вопросительный знак (?), знак числа (#) и знак звездочки (*), - используются для установления совпадения с ними только при заключении их в квадратные скобки.  Закрывающую квадратную скобку ( ]) нельзя применять в группе для установления соответствия с ней самой, но она может стоять вне группы как отдельный знак.

Помимо простого списка знаков, заключенного в квадратные скобки, список_знаков позволяет задать диапазон знаков.  Используйте знак переноса (-), чтобы отделить верхнюю границу диапазона от нижней.  Например, обозначение [A-Я] в образце приводит к  совпадению, если соответствующий текстовый знак в выражении содержит одну из заглавных букв в диапазоне от A до Я.  Несколько диапазонов заключаются в квадратные скобки без специальных разделителей.  Например, [a-яA-Я0-9] соответствует любой букве или цифре.

Ниже перечислены остальные важные правила установления совпадения:

•	Восклицательный знак (!) в начале списка_знаков означает, что совпадение наступит, если в выражении будет найден любой знак, отсутствующий в списке.  Восклицательный знак, использованный вне квадратных скобок, соответствует самому себе.

•	Знак дефиса (-) можно использовать в начале (после восклицательного знака, если он есть) или в конце списка_знаков для установления соответствия с самим собой.  В любом другом месте знак дефиса означает диапазон символов ANSI.

•	Если указан диапазон знаков, его границы должны следовать в возрастающем порядке (A-Я или 0-100).  [A-Я] является правильным образцом, а [Я-A] -- неправильным.

•	Пара квадратных скобок [ ] игнорируется; она рассматривается как пустая строка ("").


Инструкция ALTER TABLE, примеры

Добавление поля "Оклад" с типом данных Currency в таблицу "Сотрудники".

Sub AlterTableX1()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Добавляет в таблицу "Сотрудники" поле "Оклад"

' с типом данных Currency.

dbs.Execute "ALTER TABLE Сотрудники " _

& "ADD COLUMN Оклад CURRENCY;"

dbs.Close

End Sub

Удаление поля "Оклад" из таблицы "Сотрудники".

Sub AlterTableX2()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Удаляет поле "Оклад" из таблицы "Сотрудники".

dbs.Execute "ALTER TABLE Сотрудники " _

& "DROP COLUMN Оклад;"

dbs.Close

End Sub

Добавление внешнего ключа в таблицу "Заказы".  Этот внешний ключ определен для поля "КодСотрудника" и ссылается на поле "КодСотрудника" в таблице "Сотрудники".  В данном примере не обязательно использовать предложение REFERENCES, поскольку поле "КодСотрудника" является ключом таблицы "Сотрудники".

Sub AlterTableX3()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Добавляет внешний ключ в таблицу "Заказы".

dbs.Execute "ALTER TABLE Заказы " _

& "ADD CONSTRAINT СвязиЗаказы " _

& "FOREIGN KEY (КодСотрудника) " _

& "REFERENCES Сотрудники (КодСотрудника);"

dbs.Close

End Sub

Удаление внешнего ключа из таблицы "Заказы".

Sub AlterTableX4()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Удаляет внешний ключ "СвязиЗаказы"

' из таблицы "Заказы".

dbs.Execute "ALTER TABLE Заказы " _

& "DROP CONSTRAINT СвязиЗаказы;"

dbs.Close

End Sub


Инструкция CREATE INDEX, примеры

Создание в таблице "Сотрудники" индекса, содержащего поля "Телефон" и "Добавочный".

Sub CreateIndexX1()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает в таблице "Сотрудники" индекс "НовыйИндекс".

dbs.Execute "CREATE INDEX НовыйИндекс ON Сотрудники " _

& "(Телефон, Добавочный);"

dbs.Close

End Sub

Создание в таблице "Клиенты" индекса по полю "КодКлиента".  В этом поле не допускаются повторяющиеся и пустые (Null) значения.

Sub CreateIndexX2()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает уникальный индекс "ИндексКлиента"

' по полю "КодКлиента".

dbs.Execute "CREATE UNIQUE INDEX ИндексКлиента " _

& "ON Клиенты (КодКлиента) " _

& "WITH DISALLOW NULL;"

dbs.Close

End Sub


Инструкция CREATE TABLE, предложение CONSTRAINT, примеры

Создание новой таблицы "Таблица1" с двумя текстовыми полями.

Sub CreateTableX1()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает таблицу с двумя текстовыми полями

dbs.Execute "CREATE TABLE Таблица1 " _

& "(Имя TEXT, Фамилия TEXT);"

dbs.Close

End Sub

Создание новой таблицы "Таблица1" с двумя текстовыми полями, полем даты/времени и уникальным индексом, включающим все три поля.

Sub CreateTableX2()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает таблицу с тремя полями и уникальным

' индексом, включающим все три поля.

dbs.Execute "CREATE TABLE Таблица1 " _

& "(Имя TEXT, Фамилия TEXT, " _

& "ДатаРождения DATETIME, " _

& "CONSTRAINT ИндексТаблица1 UNIQUE " _

& "(Имя, Фамилия, ДатаРождения));"

dbs.Close

End Sub

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

Sub CreateTableX3()

 	Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создание таблицы с тремя полями

' и ключом.

dbs.Execute "CREATE TABLE НоваяТаблица " _

& "(Имя TEXT, Фамилия TEXT, " _

& "Страховка INTEGER CONSTRAINT Ключ1 " _

& "PRIMARY KEY);"

dbs.Close

End Sub


Инструкция DROP, примеры

В следующих примерах подразумевается существование таблицы "Сотрудники" с индексом "НовыйИндекс" в базе данных "Борей".

Удаление индекса "НовыйИндекс" из таблицы "Сотрудники".

Sub DropX1()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Удаление индекса "НовыйИндекс" из таблицы "Сотрудники".

dbs.Execute "DROP INDEX НовыйИндекс ON Сотрудники;"

dbs.Close

End Sub

Удаление таблицы "Сотрудники" из базы данных.

Sub DropX2()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Удаляет таблицу "Сотрудники" из базы данных.

dbs.Execute "DROP TABLE Сотрудники;"

dbs.Close

End Sub


Инструкция SELECT, предложение FROM, примеры

В следующих примерах подразумевается существование поля "Оклад" в таблице "Сотрудники".  Отметим, что в таблице "Сотрудники" в базе данных "Борей" такого поля нет.

Создание объекта Recordset типа динамического набора записей в инструкции SQL, которая отбирает поля "Фамилия" и "Имя" из всех записей таблицы "Сотрудники".  Вызывается процедура EnumFields выводящая содержимое объекта Recordset в окне отладки.

Sub SelectX1()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает значения полей "Фамилия" и "Имя"

' из всех записей таблицы "Сотрудники".

Set rst = dbs.OpenRecordset("SELECT Фамилия, " _

& "Имя FROM Сотрудники;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати

' объекта Recordset.

EnumFields rst,12

dbs.Close

End Sub

Подсчет числа записей, которые содержат непустое значение в поле "Индекс", и присваивание заголовка "Итого" полю, в котором возвращается результат.

Sub SelectX2()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Подсчитывает записей, имеющих значение в поле "Индекс"

' и возвращает результат в поле "Итого".

Set rst = dbs.OpenRecordset("SELECT Count " _

& "(Индекс) AS Итого FROM Клиенты;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Задает ширину поля = 12.

EnumFields rst, 12

dbs.Close

End Sub

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

Sub SelectX3()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Показывает число сотрудников и их среднюю

' и максимальную зарплату.

Set rst = dbs.OpenRecordset("SELECT Count (*) " _

& "AS ЧислоСотрудников, Avg(Оклад) " _

& "AS СреднийОклад, Max(Оклад) " _

& "AS МаксимальныйОклад FROM Сотрудники;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину поля.

EnumFields rst, 17

dbs.Close

End Sub

Объект Recordset передается в процедуру Sub EnumFields из вызывающей процедуры.  Эта процедура форматирует и печатает поля объекта Recordset в окне отладки.  Переменная intFldLen содержит ширину полей при печати.  Некоторые поля могут оказаться обрезанными.

Sub EnumFields(rst As Recordset, intFldLen As Integer)

Dim lngRecords As Long, lngFields As Long

Dim lngRecCount As Long, lngFldCount As Long

Dim strTitle As String, strTemp As String

' Задает в переменной lngRecords число

' записей в объекте Recordset.

lngRecords = rst.RecordCount

' Задает в переменной lngFields число

' полей в объекте Recordset.

lngFields = rst.Fields.Count

Debug.Print "Число записей: " & lngRecords _

& "; число полей: " & lngFields "."

Debug.Print

' Формирует строку, содержащую заголовок столбца.

strTitle = "Запись  "

For lngFldCount = 0 To lngFields - 1

strTitle = strTitle _

& Left(rst.Fields(lngFldCount).Name _

& Space(intFldLen), intFldLen)

Next lngFldCount

' Печатает заголовок столбца.

Debug.Print strTitle

Debug.Print

' Выполняет цикл по объекту Recordset;

' печатает номер записи и значения полей.

rst.MoveFirst

For lngRecCount = 0 To lngRecords - 1

Debug.Print Right(Space(6) & _

Str(lngRecCount), 6) & "  ";

For lngFldCount = 0 To lngFields - 1

' Проверяет на наличие значений Null.

If IsNull(rst.Fields(lngFldCount)) Then

strTemp = "<null>"

Else

' Задает в строке strTemp содержимое полей.

Select Case _

rst.Fields(lngFldCount).Type

Case 11

strTemp = ""

Case dbText, dbMemo

strTemp = _

rst.Fields(lngFldCount)

Case Else

strTemp = _

str(rst.Fields(lngFldCount))

End Select

End If

Debug.Print Left(strTemp _

& Space(intFldLen), intFldLen);

Next lngFldCount

Debug.Print

rst.MoveNext

Next lngRecCount

End Sub


Предложение IN, примеры

В следующей таблице демонстрируется использование предложения IN для отбора данных из внешней базы данных.  В примерах предполагается, что таблица "Клиенты" сохраняется во внешней базе данных.

База данных	Инструкция SQL
База данных Microsoft Jet	SELECT КодКлиента FROM Клиенты IN Заказы.mdb  WHERE КодКлиента Like "A*";
dBASE III или IV. Для отбора данных из таблицы dBASE III, замените "dBASE III;" на "dBASE IV;".	SELECT КодКлиента FROM Клиенты IN "C:\DBASE\DATA\SALES" "dBASE IV;" WHERE КодКлиента Like "A*";
dBASE III или IV в синтаксисе Database.	SELECT КодКлиента FROM Клиенты IN "" [dBASE IV; Database=C:\DBASE\DATA\SALES;]  WHERE КодКлиента Like "A*";
Paradox 3.x или 4.x. Для отбора данных из таблицы Paradox версии 3.x, замените "Paradox 3.x;" на "Paradox 4.x;".	SELECT КодКлиента FROM Клиенты IN "C:\PARADOX\DATA\SALES" "Paradox 4.x;" WHERE КодКлиента Like "A*";
Paradox 3.x или 4.x в синтаксисе Database.	SELECT КодКлиента FROM Клиенты IN "" [Paradox 4.x;Database=C:\PARADOX\DATA\SALES;]  WHERE КодКлиента Like "A*";
Книга Microsoft Excel	SELECT КодКлиента, Название FROM [Клиенты$]  IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE КодКлиента Like "A*" ORDER BY КодКлиента;
Именованный диапазон электронной таблицы	SELECT КодКлиента, Название FROM ДиапазонКлиенты IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE КодКлиента Like "A*" ORDER BY КодКлиента;


Оператор In, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub InX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает в таблице "Заказы" записи, содержащие

' заказы, отправленные в указанные области.

Set rst = dbs.OpenRecordset("SELECT " _

& "КодКлиента, ДатаИсполнения FROM Заказы " _

& "WHERE ОбластьПолучателя In " _

& "('Московская','Ростовская');")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset.

EnumFields rst, 12

dbs.Close

End Sub


Предложение WHERE, пример

В следующем примере подразумевается существование поля "Оклад" в таблице "Сотрудники".  Отметим, что в таблице "Сотрудники" в базе данных "Борей" такого поля нет.

Отбор полей "Фамилия" и "Имя" из каждой записи, в которой поле "Фамилия" содержит значение "Иванов".

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub WhereX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает в таблице "Сотрудники" записи, в которых

' поле "Фамилия" содержит значение "Иванов".

Set rst = dbs.OpenRecordset("SELECT Фамилия, " _

& "Имя FROM Сотрудники " _

& "WHERE Фамилия = 'Иванов';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset.

EnumFields rst, 12

dbs.Close

End Sub


Предложение GROUP BY, примеры

Создание списка уникальных названий отделов и подсчет числа сотрудников в каждом из этих отделов.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub GroupByX1()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Для каждой должности подсчитывает число

' сотрудников, занимающих эту должность.

Set rst = dbs.OpenRecordset("SELECT Должность, " _

& "Count([Должность]) AS Итого " _

& "FROM Сотрудники GROUP BY Должность;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и требуемую

' ширину полей.

EnumFields rst, 25

dbs.Close

End Sub

Для каждой должности подсчитывает число сотрудников в Москве, занимающих эту должность.

Sub GroupByX2()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Для каждой должности подсчитывает число сотрудников,

' занимающих эту должность. Отбираются только

' сотрудники из Москвы.

Set rst = dbs.OpenRecordset("SELECT Должность, " _

& "Count(Должность) AS Итого " _

& "FROM Сотрудники WHERE Город = 'Москва' " _

& "GROUP BY Должность;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и требуемую

' ширину полей.

EnumFields rst, 25

dbs.Close

End Sub


Предложение HAVING, примеры

Отбор названий должностей, которые в Москве занимают несколько сотрудников.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub HavingX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает названия должностей, которые

' в Москве занимают несколько сотрудников.

Set rst = dbs.OpenRecordset("SELECT Должность, " _

& "Count(Должность) as Итого FROM Сотрудники " _

& "WHERE Город = 'Москва' " _

& "GROUP BY Должность HAVING Count(Должность) > 1;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати набора записей.

EnumFields rst, 25

dbs.Close

End Sub


Предложение ORDER BY, пример

Приведенная ниже инструкция SQL используют предложение ORDER BY для сортировки записей в алфавитном порядке по убыванию.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub OrderByX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает записи в таблице "Сотрудники"

' по фамилиям и именам и сортирует их

' по убыванию.

Set rst = dbs.OpenRecordset("SELECT Фамилия, " _

& "Имя FROM Сотрудники " _

& "ORDER BY Фамилия DESC;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати набора записей.

EnumFields rst, 12

dbs.Close

End Sub


Предикаты ALL, DISTINCT, DISTINCTROW, TOP, пример

Создание запроса, в котором выполняется объединение таблиц "Клиенты" и "Заказы" по полю "КодКлиента".  Таблица "Клиенты" не имеет повторяющихся значений в поле "КодКлиента", а таблица "Заказы" содержит, поскольку каждый клиент может сделать несколько заказов.  Предикат DISTINCTROW позволяет создать список клиентов, сделавших несколько заказов без дополнительных сведений об этих заказах.

Sub AllDistinctX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Объединяет таблицы "Клиенты" и "Заказы"

' по полю "КодКлиента". Создает список

' клиентов, сделавших несколько заказов.

Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _

& "Название FROM Клиенты " _

& "INNER JOIN Заказы " _

& "ON Клиенты.КодКлиента = " _

& "Заказы.КодКлиента " _

& "ORDER BY Название;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и требуемую

' ширину полей.

EnumFields rst, 25

dbs.Close

End Sub


Инструкция DELETE, пример

Удаление записей о всех сотрудниках, занимающих должность "Стажер".  Если предложение FROM включает только одну таблицу, то имя таблицы в инструкции DELETE указывать не обязательно.

Sub DeleteX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Удаляет записи о всех сотрудниках с должностью "Стажер".

dbs.Execute "DELETE * FROM " _

& "Сотрудники WHERE Должность = 'Стажер';"

dbs.Close

End Sub


Операция INNER JOIN, пример

В данном примере создаются два симметричных объединения: одно между таблицами "Заказано" и "Заказы", а второе между таблицами "Заказы" и "Сотрудники".  Это необходимо, так как таблица "Сотрудники" не содержит сведений о заказах, а таблица "Заказано" сведений о сотрудниках.  В запросе создается список сотрудников и общих сумм выполненных ими продаж.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub InnerJoinX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает объединение для таблиц "Заказано" и

' "Заказы", а также второе объединение для таблиц

' "Заказы" и "Сотрудники". Создает список

' сотрудников и общих сумм выполненных ими продаж.

Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _

& "Sum(Цена * Количество) AS Продажи, " _

& "(Имя & Chr(32) & Фамилия) AS ФИО " _

& "FROM Сотрудники INNER JOIN(Заказы " _

& "INNER JOIN Заказано " _

& "ON Заказано.КодЗаказа = " _

& "Заказы.КодЗаказа ) " _

& "ON Заказы.КодСотрудника = " _

& "Сотрудники.КодСотрудника " _

& "GROUP BY (Имя & Chr(32) & Фамилия);")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 20

dbs.Close

End Sub


Инструкция INSERT INTO, примеры

Отбор всех записей из таблицы "Новые клиенты" и добавление их в таблицу "Клиенты".  В случаях, когда не указаны отдельные столбцы таблицы, включенной в инструкцию SELECT, требуется точное совпадение имен столбцов этой таблицы с именами столбцов таблицы, указанной в инструкции INSERT INTO.

Sub InsertIntoX1()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает все записи из таблицы "Новые клиенты"

' и добавляет их в таблицу "Клиенты".

dbs.Execute " INSERT INTO Клиенты " _

& "SELECT * " _

& "FROM [Новые клиенты];"

dbs.Close

End Sub

Создание новой записи в таблице "Сотрудники".

Sub InsertIntoX2()

Dim dbs As Database

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создает новую запись в таблице "Сотрудники".

dbs.Execute " INSERT INTO Сотрудники " _

& "(Имя,Фамилия, Должность) VALUES " _

& "('Павел', 'Власов', 'Стажер');"

dbs.Close

End Sub


Операции LEFT JOIN, RIGHT JOIN, пример

В следующем примере предполагается существование полей "Название отдела" и "Номер отдела" в таблице "Сотрудники".  Отметим, что в таблице "Сотрудники" из базы данных "Борей" таких полей нет.

Отбираются названия всех отделов, в том числе и тех, в которых нет сотрудников.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub LeftRightJoinX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает названия всех отделов, в том

' числе и тех, в которых нет сотрудников.

Set rst = dbs.OpenRecordset _

("SELECT [Название отдела], " _

& "Имя & Chr(32) & Фамилия AS Name " _

& "FROM Отделы LEFT JOIN Сотрудники " _

& "ON Отделы.[Номер отдела] = " _

& "Сотрудники.[Номер отдела] " _

& "ORDER BY [Название отдела];")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 20

dbs.Close

End Sub


Описание PARAMETERS, пример

Запрашивает у пользователя фамилию сотрудника, а затем использует введенное значение в условии отбора.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub ParametersX()

Dim dbs As Database, qdf As QueryDef

Dim rst As Recordset

Dim strSql As String, strParm As String

Dim strMessage As String

Dim intCommand As Integer

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Определяет строку предложения параметра.

strParm = "PARAMETERS [Название должности] TEXT; "

' Определяет инструкцию SQL

' с предложением параметра.

strSql = strParm & "SELECT Фамилия, Имя, " _

& "КодСотрудника " _

& "FROM Сотрудники " _

& "WHERE Должность =[Название должности];"

' Создает объект QueryDef на основе

' инструкции SQL.

Set qdf = dbs.CreateQueryDef _

("Отбор сотрудников", strSql)

Do While True

strMessage = "Отбор сотрудников " _

& "по должности:" & Chr(13) _

& "  Выберите должность:" & Chr(13) _

& "   1 - Торговый представитель" & Chr(13) _

& "   2 - Торговый агент" & Chr(13) _

& "   3 - Координатор"

intCommand = Val(InputBox(strMessage))

Select Case intCommand

Case 1

qdf("Название должности") = _

"Торговый представитель"

Case 2

qdf("Название должности") = _

"Торговый агент"

Case 3

qdf("Название должности") = _

"Координатор"

Case Else

Exit Do

End Select

' Создает временный статический объект Recordset.

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

Loop

' Удаляет демонстрационный объект QueryDef.

dbs.QueryDefs.Delete "Отбор сотрудников"

dbs.Close

End Sub


Предложение PROCEDURE, пример

Присваивает запросу имя "СписокТипов".

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub ProcedureX()

Dim dbs As Database, rst As Recordset

Dim qdf As QueryDef, strSql As String

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

strSql = "PROCEDURE СписокТипов; " _

& "SELECT DISTINCTROW Категория, " _

& "КодТипа FROM Типы " _

& "ORDER BY Категория;"

' Создает именованный объект QueryDef

' на основе инструкции SQL.

Set qdf = dbs.CreateQueryDef("НовыйЗапрос", strSql)

' Создает временный статический объект Recordset.

Set rst = qdf.OpenRecordset(dbOpenSnapshot)

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 15

' Удаляет демонстрационный объект QueryDef.

dbs.QueryDefs.Delete "НовыйЗапрос"

dbs.Close

End Sub


Инструкция SELECT...INTO, пример

Копирование всех записей из таблицы "Сотрудники" в новую таблицу с именем "Резерв".

Sub SelectIntoX()

Dim dbs As Database

Dim qdf As QueryDef

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает все записи в таблице "Сотрудники"

' и копирует их в новую таблицу "Резерв".

dbs.Execute "SELECT Сотрудники.* INTO " _

& "Резерв FROM Сотрудники;"

' Удаляет демонстрационную таблицу.

dbs.Execute "DROP TABLE Резерв;"

dbs.Close

End Sub


Инструкция TRANSFORM, примеры

Использование предложения SQL TRANSFORM для создания перекрестного запроса, демонстрирующего число заказов, принятых каждым сотрудником в каждом квартале 1994 г.  Для выполнения данной процедуры требуется функция SQLTRANSFORMOutput.

Sub TransformX1()

Dim dbs As Database

Dim strSQL As String

Dim qdfTRANSFORM As QueryDef

strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

& "Count(КодЗаказа) " _

& "SELECT Имя & "" "" & Фамилия AS " _

& "ФИО FROM Сотрудники INNER JOIN Заказы " _

& "ON Сотрудники.КодСотрудника = " _

& "Заказы.КодСотрудника WHERE DatePart " _

& "(""yyyy"", ДатаРазмещения) = [prmYear] "

   	strSQL = strSQL & "GROUP BY Имя & " _

& """ "" & Фамилия " _

& "ORDER BY Имя & "" "" & Фамилия " _

& "PIVOT DatePart(""q"", ДатаРазмещения)"

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

Set qdfTRANSFORM = dbs.CreateQueryDef _

("", strSQL)

SQLTRANSFORMOutput qdfTRANSFORM, 1994

dbs.Close

End Sub

В следующем примере предложение SQL TRANSFORM используется для создания более сложного перекрестного запроса, демонстрирующего общую сумму заказов, принятых каждым сотрудником в каждом квартале 1994 г.  Для выполнения данной процедуры требуется функция SQLTRANSFORMOutput.

Sub TransformX2()

Dim dbs As Database

Dim strSQL As String

Dim qdfTRANSFORM As QueryDef

strSQL = "PARAMETERS prmYear SHORT; TRANSFORM " _

& "Sum(Всего) SELECT Имя & "" """ _

& "& Фамилия AS ФИО " _

& "FROM Сотрудники INNER JOIN " _

& "(Заказы INNER JOIN [Сумма заказов] " _

& "ON Заказы.КодЗаказа = " _

& "[Сумма заказов].КодЗаказа) " _

& "ON Сотрудники.КодСотрудника = " _

& "Заказы.КодСотрудника WHERE DatePart" _

& "(""yyyy"", ДатаРазмещения) = [prmYear] "

   	strSQL = strSQL & "GROUP BY Имя & "" """ _

& "& Фамилия " _

& "ORDER BY Имя & "" "" & Фамилия " _

& "PIVOT DatePart(""q"",ДатаРазмещения)"

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

Set qdfTRANSFORM = dbs.CreateQueryDef _

("", strSQL)

SQLTRANSFORMOutput qdfTRANSFORM, 1994

dbs.Close

End Sub

Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _

intYear As Integer)

Dim rstTRANSFORM As Recordset

Dim fldLoop As Field

Dim booFirst As Boolean

qdfTemp.PARAMETERS!prmYear = intYear

Set rstTRANSFORM = qdfTemp.OpenRecordset()

Debug.Print qdfTemp.SQL

Debug.Print

Debug.Print , , "Квартал"

With rstTRANSFORM

booFirst = True

For Each fldLoop In .Fields

If booFirst = True Then

Debug.Print fldLoop.Name

Debug.Print , ;

booFirst = False

Else

Debug.Print , fldLoop.Name;

End If

Next fldLoop

Debug.Print

Do While Not .EOF

booFirst = True

For Each fldLoop In .Fields

If booFirst = True Then

Debug.Print fldLoop

Debug.Print , ;

booFirst = False

Else

Debug.Print , fldLoop;

End If

Next fldLoop

Debug.Print

.MoveNext

Loop

End With

End Function


Инструкция UPDATE, пример

Замена значения 2 в поле "Подчиняется" на значение 5 во всей таблице.

Sub UpdateX()

Dim dbs As Database

Dim qdf As QueryDef

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Заменяет значение 2 в поле "Подчиняется"

' на значение 5 во всей таблице.

dbs.Execute "UPDATE Сотрудники " _

& "SET Подчиняется = 5 " _

& "WHERE Подчиняется = 2;"

dbs.Close

End Sub


Операция UNION, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub UnionX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Отбирает молдавских клиентов и поставщиков,

'  а также городов, в которых они находятся.

Set rst = dbs.OpenRecordset("SELECT Название," _

& " Город FROM Поставщики" _

& " WHERE Страна = 'Молдавия' UNION" _

& " SELECT Название, Город FROM Клиенты" _

& " WHERE Страна = 'Молдавия';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

dbs.Close

End Sub


Подчиненные запросы SQL, пример

Создание списка имен и сведений о каждом клиенте, разместившем заказ во втором квартале 1995 г.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub SubQueryX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Создание списка имен и сведений

' о каждом клиенте, разместившем заказ

' во втором квартале 1995 г.

Set rst = dbs.OpenRecordset("SELECT Фамилия," _

& " Название, Должность, Телефон" _

& " FROM Клиенты" _

& " WHERE КодКлиента" _

& " IN (SELECT КодКлиента FROM Заказы" _

& " WHERE ДатаРазмещения Between #04/1/95#" _

& " And #07/1/95#);")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 25

dbs.Close

End Sub


Функция Avg, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub AvgX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Рассчитывает среднюю стоимость доставки заказов,

' имеющих стоимость доставки выше 100 000 рублей.

Set rst = dbs.OpenRecordset("SELECT Avg(СтоимостьДоставки)" _

& " AS [Средняя стоимость]" _

& " FROM Заказы WHERE СтоимостьДоставки > 100000;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 25

dbs.Close

End Sub


Функция Count, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub CountX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Вычисляет количество заказов,

' отправленных в Литву.

Set rst = dbs.OpenRecordset("SELECT" _

& " Count (СтранаПолучателя)" _

& " AS [Заказы в Литву] FROM Заказы" _

& " WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 25

dbs.Close

End Sub


Функции First, Last, примеры

В следующем примере таблица "Сотрудники" используется для получения значений поля "Фамилия" из первой и последней записи.

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub FirstLastX1()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Возвращает значения поля "Фамилия"

' из первой и последней записи в таблице.

Set rst = dbs.OpenRecordset("SELECT " _

& "First(Фамилия) as Первая, " _

& "Last(Фамилия) as Последняя FROM Сотрудники;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

dbs.Close

End Sub

Следующий пример позволяет сравнить результаты применения функций First и Last с результатами применения функций Min и Max для определения самой ранней и самой поздней дат рождения в таблице "Сотрудники".

Sub FirstLastX2()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Поиск самой ранней и самой поздней даты рождения

' в таблице "Сотрудники".

Set rst = dbs.OpenRecordset("SELECT " _

& "First(ДатаРождения) as ПерваяДата, " _

& "Last(ДатаРождения) as ПоследняяДата FROM Сотрудники;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

Debug.Print

' Поиск самой минимальной и максимальной даты рождения

' в таблице "Сотрудники".

Set rst = dbs.OpenRecordset("SELECT " _
& "Min(ДатаРождения) as МинДата," _

& "Max(ДатаРождения) as МаксДата FROM Сотрудники;")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

dbs.Close

End Sub


Функции Min, Max, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub MinMaxX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Возвращает минимальную и максимальную стоимость

' доставки заказов, отправленных в Литву.

Set rst = dbs.OpenRecordset("SELECT " _

& "Min(СтоимостьДоставки) AS [Мин. стоимость], " _

& "Max(СтоимостьДоставки)AS [Макс. стоимость] " _

& "FROM Заказы WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 12

dbs.Close

End Sub


Функции StDev, StDevP, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub StDevX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Рассчитывает среднеквадратичное отклонение

' стоимости доставки заказов в Литву.

Set rst = dbs.OpenRecordset("SELECT " _

& "StDev(СтоимостьДоставки) " _

& "AS [Среднее отклонение] FROM Заказы " _

& "WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 15

Debug.Print

Set rst = dbs.OpenRecordset("SELECT " _

& "StDevP(СтоимостьДоставки) " _

& "AS [Смещенное отклонение] FROM Заказы " _

& "WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 15

dbs.Close

End Sub


Функция Sum, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub SumX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Рассчитывает общую стоимость заказов,

' отправленных в Литву

Set rst = dbs.OpenRecordset("SELECT" _

& " Sum(Цена*Количество)" _

& " AS [Общие продажи в Литву] FROM Заказы" _

& " INNER JOIN Заказано ON" _

& " Заказы.КодЗаказа = Заказано.КодЗаказа" _

& " WHERE (СтранаПолучателя = 'Литва');")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 15

dbs.Close

End Sub


Функции Var, VarP, пример

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

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub VarX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Рассчитывает дисперсию стоимости доставки

' заказов, отправленных в Литву.

Set rst = dbs.OpenRecordset("SELECT " _

& "Var(СтоимостьДоставки) " _

& "AS [Дисперсия стоимости] " _

& "FROM Заказы WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 20

Debug.Print

Set rst = dbs.OpenRecordset("SELECT " _

& "VarP(СтоимостьДоставки) " _

& "AS [Смещенная дисперсия] " _

& "FROM Заказы WHERE СтранаПолучателя = 'Литва';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 20

dbs.Close

End Sub


Оператор Like, пример

Отбор списка клиентов, названия которых начинаются с букв в диапазоне от "A" до "Д".

В данном примере вызывается процедура EnumFields, текст которой приведен в примере для инструкции SELECT.

Sub LikeX()

Dim dbs As Database, rst As Recordset

' Укажите в следующей строке путь к базе данных "Борей"

' на вашем компьютере.

Set dbs = OpenDatabase("Борей.mdb")

' Возвращает список клиентов, названия которых

'  начинаются с букв в диапазоне от "A" до "Д".

Set rst = dbs.OpenRecordset("SELECT Фамилия," _

& " Имя FROM Сотрудники" _

& " WHERE Фамилия Like '[А-Д]*';")

' Заполняет набор записей.

rst.MoveLast

' Вызывает процедуру EnumFields для печати содержимого

' объекта Recordset. Передает объект Recordset и

' требуемую ширину полей.

EnumFields rst, 15

dbs.Close

End Sub


Изменение в реестре Windows параметров объектов доступа к данным

Примечание.   Если приложение не может корректно функционировать со стандартными настройками ядра базы данных Microsoft Jet, пользователь должен изменить параметры реестра Windows в соответствии с требованиями приложения.  Реестр Windows используется также для настройки устанавливаемых драйверов ISAM и драйверов ODBC.

Существуют три способа изменения параметров в реестре Windows.  Первый способ заключается в прямой замене в редакторе реестра (Regedit.exe) стандартных значений параметров, установленных при регистрации ядра базы данных Microsoft Jet.  Этот способ изменения параметров является наименее гибким, поскольку новые значения параметров будут по умолчанию применяться во всех приложениях, использующих ядро базы данных Microsoft Jet.

Второй способ изменения параметров реестра Windows заключается в создании раздела Microsoft Jet на дереве реестра приложения и изменения параметров ядра базы данных Microsoft Jet в этом разделе.  Проще всего экспортировать существующий раздел Microsoft Jet, а затем импортировать его на дерево реестра с помощью команд редактора реестра Экспорт файла реестра и Импорт файла реестра.  После этого можно изменить параметры в новом разделе на дереве реестра.   Если при этом вводятся какие-либо значения в подраздел "Engines", ядро Microsoft Jet будет загружать эти значения при запуске приложения.  Любые элементы, для которых на регистрационном дереве приложения-клиента не указаны значения, получат стандартные значения параметров.

Для того чтобы приложение загружало соответствующую часть записи реестра Windows, необходимо указать ее положение в свойстве INIPath DAO.  Значение свойства INIPath должно задаваться в приложении до запуска любой другой программы объектов доступа к данным.  Область определения данного параметра ограничивается приложением и не может изменяться до повторного запуска приложения.

Примечание.   Хотя создание раздела Microsoft Jet на регистрационном дереве приложения является более гибким способом, чем прямое переписывание стандартных параметров Microsoft Jet, при этом от пользователя все равно требуется управление деревом реестра.  Каждое изменение стандартных параметров требует редактирования реестра.  В предыдущих версиях Microsoft Jet существовали только два этих способа изменения реестра.

В версии DAO 3.5 поддерживается новый способ изменения стандартных параметров.  Теперь разрешается изменять параметры реестра во время выполнения с помощью метода SetOption.  Такой способ рекомендуется при настройке параметров реестра для работы с конкретным приложением.  Этот метод позволяет разработчику проявлять наибольшую гибкость и использовать все представляемые возможности изменения реестра.  Метод SetOption позволяет указать новые значения для любого из следующих параметров:

•	PageTimeout

•	SharedAsyncDelay

•	ExclusiveAsyncDelay

•	LockRetry

•	UserCommitSync

•	ImplicitCommitSync

•	MaxBufferSize

•	MaxLocksPerFile

•	LockDelay

•	RecycleLVs

•	FlushTransactionTimeout

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

Кроме того, реестр Windows позволяет определить:

•	Параметры, определяющие взаимодействие с базами данных Microsoft FoxPro, Microsoft Excel, Lotus, Paradox и dBASE.  См. разделы Инициализация драйвера баз данных Paradox, Инициализация драйвера баз данных Microsoft FoxPro, Инициализация драйвера Microsoft Excel, Инициализация драйвера Lotus и Инициализация драйвера баз данных dBASE.

•	Параметры, используемые драйвером Microsoft ODBC для взаимодействия с базами данных SQL.  См. раздел Настройка ядра базы данных Microsoft Jet для доступа к источникам данных ODBC.

•	Параметры, определяющие чтение и сохранение данных ядром Microsoft Jet.  См. разделы Инициализация драйвера баз данных Microsoft Jet 2.5 и Инициализация драйвера баз данных Microsoft Jet 3.5.

•	Параметры, определяющие взаимодействие ядра базы данных Microsoft Jet с Internet и Microsoft Exchange.  См. разделы Инициализация драйвера источника данных HTML (Internet) и Инициализация драйвера источника данных Microsoft Exchange.

•	Параметры, управляющие импортом текстовых данных ядром Microsoft Jet.  См. раздел Инициализация драйвера текстовых источников данных.


Инициализация драйвера баз данных dBASE

При установке драйвера баз данных dBASE программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера базы данных dBASE.

Параметры инициализации dBASE

Папка Jet\3.5\Engines\Xbase содержит параметры инициализации драйвера Msxbse35.dll, используемого при доступе к внешним источникам данных dBASE.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSXBSE35.dll

NetworkAccess=On

PageTimeout=600

INFPath=C:\DBASE\SYSTEM

CollatingSequence=ASCII

DataCodePage=OEM

Deleted=On

Century=Off

Date=MDY

Mark=47

Exact=Off

Ядро Microsoft Jet следующим образом использует элементы в папке Xbase.

Элемент	Описание
win32	Каталог файла Msxbse35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
NetworkAccess	Двоичный индикатор, определяющий глобальные параметры блокировки.  Если элемент "NetworkAccess" имеет значение 00, таблицы открываются для монопольного доступа вне зависимости от заданного в методах OpenDatabase и OpenRecordset аргумента параметры.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
PageTimeout	Промежуток времени между помещением данных во временный буфер и их уничтожением.  Значение задается в условных единицах, равных 100 миллисекунд.  По умолчанию задается 600 единиц (60 секунд).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
INFPath	Полный путь к каталогу файла .inf.  Ядро базы данных Microsoft Jet вначале ищет файл .inf в каталоге, содержащем таблицу.  Если файл .inf не найден в каталоге базы данных, проводится поиск в каталоге, указанном в элементе "INFPath".  Если элемент "INFPath" не определен, используются любые индексные файлы (.cdx или .mdx), найденные в каталоге базы данных.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51. Данные элемент не записывается программой установки.
CollatingSequence	Указывает используемый при сортировке порядок символов для всех таблиц dBASE, создаваемых или открываемых с помощью ядра Microsoft Jet.  Возможные значения: "ASCII" или "International".  По умолчанию задается значение "ASCII".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
DataCodePage	Определяет способ сохранения текстовых страниц.  Возможные значения: • OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются. • ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются. По умолчанию задается значение "OEM".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Deleted	Двоичный индикатор, определяющий обработку ядром Microsoft Jet записей, отмеченных как удаленные.  Значение 01 соответствует команде dBASE SET DELETED ON и отключает загрузку или позиционирование удаленных записей.  Значение 00 соответствует команде dBASE SET DELETED OFF и указывает, что удаленные записи обрабатываются так же, как все остальные.  По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Century	Двоичный индикатор, определяющий форматирование компонента столетия в датах при использовании в выражениях в индексе функций преобразования даты в строковое выражение.  Значение 01 соответствует команде dBASE SET CENTURY ON, а значение 00 соответствует команде dBASE SET CENTURY OFF.  По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Date	Тип формата дат, применяемый в выражениях в индексе при использовании функций преобразования даты в строковое выражение.  Возможные значения данного элемента, соответствующего команде dBASE SET DATE включают следующие: "American", "ANSI", "British", "French", "DMY", "German", "Italian", "Japan", "MDY", "USA" и "YMD".  По умолчанию задается значение "MDY".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Mark	Код ASCII символа, служащего разделителем компонентов даты.  Значение по умолчанию следующим образом зависит от элемента "Date": • "/" (American, MDY) • "." (ANSI) • "/" (British, French, DMY) • "." (German) • "-" (Italian) • "/" (Japan, YMD) • "-" (USA) Значение 0 указывает использование стандартного разделителя для выбранного формата даты. По умолчанию задается значение 0.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
Exact	Двоичный индикатор, определяющий способ сравнения строковых значений.  Значение 01 соответствует команде dBASE SET EXACT ON.  Значение 00 соответствует команде dBASE SET EXACT OFF. По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats" dBASE

Папка Jet\3.5\ISAM Formats\dBASE III содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE III (*.dbf)
ImportFilter	REG_SZ	String	dBASE III (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс dBASE (*.ndx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл dBASE III.  При экспорте в существующий файл его содержимое переписывается.
'

Папка Jet\3.5\ISAM Formats\dBASE IV содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE IV (*.dbf)
ImportFilter	REG_SZ	String	dBASE IV (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс dBASE (*.ndx; *.mdx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл dBASE IV.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\dBASE 5.x содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	dBASE 5 (*.dbf)
ImportFilter	REG_SZ	String	dBASE 5 (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс dBASE (*.ndx; *.mdx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл dBASE 5.  При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера Lotus

При установке драйвера Lotus программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера базы данных Lotus.

Параметры инициализации Lotus

Папка Jet\3.5\Engines\Lotus содержит параметры инициализации драйвера Msltus35.dll, используемого при доступе к внешним электронным таблицам Lotus.  Типичные значения параметров этого раздела демонстрируются в следующем примере.

win32=<путь>\MSLTUS35.dll

TypeGuessRows=8

ImportMixedTypes=Text

AppendBlankRows=4

FirstRowHasNames=Yes

Ядро Microsoft Jet следующим образом использует элементы в папке Lotus.

Элемент	Описание
win32	Каталог файла Msltus35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
TypeGuessRows	Число строк, проверяющихся при определении типа данных.  Тип данных определяется по максимальному числу найденных значений одного типа в выделенном блоке.  В случае совпадения используются типы в следующем порядке: Number, Currency, Date, Text, Long Text.  Если обнаруживаются данные, не соответствующие выбранному типу столбца, возвращается пустое значение (Null).  Если столбец, содержащий данные разных типов, обнаруживается при импорте, то тип данных всего столбца определяется элементом ImportMixedTypes. По умолчанию проверяется 8 строк.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
ImportMixedTypes	Должен иметь значение "MajorityType" или "Text".  Значение "MajorityType" указывает использование типа данных, к которому принадлежит большинство значений.  Значение "Text" определяет преобразование значений различных типов в текстовые.  По умолчанию задается значение "Text".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
AppendBlankRows	Число пустых строк, добавляемых в конец электронной таблицы WK1 перед добавлением новых данных.  Например, если элемент "AppendBlankRows" имеет значение 4, ядро Microsoft Jet перед добавлением строки, содержащей данные, добавит в конец электронной таблицы 4 пустых строки.  Для данного элемента допускаются целые значения в диапазоне от 0 до 16; по умолчанию задается значение 01 (добавляется одна строка).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
FirstRowHasNames	Двоичное значение, указывающее, содержит ли первая строка таблицы имена столбцов.  Значение 01 задает имена столбцов, берущиеся из первой строки.  Значение 00 указывает, что первая строка не содержит имена столбцов; в этом случае столбцы получают имена "F1", "F2", "F3" и т.д.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats" Lotus

Папка Jet\3.5\ISAM Formats\Lotus WK1 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Lotus
ExportFilter	REG_SZ	String	Lotus 1-2-3 WK1 (*.wk1)
ImportFilter	REG_SZ	String	Lotus 1-2-3 (*.wk*;*.wj* )
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Lotus 1-2-3 версии 2.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Lotus WK3 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Lotus
ExportFilter	REG_SZ	String	Lotus 1-2-3 WK3 (*.wk3)
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Lotus 1-2-3 версии 3.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Lotus WK4 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Lotus
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера Microsoft Excel

При установке драйвера Microsoft Excel программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки записи "ISAM Format" для драйвера Microsoft Excel.

Параметры инициализации Microsoft Excel

Папка Jet\3.5\Engines\Excel содержит параметры инициализации драйвера Msexcl35.dll используемого при доступе к внешним электронным таблицам Microsoft Excel.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSEXCL35.dll

TypeGuessRows=8

ImportMixedTypes=Text

AppendBlankRows=1

FirstRowHasNames=Yes

Ядро Microsoft Jet следующим образом использует элементы в папке Excel.

Элемент	Описание
win32	Каталог файла Msexcl35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
TypeGuessRows	Число строк, проверяющихся при определении типа данных.  Тип данных определяется по максимальному числу найденных значений одного типа.  В случае совпадения используются типы в следующем порядке: Number, Currency, Date, Text, Boolean.  Если обнаруживаются данные, не соответствующие выбранному типу столбца, возвращается пустое значение  Null.  Если столбец, содержащий данные разных типов, обнаруживается при импорте, то тип данных всего столбца определяется значением элемента "ImportMixedTypes". По умолчанию проверяется 8 строк.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
ImportMixedTypes	Должен иметь значение "MajorityType" или "Text".  Значение "MajorityType" указывает использование типа данных, к которому принадлежит большинство значений.  Значение "Text" определяет преобразование значений различных типов в текстовые.  По умолчанию задается значение "Text".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
AppendBlankRows	Число пустых строк, добавляемых в конец электронной таблицы версии 3.5 или версии 4.0 перед добавлением новых данных.  Например, если элемент "AppendBlankRows" имеет значение 4, ядро Microsoft Jet перед добавлением строки, содержащей данные, добавит в конец электронной таблицы 4 пустых строки.  Для данного элемента допускаются целые значения в диапазоне от 0 до 16; по умолчанию задается значение 01 (добавляется одна строка).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
FirstRowHasNames	Двоичное значение, указывающее, содержит ли первая строка таблицы имена столбцов.  Значение 01 задает имена столбцов, берущиеся из первой строки.  Значение 00 указывает, что первая строка не содержит имена столбцов; в этом случае столбцы получают имена "F1", "F2", "F3" и т.д.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats" Microsoft Excel

Папка Jet\3.5\ISAM Formats\Excel 3.0 содержит следующие элементы.

Имя элемента	Тип Windows NT	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 3 (*.xls)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft Excel 3.0.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Excel 4.0 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 4 (*.xls)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft Excel 4.0.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Excel 5.0 содержит следующие элементы, применимые к версиям Microsoft Excel 5.0 и 7.0.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 5-7 (*.xls)
ImportFilter	REG_SZ	String	Microsoft Excel (*.xls)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft Excel 5.0.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Excel 8.0 содержит следующие элементы, применимые к Microsoft Excel 97.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Excel
ExportFilter	REG_SZ	String	Microsoft Excel 97
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	1
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	01
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft Excel 97.  При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера баз данных Microsoft FoxPro

При установке драйвера баз данных Microsoft FoxPro программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера базы данных Microsoft FoxPro.

Параметры инициализации Microsoft FoxPro

Папка Jet\3.5\Engines\Xbase содержит параметры инициализации драйвера Msxbse35.dll, используемого при доступе к внешним источникам данных FoxPro.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSXBSE35.dll

NetworkAccess=On

PageTimeout=600

INFPath=C:\DBASE\SYSTEM

CollatingSequence=ASCII

DataCodePage=OEM

Deleted=Off

Century=Off

Date=MDY

Mark=47

Exact=Off

Ядро Microsoft Jet следующим образом использует элементы в папке Xbase.

Элемент	Описание
win32	Каталог файла Msxbse35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
NetworkAccess	Двоичный индикатор, определяющий глобальные параметры блокировки.  Если элемент "NetworkAccess" имеет значение 00, таблицы открываются для монопольного доступа вне зависимости от заданного в методах OpenDatabase и OpenRecordset аргумента параметры.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
PageTimeout	Промежуток времени между помещением данных во временный буфер и их уничтожением.  Значение задается в условных единицах, равных 100 миллисекунд.  По умолчанию задается 600 единиц (60 секунд).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
INFPath	Полный путь к каталогу файла .inf.  Ядро базы данных Microsoft Jet вначале ищет файл .inf в каталоге, содержащем таблицу.  Если файл .inf не найден в каталоге базы данных, проводится поиск в каталоге, указанном в элементе "INFPath".  Если элемент "INFPath" не определен, используются любые индексные файлы (.cdx или .mdx), найденные в каталоге базы данных.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51. Данные элемент не записывается программой установки.
CollatingSequence	Указывает используемый при сортировке порядок символов для всех таблиц Microsoft FoxPro, создаваемых или открываемых с помощью ядра Microsoft Jet.  Возможные значения: "ASCII" или "International".  По умолчанию задается значение "ASCII".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
DataCodePage	Определяет способ сохранения текстовых страниц.  Возможные значения: • OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются. • ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются. По умолчанию задается значение "OEM".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Deleted	Двоичный индикатор, определяющий обработку ядром Microsoft Jet записей, отмеченных как удаленные.  Значение 01 соответствует команде Microsoft FoxPro SET DELETED ON и отключает загрузку или позиционирование удаленных записей.  Значение 00 соответствует команде Microsoft FoxPro SET DELETED OFF и указывает, что удаленные записи обрабатываются так же, как все остальные.  По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Century	Двоичный индикатор, определяющий форматирование компонента столетия в датах при использовании в выражениях в индексе функций преобразования даты в строковое выражение.  Значение 01 соответствует команде Microsoft FoxPro SET CENTURY ON, а значение 00 соответствует команде Microsoft FoxPro SET CENTURY OFF. По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Date	Тип формата дат, применяемый в выражениях в индексе при использовании функций преобразования даты в строковое выражение.  Возможные значения данного элемента, соответствующего команде Microsoft FoxPro SET DATE включают следующие: "American", "ANSI", "British", "French", "DMY", "German", "Italian", "Japan", "MDY", "USA" и "YMD".  По умолчанию задается значение "MDY".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Mark	Код ASCII символа, служащего разделителем компонентов даты.  Значение по умолчанию следующим образом зависит от элемента "Date": • "/" (American, MDY) • "." (ANSI) • "/" (British, French, DMY) • "." (German) • "-" (Italian) • "/" (Japan, YMD) • "-" (USA) Значение 0 указывает использование стандартного разделителя для выбранного формата даты. По умолчанию задается значение 0.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
Exact	Двоичный индикатор, определяющий способ сравнения строковых значений.  Значение 01 соответствует команде Microsoft FoxPro SET EXACT ON.  Значение 00 соответствует команде Microsoft FoxPro SET EXACT OFF. По умолчанию задается значение 00.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats" FoxPro

Папка Jet\3.5\ISAM Formats\FoxPro 2.0 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.0 (*.dbf)
ImportFilter	REG_SZ	String	Microsoft FoxPro (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс FoxPro (*.idx; *.cdx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft FoxPro 2.0.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\FoxPro 2.5 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.5 (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс FoxPro (*.idx; *.cdx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft FoxPro 2.5.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\FoxPro 2.6 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 2.6 (*.dbf)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
IndexFilter	REG_SZ	String	Индекс FoxPro (*.idx; *.cdx)
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft FoxPro 2.6.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\FoxPro 3.0 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 3.0 (*.dbf)
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	01
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Microsoft FoxPro 3.0.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\FoxPro DBC содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Xbase
ExportFilter	REG_SZ	String	Microsoft FoxPro 3.0 (*.dbc)
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера баз данных Microsoft Jet 2.5

При установке драйвера баз данных с ядром Microsoft Jet 2.5 программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера базы данных с ядром Microsoft Jet.

Примечание.   Программа установки записывает только один элемент (win32) в папку Jet\3.5\Engines\Jet 2.x; этот элемент является единственным в данной папке.

Параметры инициализации ядра Microsoft Jet

Папка Jet\3.5\Engines\Jet 2.x содержит следующие элементы.

Элемент	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	По умолчанию
PageTimeOut	REG_DWORD	Integer	5
LockedPageTimeOut	REG_DWORD	Integer	5
LockRetry	REG_DWORD	Integer	20
CommitLockRetry	REG_DWORD	Integer	20
CursorTimeout	REG_DWORD	Integer	5
IdleFrequency	REG_DWORD	Integer	10
ForceOSFlush	REG_DWORD	Integer	0
MaxBufferSize	REG_DWORD	Integer	512
ReadAheadPages	REG_DWORD	Integer	8
Ядро Microsoft Jet использует следующий элемент для указания пути к драйверу базы данных.

Элемент	Описание
win32	Каталог драйвера ядра базы данных (.dll).  Путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Дополнительные параметры инициализации ядра базы данных Microsoft Jet содержатся в папке Jet\3.5\Engines\Jet 2.x.

В следующем примере демонстрируются типичные значения элементов папки Jet\3.5\Engines\Jet 2.x\ISAM.

PageTimeout=5

LockedPageTimeout=5

CursorTimeout=5

LockRetry=20

CommitLockRetry=20

MaxBufferSize=512

ReadAheadPages=16

IdleFrequency=10

ForceOsFlush = 0

Следующие параметры используются для настройки ядра базы данных Microsoft Jet.

Элемент	Описание
PageTimeout	Промежуток времени между помещением во временный буфер данных, на которые не наложена блокировка изменений, и их уничтожением, выраженный в условных единицах, равных 100 миллисекунд.  По умолчанию задается значение 5 единиц (т.е. 0,5 с).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
LockedPageTimeout	Промежуток времени между помещением во временный буфер данных, на которые наложена блокировка изменений, и их уничтожением, выраженный в условных единицах, равных 100 миллисекунд.  По умолчанию задается значение 5 единиц (т.е. 0,5 с).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
CursorTimeout	Промежуток времени, в течение которого сохраняется адресация страницы, выраженный в условных единицах, равных 100 миллисекунд.  По умолчанию задается значение 5 единиц (т.е. 0,5 с).  Данная настройка применима только к базам данных, созданных ядром Microsoft Jet версии 1.x.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
LockRetry	Число повторений попытки доступа к блокированной странице перед возвращением сообщения о конфликте блокировок.  По умолчанию задается значение 20.  Параметр "LockRetry" связан с параметром "CommitLockRetry".  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
CommitLockRetry	Число повторений ядром Microsoft Jet попыток блокировать данные для занесения изменений.  Если ядро Microsoft Jet не может наложить блокировку, попытка занести изменения окажется неудачной. Число повторения ядром Microsoft Jet попытки наложить блокировку напрямую связано со значением параметра "LockRetry".  Каждая попытка наложить блокировку занесения ядром базы данных Microsoft Jet повторяется столько раз, сколько указано в параметре "LockRetry".  Например, если параметр "CommitLockRetry" имеет значение 20 и параметр "LockRetry" имеет значение 20, то каждая попытка наложить блокировку занесения будет повторена ядром Microsoft Jet 20 раз; таким образом, всего будет сделано 400 попыток. По умолчанию для параметра "CommitLockRetry" задается значение 20.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
MaxBufferSize	Размер внутреннего временного буфера ядра базы данных, выраженный в килобайтах (K).  Значением элемента "MaxBufferSize" должно быть целое число в диапазоне от 9 до 4096, включительно.  По умолчанию задается значение 512.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
ReadAheadPages	Число страниц, которые читаются с опережением при каждом просмотре.  По умолчанию задается значение 16.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
ForceOSFlush	Любое значение, отличное от 0, означает принудительную запись на диск содержимого буфера OS при занесении или записи данных.  Значение 0 (по умолчанию) означает отказ от сброса буфера на диск.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
IdleFrequency	Промежуток времени, выраженный в условных единицах, равных 100 миллисекунд, после которого ядро Microsoft Jet снимает блокировку изменений.  По умолчанию задается значение 10 единиц, т.е. 1 с.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
Папка "ISAM Formats" Microsoft Jet

Папка Jet\3.5\ISAM Formats\Jet 2.x содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Jet 2.x
OneTablePerFile	REG_BINARY	Binary	00
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера баз данных Microsoft Jet 3.5

В этом разделе описаны параметры инициализации драйвера ядра базы данных Microsoft Jet 3.5.

При регистрации драйверов MSJET35.DLL и MSRD2X35.DLL в папку \HKEY_LOCAL_MACHINES\Software\Microsoft\Jet\3.5\Engines записываются два элемента.  Это делается автоматически при установке Microsoft Access 97.  Элементы имеют следующий вид:

SystemDB = <путь>\System.mdb

CompactBYPkey = 1

Следующие параметры используются для настройки ядра базы данных Microsoft Jet..

Элемент	Описание
SystemDB	Указывает полный путь и имя файла системной базы данных.  По умолчанию задается соответствующий путь с добавлением имени файла System.mdb.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
CompactByPKey	Указывает, должны ли записи таблицы при ее сжатии копироваться в порядке, задаваемым ключом таблицы, если ключ существует.  Если ключ отсутствует, используется порядок записей в основных таблицах. Значение 0 задает использование порядка записей в основных таблицах; ненулевое значение задает использование порядка записей, определяемого ключом.  По умолчанию задается ненулевое значение.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51. Примечание.   Данная настройка применяется только при сжатии баз данных, созданных ядром Microsoft Jet версии 3.0 или более поздней.  При сжатии баз данных, созданных ядром Microsoft Jet версии 2.x, данные всегда копируются в порядке, действующем в основных таблицах.
Параметры инициализации ядра Microsoft Jet

При регистрации ядра Microsoft Jet создаются описанные ниже элементы в папке \HKEY_LOCAL_MACHINES\Software\Microsoft\Jet\3.5\Engines\Jet 3.5.

В следующем примере демонстрируются типичные значения элементов папки Jet\3.5\Engines\Jet 3.5.

FlushTransactionTimeout=500

LockDelay=100

LockRetry=20

MaxBufferSize= 0

MaxLocksPerFile= 9500

PageTimeout=5000

Threads=3

UserCommitSync=Yes

ImplicitCommitSync=No

ExclusiveAsyncDelay=2000

SharedAsyncDelay=0

Следующие параметры используются для настройки ядра базы данных Microsoft Jet.

Элемент	Описание
PageTimeout	Промежуток времени между помещением во временный буфер данных, на которые не наложена блокировка изменений, и их уничтожением, выраженный в миллисекундах.  По умолчанию задается 5000 миллисекунд, т.е. 5 с.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
FlushTransactionTimeout	Данный элемент отключает оба параметра реестра: "ExclusiveAsyncDelay" и "SharedAsyncDelay".  Чтобы включить эти параметры, необходимо задать для данного элемента нулевое значение.  Параметр "FlushTransactionTimeout" изменяет способ, используемый ядром базы данных Microsoft Jet при асинхронной записи в файл.  В предыдущих версиях ядра Microsoft Jet для определения времени ожидания операций асинхронной записи использовались параметры "ExclusiveAsyncDelay".  Параметр "FlushTransactionTimeout" изменяет способ записи таким образом, что запись выполняется по истечении указанного промежутка времени, если при этом во временный буфер не добавлялись новые страницы.  Единственное исключение из этого правила возникает в случае превышения максимального размера буфера "MaxBufferSize".  В этом случае асинхронная запись содержимого буфера осуществляется вне зависимости от прошедшего времени.  Таким образом, ядро Microsoft Jet 3.5 выполняет асинхронную запись либо после 500 миллисекунд бездействия, либо после заполнения буфера.
LockDelay	Данный параметр работает совместно с параметром "LockRetry" и задает ожидание 100 миллисекунд перед выдачей нового требования на блокировку.  Параметр "LockDelay" был добавлен для предупреждения срывов, возвращающих в некоторых операционных системах.
MaxLocksPerFile	Данный параметр запрещает превышение определенного числа в транзакциях, выполняемых ядром Microsoft Jet.  Если число попыток блокировки в транзакции превышает это значение, транзакция разбивается на две части, занесение в которых производится независимо.  Этот параметр был добавлен для предотвращения срывов на сервере Netware 3.1 при превышении предела блокировок Netware, а также для повышения быстродействия при работе как с Netware, так и с NT.
LockRetry	Число повторений попытки доступа к блокированной странице перед возвращением сообщения о конфликте блокировок.  По умолчанию задается значение 20.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
RecycleLVs	Данный параметр включает повторное использование ядром Microsoft Jet страниц, содержащих длинные значения (LV) (типов Memo, Long Binary [объект OLE] и Binary).  Версия Microsoft Jet 3.0 не позволяла повторно использовать страницы этих типов до закрытия базы данных последним пользователем.  Если параметр "RecyleLVs" включен, ядро Microsoft Jet 3.5 начинает повторно использовать большинство страниц LV при расширении базы данных (т.е. при добавлении групп страниц). Примечание.   Включения данной возможности приводит к заметному понижению быстродействия при обработке данных перечисленных типов.  Microsoft Access 97 автоматически включает и отключает данный параметр при работе с модулями, формами и отчетами, избавляя пользователя от необходимости вручную включать и отключать его.  По умолчанию задается значение 0.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
MaxBufferSize	Размер внутреннего временного буфера ядра базы данных, выраженный в килобайтах (K).  Значением элемента "MaxBufferSize" должно быть целое число, большее или равное 512.  Значение по умолчанию рассчитывается по следующей формуле: ((ОбъемОЗУ в МБ - 12 МБ) / 4) + 512 КБ Например, для системы с ОЗУ 32 M стандартный размер буфера составляет  ((32 M - 12 M) / 4) + 512 K или 5632 K.  Для того чтобы задать стандартный размер буфера, следует оставить этот элемент пустым: MaxBufferSize= Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
Threads	Число внутренних адресов подпрограмм, доступных для ядра Microsoft Jet.  По умолчанию задается значение 3.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
UserCommitSync	Определяет для системы режим ожидания занесения пользователем.  Значение "Yes" указывает, что система ожидает занесения; значение "No" определяет асинхронное продолжение операций.  По умолчанию задается значение "Yes".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
ImplicitCommitSync	Определяет для системы режим ожидания неявного занесения.  Значение "No" указывает, что выполнение операций продолжается без ожидания занесения; значение "Yes" определяет ожидание занесения.  По умолчанию задается значение "No".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
ExclusiveAsyncDelay	Указывает в миллисекундах время отсрочки асинхронного потока данных для базы данных с монопольным доступом.  Значение по умолчанию равно 2000 (2 с).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
SharedAsyncDelay	Указывает в миллисекундах время отсрочки асинхронного потока данных для базы данных с общим доступом.   По умолчанию задается значение 0.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
Папка "ISAM Formats" Microsoft Jet

Папка Jet\3.5\ISAM Formats содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Jet 3.5
ExportFilter	REG_SZ	String	Microsoft Access (*.mdb)
ImportFilter	REG_SZ	String	Microsoft Access (*.mdb)
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	00
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл базы данных Microsoft Access. При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Настройка ядра базы данных Microsoft Jet для доступа к источникам данных ODBC

В следующих разделах описаны параметры реестра Windows, определяющие настройку ядра базы данных Microsoft Jet для подключения к базе данных ODBC.

Параметры инициализации ядра Microsoft Jet для подключения к источнику данных ODBC

Папка \HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\Engines\ODBC содержит параметры инициализации ядра базы данных Microsoft Jet.

Примечание.   В следующем примере демонстрируются типичные значения элементов папки Jet\3.5\Engines\ODBC.

LoginTimeout=20

QueryTimeout=60

ConnectionTimeout=600

AsyncRetryInterval=500

AttachCaseSensitive=0

AttachableObjects='TABLE','VIEW','SYSTEM TABLE','ALIAS','SYNONYM'

SnapshotOnly=0

TraceSQLMode=0

TraceODBCAPI=0

DisableAsync=1

JetTryAuth=1

PreparedInsert=0

PreparedUpdate=0

FastRequery=0

Ядро Microsoft Jet следующим образом использует элементы в папке ODBC.

Элемент	Описание
LoginTimeout	Промежуток времени в секундах, в течение которого выполняются попытки подключения.  По умолчанию задается значение 20 (значения имеют тип REG_DWORD).
QueryTimeout	Промежуток времени в секундах, в течение которого может выполняться запрос (общее время выполнения).  Если DisableAsync=0 (по умолчанию), то параметр "QueryTimeout" задает в секундах время ожидания завершения запроса между опросами сервера.  По умолчанию задается значение 60 (значения имеют тип REG_DWORD).
ConnectionTimeout	Промежуток времени в секундах, в течение которого во временном буфере может сохраняться незадействованное подключение.  По умолчанию задается значение 600 (значения имеют тип REG_DWORD).
AsyncRetryInterval	Промежуток времени в миллисекундах между проверками, выполняет ли сервер обработку запроса.  Данный элемент используется только при асинхронной обработке.  По умолчанию задается значение 500 (значения имеют тип REG_DWORD).
AttachCaseSensitive	Индикатор, указывающий, требуется ли точное совпадение имен таблиц при связывании. Допустимые значения: 0 (связывается первая таблица с именем, совпадающим без учета регистра) и 1 (при связывании требуется точное совпадение имен таблиц).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD).
AttachableObjects	Список типов объектов на сервере, с которыми допускается связывание.  По умолчанию задается список 'TABLE', 'VIEW', 'SYSTEM TABLE', 'ALIAS', 'SYNONYM' (значения имеют тип REG_SZ).
SnapshotOnly	Индикатор, указывающий принудительное создание статических объектов Recordset.  Допустимые значения: 0 (допускается создание динамических наборов записей) и 1 (создаются только статические наборы записей).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD).
TraceSQLMode	Индикатор, указывающий, проводит ли ядро базы данных Microsoft Jet поиск инструкций SQL, посланных на источник данных ODBC, в файле SQLOUT.txt.  Допустимые значения: 0 (нет) и 1 (да).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD).  Данный элемент является взаимозаменяемым с элементом "SQLTraceMode".
TraceODBCAPI	Индикатор, указывающий трассировку вызовов интерфейса API ODBC в файле ODBCAPI.txt.  Допустимые значения: 0 (нет) и 1 (да).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD).
DisableAsync	Индикатор, указывающий принудительное синхронное выполнение запроса.  Допустимые значения: 0 (по возможности, запрос выполняется в асинхронном режиме) и 1 (принудительное синхронное выполнение запроса).  По умолчанию задается значение 1 (значения имеют тип REG_DWORD).
JetTryAuth	Индикатор, указывающий попытку использования имени и пароля пользователя Microsoft Access при подключении к серверу до приглашения ввести имя и пароль.  Допустимые значения: 0 (нет) и 1 (да).  По умолчанию задается значение 1 (значения имеют тип REG_DWORD).
PreparedInsert	Индикатор, указывающий использование подготовленной инструкции INSERT для заполнения всех столбцов.  Допустимые значения: 0 (использование специальной инструкции INSERT, в которой вставляются только непустые значения) и 1 (использование готовой инструкции INSERT).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD). Использование подготовленных инструкций INSERT может привести к тому, что стандартные значения сервера будут заменены на пустые, а также к запуску триггеров для тех столбцов, которые не были вставлены явным образом.
PreparedUpdate	Индикатор, указывающий использование подготовленной инструкции UPDATE для обновления данных во всех столбцах.  Допустимые значения: 0 (использование специальной инструкции UPDATE, указывающей обновление только измененных столбцов) и 1 (использование готовой инструкции UPDATE).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD). Использование подготовленных инструкций UPDATE может привести к запуску триггеров для неизмененных столбцов.
FastRequery	Индикатор, указывающий использование подготовленной инструкции SELECT для запросов с параметрами.  Допустимые значения: 0 (нет) и 1 (да).  По умолчанию задается значение 0 (значения имеют тип REG_DWORD).
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера баз данных Paradox

При установке драйвера баз данных Paradox программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера базы данных Paradox.

Параметры инициализации Paradox

Папка Jet\3.5\Engines\Paradox содержит параметры инициализации драйвера Mspdox35.dll, используемого при доступе к внешним источникам данных Paradox.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSPDOX35.dll

PageTimeout=600

CollatingSequence=ASCII

DataCodePage=OEM

ParadoxUserName=Kimberly

ParadoxNetPath=P:\PDOXDB

ParadoxNetStyle=4.X

Ядро Microsoft Jet следующим образом использует элементы в папке Paradox.

Элемент	Описание
win32	Каталог файла Mspdox35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
PageTimeout	Промежуток времени между помещением данных во временный буфер и их уничтожением.  Значение задается в условных единицах, равных 100 миллисекунд.  По умолчанию задается 600 единиц (60 секунд).  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
CollatingSequence	Указывает используемый при сортировке порядок символов для всех таблиц Paradox, созданных или открытых с помощью ядра базы данных Microsoft Jet.  Допустимые значения: "ASCII", "International", "Norwegian-Danish" и "Swedish-Finnish".  Значение параметра "CollatingSequence" должно соответствовать языковой настройке, заданной при определении структуры таблицы Paradox.  По умолчанию задается значение "ASCII".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
DataCodePage	Определяет способ сохранения текстовых страниц.  Возможные значения: • OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются. • ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются. По умолчанию задается значение "OEM".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
ParadoxUserName	Имя, которое будет выводиться при попытке наложить на таблицу в интерактивном режиме Paradox блокировку, несовместимую с уже существующей блокировкой, наложенной драйвером ISAM Paradox.  Данный элемент определяется только для компьютера, включенного в сеть.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51. Примечание.   Если элемент "ParadoxUserName" определяется пользователем, необходимо также определить элементы "ParadoxNetPath" и "ParadoxNetStyle"; в противном случае попытка доступа к внешним данным Paradox приведет к ошибке.  Кроме того, при сетевом доступе к базе данных Paradox в многопользовательском режиме необходимо задать или изменить этот параметр вручную.
ParadoxNetPath	Полный путь к каталогу, содержащему файл Paradox.net (для Paradox 3.x) или Pdoxusrs.net (для Paradox 4.x).  Данный элемент определяется только для компьютера, включенного в сеть.  Обычно пользователю приходится изменять этот элемент (добавляемый программой установки), поскольку эта программа указывает наиболее вероятный адрес файла.  Указанный в элементе "ParadoxNetPath" полный путь (включая букву диска) должен быть одинаковым у всех пользователей, совместно использующих базу данных (каталог).  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51. Примечание.   Если элемент "ParadoxNetPath" определяется пользователем, необходимо также определить элементы "ParadoxUserName" и "ParadoxNetStyle"; в противном случае попытка доступа к внешним данным Paradox приведет к ошибке.  Кроме того, при сетевом доступе к базе данных Paradox в многопользовательском режиме необходимо задать или изменить этот параметр вручную.
ParadoxNetStyle	Данный элемент определяет способ сетевого доступа к внешним данным Paradox.  Возможные значения: • 3.x • 4.x Обратите внимание, что пользователи Paradox 3.x не должны указывать значение "4.x"; в противном случае драйвер будет использовать неподходящий способ блокировки. Пользователи Paradox 5.0 должны указать для элемента "ParadoxNetStyle" значение "4.x"; это обеспечит правильные блокировки. Данный элемент определяется только для компьютера, включенного в сеть.  Этот элемент должен соответствовать версии Paradox, используемой всеми пользователями, входящими в группу, а также версии, используемой всеми пользователями конкретной базы данных (каталога).  По умолчанию задается значение 4.x.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51. Примечание.   Если элемент "ParadoxNetStyle" определяется пользователем, необходимо также определить элементы "ParadoxUserName" и "ParadoxNetPath"; в противном случае попытка доступа к внешним данным Paradox приведет к ошибке.
Папка "ISAM Formats" Paradox

Папка Jet\3.5\ISAM Formats\Paradox 3.x содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 3 (*.db)
ImportFilter	REG_SZ	String	Paradox (*.db)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Paradox 3.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Paradox 4.x содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 4 (*.db)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Paradox 4.  При экспорте в существующий файл его содержимое переписывается.
Папка Jet\3.5\ISAM Formats\Paradox 5.x содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Paradox
ExportFilter	REG_SZ	String	Paradox 5 (*.db)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в файл Paradox 5.  При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера текстовых источников данных

При установке драйвера текстовых источников данных программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера текстовых источников данных.

Параметры инициализации текстовых источников данных

Папка Jet\3.5\Engines\Text содержит параметры инициализации драйвера Mstext35.dll, используемого при доступе к внешним текстовым файлам данных.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSTEXT35.dll

MaxScanRows=25

FirstRowHasNames=True

CharacterSet=OEM

Format=CSVDelimited

Extensions=none,asc,csv,tab,txt

ExportCurrencySymbols=Yes

Ядро Microsoft Jet следующим образом использует элементы в папке Text.

Элемент	Описание
win32	Каталог файла Mstext35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
MaxScanRows	Указывает число строк, которые проверяются при определении типа данных в столбцах.  Если этот элемент имеет значение 0, проверяется весь файл. По умолчанию задается значение 25.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
FirstRowHasNames	Двоичное значение, указывающее, содержит ли первая строка таблицы имена столбцов.  Значение 01 задает имена столбцов, берущиеся из первой строки.   Значение 00 указывает, что первая строка не содержит имена столбцов.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
CharacterSet	Определяет способ сохранения текстовых страниц.  Возможные значения: • OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются. • ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются. По умолчанию задается значение "OEM".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Format	Может иметь одно из следующих значений: "TabDelimited", "CSVDelimited", "Delimited" (<одиночный символ разделителя>)".  Разделителем для формата "Delimited" может служить любой одиночный символ кроме символа прямых кавычек (").  По умолчанию задается значение "CSVDelimited".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Extensions	Расширение имени, используемое для поиска текстовых файлов данных.  По умолчанию проводится поиск файлов с расширением имени txt, csv, tab, asc.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
ExportCurrencySymbols	Двоичное значение, указывающее, включается ли символ денежной единицы при экспорте.  Значение 01 задает включение символа денежной единицы.  Значение 00 указывает, что экспортируется только числовое значение.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats" текстовых источников данных

Папка Jet\3.5\ISAM Formats\Text содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Text
ExportFilter	REG_SZ	String	Текстовые файлы (*.txt; *.csv; *.tab; *.asc)
ImportFilter	REG_SZ	String	Текстовые файлы (*.txt; *.csv; *.tab; *.asc)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в текстовый файл.  При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.

Изменение файла Schema.ini

Для чтения, импорта или экспорта данных в формате текстовых файлов необходимо включить в файл .ini разделы текстовых драйверов ISAM и в дополнение к этому создать файл Schema.ini.  Файл Schema.ini должен описывать следующие характеристики текстового источника данных: формат текстового файла, способ его чтения при импорте и стандартный формат экспорта файлов.  Ниже приводится пример структуры для файла с фиксированной длиной записей, Filename.txt:

[Filename.txt]

ColNameHeader=False

Format=FixedLength

MaxScanRows=25

CharacterSet=OEM

Col1=columnname Char Width 24

Col2=columnname2 Date Width 9

Col3=columnname7 Float Width 10

Col4=columnname8 Integer Width 10

Col5=columnname9 LongChar Width 10

Аналогично, формат текстового файла с разделителями задается следующим образом:

[Delimit.txt]

ColNameHeader=True

Format=Delimited(!)

MaxScanRows=0

CharacterSet=OEM

Col1=username char width 50

Col2=dateofbirth Date width 9

Для экспорта данных в текстовый файл с разделителями также следует указать формат:

[Export: Специальный экспорт]

ColNameHeader=True

Format=TabDelimited

MaxScanRows=25

CharacterSet=OEM

DateTimeFormat=mm.dd.yy.hh.mm.ss

CurrencySymbol=Dm

CurrencyPosFormat=0

CurrencyDigits=2

CurrencyNegFormat=0

CurrencyThousandSymbol=,

CurrencyDecimalSymbol=.

DecimalSymbol=,

NumberDigits=2

NumberLeadingZeros=0

Пример "Специальный экспорт" представляет конкретную спецификацию экспорта, которая может быть изменена при подключении.  Последний пример соответствует передаче имени источника данных (DSN) во время подключения.  Все три раздела должны быть включены в один файл .ini.

Ядро базы данных Microsoft Jet использует следующие элементы файла Schema.ini.

Элемент	Описание
ColNameHeader	Должен иметь значение True (указывающее, что первая запись содержит имена столбцов) или False.
Format	Должен иметь одно из следующих значений: "TabDelimited", "CSVDelimited", "Delimited" (<одиночный символ разделителя>) или "FixedLength".  Разделителем для формата "Delimited" может служить любой одиночный символ кроме символа прямых кавычек (").
MaxScanRows	Указывает число строк, которые проверяются при определении типа данных в столбцах.  Если этот элемент имеет значение 0, проверяется весь файл.
CharacterSet	Должен иметь значение "OEM" или "ANSI", указывающее, что исходный файл записан с использованием кодовой страницы OEM или ANSI.
DateTimeFormat	Значением является строка форматирования, указывающая формат дат и времени.  Этот элемент необходимо определить, если все поля даты/времени при импорте/экспорте обрабатываются с помощью одного формата.  Поддерживаются все форматы ядра Microsoft Jet, за исключением 12-часовых (AM/ PM).  В отсутствие указанной строки форматирования используются форматы, заданные в панели управления Windows.
CurrencySymbol	Определяет символ денежной единицы, используемый для денежных значений в текстовом файле. Примерами могут служить символ доллара ($) или немецкой марки (Dm).  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
CurrencyPosFormat	Должен иметь одно из следующих значений: Перед значением без пробела ($1) После значения без пробела (1$) Перед значением с одним пробелом ($ 1) После значения с одним пробелом (1 $) Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
CurrencyDigits	Указывает число разрядов в дробной части денежного значения.  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
CurrencyNegFormat	Должен иметь одно из следующих значений: ($1) –$1 $–1 $1– (1$) –1$ 1–$ 1$– –1 $ –$ 1 1 $– $ 1– $ –1 1– $ ($ 1) (1 $) Здесь символ доллара приведен только для иллюстрации, в программе будет использоваться символ, указанный в элементе "CurrencySymbol".  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
CurrencyThousandSymbol	Указывает одиночный символ разделителя тысяч, используемый для денежных значений в текстовом файле.  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
CurrencyDecimalSymbol	Указывает одиночный символ разделителя целой и дробной части, используемый для денежных значений в текстовом файле.  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
DecimalSymbol	Указывает одиночный символ разделителя целой и дробной части, используемый для числовых значений.  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
NumberDigits	Указывает количество разрядов в дробной части числовых значений.  Если данный элемент опущен, по умолчанию используется настройка, заданная в панели управления Windows.
NumberLeadingZeros	Определяет вывод нуля перед десятичной точкой для чисел в диапазоне от –1 до 1; может иметь значение False (нули не выводятся) или True.
Col1, Col2, ...	Содержит список считываемых столбцов в текстовом файле.  Используется следующий формат: Coln=имяСтолбца тип [Width #] имяСтолбца: Имена столбцов, содержащие пробелы, должны заключаться в прямые кавычки. тип: Bit, Byte, Short, Long, Currency, Single, Double, DateTime, Text или Memo. Кроме этого, поддерживаются следующие типы текстового драйвера ODBC: Char (эквивалентен Text) Float (эквивалентен Double) Integer (эквивалентен Short) LongChar (эквивалентен Memo) Date формат даты
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера источника данных HTML (Internet)

При установке драйвера источника данных HTML программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера источника данных HTML.

Параметры инициализации источников данных HTML

Папка Jet\3.5\Engines\Text содержит параметры инициализации драйвера Mstext35.dll, используемого при доступе к таблицам, сохраненным в файлах HTM.  В следующем примере демонстрируются типичные значения элементов данной папки.

win32=<путь>\MSTEXT35.dll

MaxScanRows=25

FirstRowHasNames=False

CharacterSet=OEM

Format=TabDelimited

Extensions=none,asc,csv,tab,txt

ExportCurrencySymbols=Yes

Ядро Microsoft Jet следующим образом использует элементы в папке Text.

Элемент	Описание
win32	Каталог файла Mstext35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
MaxScanRows	Указывает число строк, которые проверяются при определении типа данных в столбцах.  Если этот элемент имеет значение 0, проверяется весь файл.  По умолчанию задается значение 25.  Значения имеют тип DWORD в Windows 95 и Windows NT 4.0 или тип REG_DWORD в Windows NT 3.51.
FirstRowHas Names	Двоичное значение, указывающее, содержит ли первая строка таблицы имена столбцов.  Значение 01 задает имена столбцов, берущиеся из первой строки.   Значение 00 указывает, что первая строка не содержит имена столбцов.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
CharacterSet	Определяет способ сохранения текстовых страниц.  Возможные значения: • OEM — Преобразования из OEM в ANSI и из ANSI в OEM выполняются. • ANSI — Преобразования из OEM в ANSI и из ANSI в OEM не выполняются. По умолчанию задается значение "OEM".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Format	Может иметь одно из следующих значений: "TabDelimited", "CSVDelimited", "Delimited" (<одиночный символ разделителя>)".  Разделителем для формата "Delimited" может служить любой одиночный символ кроме символа прямых кавычек (").  По умолчанию задается значение "CSVDelimited".  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
Extensions	Расширение имени, используемое для поиска текстовых файлов данных.  По умолчанию проводится поиск файлов с расширением имени txt, csv, tab, asc.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
ExportCurrencySymbols	Двоичное значение, указывающее, включается ли символ денежной единицы при экспорте.  Значение 01 задает включение символа денежной единицы.  Значение 00 указывает, что экспортируется только числовое значение.  По умолчанию задается значение 01.  Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
Папка "ISAM Formats\HTML Import"

Папка Jet\3.5\ISAM Formats\HTML Import содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Text
ImportFilter	REG_SZ	String	Файлы HTML (*.ht*)
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextImport	REG_SZ	String	Импорт данных из внешнего файла в текущую базу данных.  Изменение данных в текущей базе данных не приводит к изменению внешнего файла.
ResultTextLink	REG_SZ	String	Создание в текущей базе данных таблицы, связанной с внешним файлом.  Изменение данных в текущей базе данных изменяет содержимое внешнего файла.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.

Папка "ISAM Formats\HTML Export"

Папка Jet\3.5\ISAM Formats\HTML Export содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Text
ExportFilter	REG_SZ	String	Файлы HTML (*.htm)
CanLink	REG_BINARY	Binary	00
OneTablePerFile	REG_BINARY	Binary	01
IsamType	REG_DWORD	DWORD	2
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
ResultTextExport	REG_SZ	String	Экспорт данных из текущей базы данных в текстовый файл.  При экспорте в существующий файл его содержимое переписывается.
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


Инициализация драйвера источника данных Microsoft Exchange

При установке драйвера источника данных Microsoft Exchange программа установки записывает набор стандартных значений в реестр Windows в подчиненные записи "Engines" и "ISAM Formats".  Пользователь не должен изменять эти записи самостоятельно; для добавления, удаления или изменения этих настроек следует использовать программу установки вашего приложения.  Ниже описаны параметры инициализации и настройки формата ISAM для драйвера источника данных Microsoft Exchange.

Параметры инициализации источников данных Microsoft Exchange

Папка Jet\3.5\Engines\Exchange содержит параметры инициализации драйвера Msexch35.dll, используемого при доступе к внешним папкам Microsoft Exchange.  Эта папка содержит единственный элемент:

win32=<путь>\MSEXCH35.dll

Ядро базы данных Microsoft Jet использует эту папку Exchange для указания положения файла Msexch35.dll.  Полный путь определяется во время установки.  Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.

Папка "ISAM Formats" Microsoft Exchange

Папка Jet\3.5\ISAM Formats\Exchange 4.0 содержит следующие элементы.

Имя элемента	Тип Windows NT 3.51	Тип Windows 95 и Windows NT 4.0	Значение
Engine	REG_SZ	String	Exchange
CanLink	REG_BINARY	Binary	01
OneTablePerFile	REG_BINARY	Binary	00
IsamType	REG_DWORD	DWORD	0
IndexDialog	REG_BINARY	Binary	00
CreateDBOnExport	REG_BINARY	Binary	00
Примечание.   При изменении настроек в реестре Windows новые значения параметров вступают в силу после закрытия и нового запуска ядра базы данных.


IN

Ключевое слово IN используется в следующих контекстах:

Оператор In

Предложение IN

Подчиненные запросы SQL

Инструкция TRANSFORM


ON

Ключевое слово ON используется в следующих контекстах:

Операция INNER JOIN

Операции LEFT JOIN, RIGHT JOIN


ALL

Ключевое слово ALL используется в следующих контекстах:

Предикаты ALL, DISTINCT, DISTINCTROW, TOP

Подчиненные запросы SQL

Операция UNION


ASC/DESC

Ключевые слова ASC и DESC используится в следующих контекстах:

Инструкция CREATE INDEX

Предложение ORDER BY


BY

Ключевое слово BY используется в следующих контекстах:

Предложение GROUP BY

Предложение ORDER BY


CREATE

Ключевое слово CREATE используется в следующих контекстах:

Инструкция CREATE INDEX

Инструкция CREATE TABLE


DROP

Ключевое слово DROP используется в следующих контекстах:

Инструкция ALTER TABLE

Инструкция DROP


INDEX

Ключевое слово INDEX используется в следующих контекстах:

Инструкция CREATE INDEX

Инструкция DROP


INTO

Ключевое слово INTO используется в следующих контекстах:

Инструкция INSERT INTO

Инструкция SELECT ...


JOIN

Ключевое слово JOIN используется в следующих контекстах:

Операция INNER JOIN

Операции LEFT JOIN, RIGHT JOIN


SELECT

Ключевое слово SELECT используется в следующих контекстах:

Инструкция SELECT

Инструкция SELECT ... INTO


TABLE

Ключевое слово TABLE используется в следующих контекстах:

Инструкция ALTER TABLE

Инструкция CREATE INDEX

Инструкция CREATE TABLE

Инструкция DROP

Операция UNION


WITH

Ключевое слово WITH используется в следующих контекстах:

Инструкция CREATE INDEX

Описание WITH OWNERACCESS OPTION