Разработка баз данных в Delphi. 11 Уроков

       

 Создание таблиц с помощью SQL


Если Вы хотите воспользоваться компонентом TQuery, сначала поместите его на форму. После этого настройте свойство DatabaseName на нужный Вам алиас. После этого можно ввести SQL-предложение в свойство SQL. Для выполнения запроса, изменяющего структуру, вставляющего или обновляющего данные на сервере, нужно вызвать метод ExecSQL компонента TQuery. Для выполнения запроса, получающего данные с сервера (т.е. запроса, в котором основным является оператор SELECT), нужно вызвать метод Open компонента TQuery. Это связано с тем, что BDE при посылке запроса типа SELECT открывает так называемый курсор, с помощью которого осуществляется навигация по выборке данных (подробней об этом см. в уроке, посвященном TQuery).

Приведем упрощенный синтаксис SQL-предложения для создания таблицы на SQL-сервере InterBase (более полный синтаксис можно посмотреть в online-справочнике по SQL, поставляемом с локальным InterBase):

CREATE TABLE table

 (<col_def> [, <col_def> | <tconstraint> ...]);

где

table - имя создаваемой таблицы,

<col_def> - описание поля,

<tconstraint> - описание ограничений и/или ключей (квадратные скобки []


означают необязательность, вертикальная черта | означает “или”).

Описание поля состоит из наименования поля и типа поля (или домена - см. урок 9), а также дополнительных ограничений, накладываемых на поле:

<col_def> = col {datatype | COMPUTED BY (<expr>) | domain}

   [DEFAULT {literal | NULL | USER}]

   [NOT NULL] [<col_constraint>]

   [COLLATE collation]

Здесь

col - имя поля;

datatype - любой правильный тип SQL-сервера (для InterBase такими типами являются SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION, DECIMAL, NUMERIC, DATE, CHAR, VARCHAR, NCHAR, BLOB), символьные типы могут иметь CHARACTER SET - набор символов, определяющий язык страны. Для русского языка следует задать набор символов WIN1251;

COMPUTED BY (<expr>) - определение вычисляемого на уровне сервера поля, где <expr> - правильное SQL-выражение, возвращающее единственное значение;


domain - имя домена (обобщенного типа), определенного в базе данных;

DEFAULT - конструкция, определяющая значение поля по умолчанию;

NOT NULL - конструкция, указывающая на то, что поле не может быть пустым;

COLLATE - предложение, определяющее порядок сортировки для выбранного набора символов (для поля типа BLOB не применяется). Русский набор символов WIN1251 имеет 2 порядка сортировки - WIN1251 и PXW_CYRL. Для правильной сортировки, включающей большие буквы, следует выбрать порядок PXW_CYRL.

Описание ограничений и/или ключей включает в себя предложения CONSTRAINT или предложения, описывающие уникальные поля, первичные, внешние ключи, а также ограничения CHECK (такие конструкции могут определяться как на уровне поля, так и на уровне таблицы в целом, если они затрагивают несколько полей):

<tconstraint> = [CONSTRAINT constraint <tconstraint_def>]

  <tconstraint>

  

Здесь

<tconstraint_def> = {{PRIMARY KEY | UNIQUE} (col[,col...])   | FOREIGN KEY (col [, col ...]) REFERENCES other_table

   | CHECK (<search_condition>)}

  

<search_condition> =

{<val> <operator> {<val> | (<select_one>)}

   | <val> [NOT] BETWEEN <val> AND <val>

   | <val> [NOT] LIKE <val> [ESCAPE <val>]

   | <val> [NOT] IN (<val> [, <val> ...] |

<val> = {

col [<array_dim>] | <constant> | <expr> | <function>

    | NULL | USER | RDB$DB_KEY } [COLLATE collation]

<constant> = num | "string" | charsetname "string"

<function> = {

COUNT (* | [ALL] <val> | DISTINCT <val>)

   | SUM ([ALL] <val> | DISTINCT <val>)

   | AVG ([ALL] <val> | DISTINCT <val>)

   | MAX ([ALL] <val> | DISTINCT <val>)

   | MIN ([ALL] <val> | DISTINCT <val>)

   | CAST (<val> AS <datatype>)

   | UPPER (<val>)

   | GEN_ID (generator, <val>)

   }

<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}


Содержание раздела