Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
SQL - вложенные пробелы

Письмо в компьютерный сервисный центр:
- Этанутипауменяпробелполомалсячеделатьто?
Ответ:
- Настоящие_программисты_не_пользуются_пробелами.

Выполнение SQL с пробелами и специальными символами в имени поля/колонки

Выполнение SQL-запросов в Delphi-компоненте TQuery (или специального средства SQL-запроса в Database Desktop, Visual dBASE или Paradox for Windows) требует специального синтаксиса для любых колонок, содержащих пробелы или специальные символы.

Пользуясь таблицей Biolife.DB из демо-данных Delphi, проиллюстрируем использование любых специфических требований синтаксиса. Запрос SQL Select мог бы быть сформирован следующим образом:

  SELECT
   Species No,
   Category,
   Common_Name,
   Species Name,
   Length (cm),
   Length_In,
   Notes,
   Graphic
  FROM
   BIOLIFE
В нормальной ситуации пробелы в номерах и именах колонок, длина в сантиметрах, круглые скобки и другие символы могут стать причиной синтаксической ошибки.

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

  SELECT
   BIOLIFE."Species No",
   BIOLIFE."Category",
   BIOLIFE."Common_Name",
   BIOLIFE."Species Name",
   BIOLIFE."Length (cm)",
   BIOLIFE."Length_In",
   BIOLIFE."Notes",
   BIOLIFE."Graphic"
  FROM
   "BIOLIFE.DB" BIOLIFE
В приведенном выше примере таблицный псевдоним BIOLIFE используется в качестве ссылки на саму таблицу и располагается перед именем колонки . Данная ссылка может принимать форму имени псевдонима, реального имени таблицы, или ссылаться на имя файла при использовании таблиц dBASE или Paradox. Следующее SQL-выражение должно также хорошо работать.

Примечание: Данное SQL-выражение может использоваться при условии, что необходимый псевдоним уже открыт. В случае TQuery это означает, что псевдоним определен в свойстве DatabaseName.

  SELECT
   BIOLIFE."Species No",
   BIOLIFE.Category,
   BIOLIFE.Common_Name,
   BIOLIFE."Species Name",
   BIOLIFE."Length (cm)",
   BIOLIFE.Length_In,
   BIOLIFE.Notes,
   BIOLIFE.Graphic
  FROM
   BIOLIFE
Если псевдоним недоступен, то для таблицы должен быть определен путь целиком, например, так:
  SELECT
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Species No",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Category",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Common_Name",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Species Name",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Length (cm)",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Length_In",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Notes",
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"."Graphic"
  FROM
   "C:\DELPHI\DEMOS\DATA\BIOLIFE.DB"

Наконец, есть два средства автоматического форматирования специального синтаксиса. Первым является Visual Query Builder, включаемой в версию Client/Server Delphi. Visual Query Builder выполняет такое форматирование автоматически, по мере создания запроса. Другое средство - Database Desktop Show SQL, доступный при создании и редактировании запроса QBE-типа. После выбора пункта меню Query|Show SQL, отображаемый SQL-текст может быть вырезан и вставлен где необходимо.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay