Consultor Eletrônico



Kbase P143557: 4GL/ABL: Error (138) executing a FIND-UNIQUE method, the CAN-FIND function or the unique FIND statem
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/17/2011
Status: Verified

SYMPTOM(s):

** <file-name> record not on file. (138)

UTF-8 database and client codepages

4GL/ABL: Error (138) executing a FIND-UNIQUE method, a CAN-FIND function or a unique FIND statement against a UTF-8 database.

Executing a FIND-UNIQUE method, a CAN-FIND function or a unique FIND statement against a UTF-8 database using non-default ICU collation fails with error (138) if the WHERE option uses BEGINS operator.

Using a non-default ICU collation. For example: ICU-UCA or ICU-de__PHONEBOOK.

The FIND-UNIQUE method generates error (138) executing code similar to the following against a UTF-8 database with ICU-UCA collation:
DEFINE VARIABLE hTableBuffer AS HANDLE NO-UNDO.
ASSIGN
hTableBuffer = BUFFER prospect:HANDLE
hTableBuffer:FIND-UNIQUE("WHERE prospect.name BEGINS 'Pei'", NO-LOCK).

The unique FIND statement generates error (138) executing code similar to the following against a UTF-8 database with ICU-UCA collation:
FIND prospect WHERE prospect.name BEGINS 'Pei' NO-LOCK.

** prospect record not on file. (138)

** <file-name> record not on file. (138)

FACT(s) (Environment):

The record fetched by the FIND-UNIQUE method and unique FIND statement in the above code snippets exist and is unique.
Both the above FIND-UNIQUE method and the above unique FIND statement succeed against the same UTF-8 database when using default collation.
OpenEdge 10.1x
OpenEdge 10.2A
OpenEdge 10.2B
All Supported Operating Systems

CAUSE:

Bug# OE00127396

CAUSE:

An indexed search using BEGINS does not handle the multi-level sort keys generated by the ICU collations properly.

FIX:

Upgrade to OpenEdge 10.2B03 or later

After upgrading, the fix must be activated by adding the startup parameter "-icubegins 1" to the client startup parameters.