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.