Preparing Parameterized Queries
Go Up to Application Design Techniques
Any dynamic SQL (DSQL) statement must go through a cycle of parse, prepare, and execute. You can submit a DSQL statement to go through this process for each invocation, or you can separate the steps. If you have a situation where you execute the same statement multiple times, or the same form of statement with different parameters, you should explicitly prepare the statement once, then execute it as your looping action.
With parameterized queries, you can prepare a statement, but defer supplying the specific values for certain elements of the query.
InterBase supports parameterized queries in DSQL, for cases when a given statement is to be executed multiple times with different values. For example, loading a table with data might require a series of INSERT statements with values for each record inserted. Executing parameterized queries has a direct performance benefit, because the InterBase engine keeps the internal representation and optimization of the query after preparing it once.
Use parameterized DSQL queries in Delphi by following these steps:
- Place a named parameter in the statement with the Delphi
:PARAMETER
syntax. in place of a constant value in a query. InterBase supports parameters in place constants. Tables and column names cannot be parameterized. - Prepare the statement. Use the TQuery method
Prepare
. Delphi automatically prepares a query if it is executed without first being prepared. After execution, Delphi unprepares the query. When a query will be executed a number of times, an application should always explicitly prepare the query to avoid multiple and unnecessary prepares and unprepares. - Specify parameters. For example, with the TQuery component, use the
ParamByName
method to supply values for each parameter in the query. - Execute the statement.
SELECT
statements should use theOpen
method of TQuery.INSERT
,UPDATE
, andDELETE
statements should use theExecSQL
method. These methods prepares the statement in SQL property for execution if it has not already been prepared. To speed performance, an application should ordinarily call Prepare before callingExecSQL
for the first time. - Repeat steps 3 and 4 as needed.
- Unprepare the query.
In some real-world cases involving repetitive operations, using parameterized queries has increased performance 100%.