Creating Heterogenous Queries

From RAD Studio
Jump to: navigation, search

Go Up to Using BDE-enabled datasets Index

Note: The Borland Database Engine (BDE) has been deprecated, so it will not be enhanced. For instance, BDE will never have Unicode support. You should not undertake new development with BDE. Consider migrating your existing database applications from BDE to dbExpress.

TQuery supports heterogeneous queries against more than one server or table type (for example, data from an Oracle table and a Paradox table. When you execute a heterogeneous query, the BDE parses and processes the query using Local SQL. Because the BDE uses Local SQL, extended, server-specific SQL syntax is not supported.

To perform a heterogeneous query

  1. Define separate BDE aliases for each database accessed in the query using the BDE Administration tool or the SQL explorer.
  2. Leave the DatabaseName property of the TQuery blank; the names of the databases used will be specified in the SQL statement.
  3. In the SQL property, specify the SQL statement to execute. Precede each table name in the statement with the BDE alias for the table's database, enclosed in colons. This whole reference is then enclosed in quotation marks.
  4. Set any parameters for the query in the Params property.
  5. Call Prepare to prepare the query for execution prior to executing it for the first time.
  6. Call Open or ExecSQL depending on the type of query you are executing.

For example, suppose you define an alias called Oracle1 for an Oracle database that has a CUSTOMER table, and Sybase1 for a Sybase database that has an ORDERS table. A simple query against these two tables would be:

SELECT Customer.CustNo, Orders.OrderNo
FROM ":Oracle1:CUSTOMER"
  JOIN ":Sybase1:ORDERS"
    ON (Customer.CustNo = Orders.CustNo)
WHERE (Customer.CustNo = 1503)

As an alternative to using a BDE alias to specify the database in a heterogeneous query, you can use a TDatabase component. Configure the TDatabase as normal to point to the database, set the TDatabase.DatabaseName to an arbitrary but unique value, and then use that value in the SQL statement instead of a BDE alias name.

See Also