Release 10.1A: OpenEdge Data Management:
DataServer for ODBC

> ## Unsupported 4GL statements

> The DataServer supplies you with complete OpenEdge functionality when accessing ODBC data sources. Nearly all 4GL language elements (statements, functions, and so forth) and Data Dictionary features work the same whether your application accesses a data source through the DataServer or an OpenEdge database.

> Use the `DBRESTRICTIONS` function to find out which OpenEdge features your ODBC data sources or specific tables in those data sources do not support. For the DataServer for ODBC, `DBRESTRICTIONS` can return `SETUSERID`, `SET–CURRENT–VALUE`, and `COUNT–OF`. In certain circumstances, it can return additional values:

> - It can return `READ–ONLY` if:

> - You connect to the schema holder for a DB2, Informix, or Sybase data source in read-only mode.
> - You connect to a Sybase logical data source in read-only mode.
> - If your ODBC data-source table does not include the columns necessary for supporting the `RECID` function, `DBRESTRICTIONS` also returns `RECID`.

> See the `DBRESTRICTIONS` function reference entry in the OpenEdge Development: Progress 4GL Reference for information on syntax.

> Table 2–7 summarizes the 4GL differences between OpenEdge databases and ODBC data sources.

> Table 2–7: 4GL differences for OpenEdge databases and ODBC data sources (
> Progress feature | ODBC data-source difference
> --- | ---
> `BEGINS` operator Abbreviated Index `USING` option | When you use these 4GL elements to access data in an ODBC data source, you might get different results than from an OpenEdge database. Suppose, for example, that you have customers named SI and SIM and that you issue this `FIND` statement: `FIND customer WHERE name BEGINS "SI".` Progress returns the customer named SI. With the DataServer, the `FIND` fails because the `FIND` statement is ambiguous. You receive the same results when you use an abbreviated index or the `USING` option in your query.
> `CONTAINS` operator | This operator relates to word indexing, which the DataServer does not support.
> `COUNT–OF` function | The DataServer does not support this function.
> `CREATE` statement | Records that you create after opening a cursor might be invisible to that cursor.
> `CURRENT–VALUE` statement | The DataServer for ODBC can retrieve `CURRENT–VALUE` if the data source supports the OpenEdge Compatibility dictionary feature.
> `FIND` statements `FOR EACH` statements `OPEN QUERY` statement | To reduce the number of records included in the results set, qualify your `FIND` statements and queries with a `WHERE` clause.
> `MATCHES` function `BEGINS` function | The DataServer does not support using the percent (%) or underscore (_) character with the `MATCHES` and `BEGINS` functions. Do not use these functions with a pattern that is not an expression, but is stored in an ODBC data source. It is theoretically possible to do this with an OpenEdge database, but using this kind of criteria results in poor performance.
> `NO–LOCK` option1 `SHARE–LOCK` option `EXCLUSIVE–LOCK` option | A Progress `EXCLUSIVE-LOCK` is emulated in the ODBC DataServer. A Progress `NO-LOCK` can be emulated in the ODBC database when the isolation level is set to read-uncommitted. `SHARE-LOCK` behavior is data-source and isolation-level dependent. See the "Data-source record locking" section for more information.
> `NULL` | ODBC data source `NULL` = Progress unknown value("?") Progress `NULL` (empty string) = one space in ODBC data source The ODBC data source does not distinguish between a zero-length character string and a string that contains only blank spaces.
> Record creation | In an ODBC data source, a record is created at the end of a record’s scope and not when the required index information becomes available.
> `SETUSERID` function | You cannot use this function to change the login name and password of an ODBC data source.
> For more information, see the "Data-source record locking" section.

Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095