skip to main content
OpenEdge Data Management: DataServer for ODBC
Programming Considerations : ABL issues : Unsupported ABL statements
 

Unsupported ABL statements

The DataServer supplies you with complete OpenEdge functionality when accessing ODBC data sources. Nearly all ABL 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 UDB 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.
For more information on DBRESTRICTIONS function, see OpenEdge Development: ABL Reference.
The following table summarizes the ABL differences between OpenEdge databases and ODBC data sources.
Table 8. ABL differences for OpenEdge databases and ODBC data sources
OpenEdge feature
ODBC data-source difference
BEGINS operator
Abbreviated Index
USING option
When you use these ABL 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".ABL 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
NEXT-VALUE statement
SET-CURRENT-VALUE statement
DYNAMIC-CURRENT-VALUEstatement
DYNAMIC-NEXT-VALUE statement
The DataServer can only use these features natively at the data source for Sybase and MS SQL Server Version 6.5. Other data sources do not support compatibility with OpenEdge sequence objects. However, you can always use sequences and these corresponding ABL features from an OpenEdge database in conjunction with your DataServer application.
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 option 1
SHARE–LOCK option
EXCLUSIVE–LOCK option
An ABL EXCLUSIVE-LOCK is emulated in the ODBC DataServer. An ABL NO-LOCK can be emulated in the ODBC data source when the isolation level is set to read-uncommitted. SHARE-LOCK behavior is data-source and isolation-level dependent. See Data-source record locking 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.

1 For more information, see Data-source record locking.