Consultor Eletrônico



Kbase P106072: WHERE clause for Dynamic find on ProDataSet member buffer may refer to wrong buffer
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   9/13/2006
Status: Unverified

FACT(s) (Environment):

OpenEdge 10.0x

SYMPTOM(s):

Dynamic find refers to wrong buffer

FIND-FIRST() and FIND-LAST() methods return expected records

FIND-UNIQUE() method results in errors

The following errors may occur:

** No <file-name> record is available. (91)

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

More than one <table> records found by a unique FIND. (3166)

Buffer is part of a ProDataSet

ProDataSet contains multiple buffers that have field names in common

WHERE clause for dynamic find includes field name that appears in two or more buffers in ProDataSet

Field name in WHERE clause is not qualified with buffer name

CAUSE:

Bug# 20050706-005

CAUSE:

To make dynamic coding on ProDataSets easier, a new feature was implemented that allows any WHERE clause on a ProDataSet buffer to refer to any buffer in that ProDataSet directly. This allows for easier and more efficient coding as one no longer needs to extract field values from a parent record, convert them into strings and add those to the predicate string used for dynamic queries and/or dynamic finds.

As a side effect, the way unqualified field names are handled changes when a buffer is part of a ProDataSet. While the predicate is being processed, the field name will be resolved against the first buffer in the ProDataSet where that name is found.

For a dynamic find, which is a single buffer operation, this behavior can be very unintuitive.

FIX:

Upgrade to 10.1A or later release

Workaround:
Ensure the field names are always qualified with the buffer name