
Implementing SQL with spaces or special characters in field/column names

Implementing SQL statements in Delphi's TQuery component (or the
SQL query facilities of Database Desktop, Visual dBASE or Paradox
for Windows) requires special syntax for any columns that contain
spaces or special characters.

Using the Biolife.DB table of from Delphi's demo data to
illustrate, and without the use of any special syntax
requirements, a SQL Select statement might be formed as follows,

SELECT
 Species No,
 Category,
 Common_Name,
 Species Name,
 Length (cm),
 Length_In,
 Notes,
 Graphic
FROM
 BIOLIFE

While appearing normal, the space in the species number and name
columns and the column expressing length in centimeters - as well
as the parentheses present - cause syntax errors.

Two changes must be taken to correct the syntax of the above SQL
statement.  First, any columns containing spaces or special
characters must be surrounded by single (apostrophe) or double
quotes.  Secondly, a table reference and a period must precede
the quoted column name.  This second requirement is particularly
important since a quoted string alone is interpreted as a string
expression to be yielded as a column value.  A properly formatted
statement follows:

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

The above example uses the table alias BIOLIFE as the table
reference that precedes the column name.  This reference may take
the form of an alias name, the actual table name, or a quoted
file name when using dBASE or Paradox tables.  The following
SQL statements would serve equally well.

Note: This SQL statement may be used provided that the necessary
alias is already opened.  In the case of the TQuery this means the
alias is specified in the DatabaseName property.

SELECT
 BIOLIFE."Species No",
 BIOLIFE.Category,
 BIOLIFE.Common_Name,
 BIOLIFE."Species Name",
 BIOLIFE."Length (cm)",
 BIOLIFE.Length_In,
 BIOLIFE.Notes,
 BIOLIFE.Graphic
FROM
 BIOLIFE

If an alias is not available then the entire path to the table
can be specified as in this example:

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"

Finally, two facilities that automatically handle this special
formatting exist.  The first is the Visual Query Builder that is
a part of the Client/Server version of Delphi.  The Visual Query
Builder performs this formatting automatically as the query is built.
The other facility is Database Desktop's Show SQL feature, available
when creating or modifying a QBE-type query.  After selecting
Query|Show SQL from the main menu, the displayed SQL text may be
cut and pasted where needed.

