Kbase P141520: findRowWhere function returns True when the record does not exist
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  18/03/2009 |
|
Status: Unverified
SYMPTOM(s):
A SDO using findRowWhere function on an AppServer returns true all the time
Wrong result when "Rebuild Dataset on Reposition" field is checked in the SDO
FACT(s) (Environment):
All Supported Operating Systems
OpenEdge 10.1B
OpenEdge 10.1C
CAUSE:
Bug# OE00180817
CAUSE:
The bug was caused by the fact that the replace was not done for this failing case on server. (The replaced QueryRowident property is still is in use, so it is not possible to see that this is wrong)
FIX:
To fix this issue:
The best way to workaround this is to change adm2/data.p directly. (and ensure that it is compiled into gui and tty).
1. In sendRows replace the set of QueryRowident with PositionForClient, look for this line:
----------------
/* Tell clientSendRows to not position */
{set QueryRowident ?}.
---------------
Change to:
---------------
/* Tell clientSendRows to not position */
{set PositionForClient ?}.
---------------
2. In clientSendRows ensure that the property is set to unknown before the call to the server
Look for these lines:
--------------
IF NOT lInitRowObject THEN
hDataContainer = {fn dataContainerHandle}.
/* If this object is in a container with its own AppServer Handle,
then we run fetchContainedRows in that in order to retrieve this objects
data together with all child objects data. */
--------------
Insert the set as follows:
--------------
IF NOT lInitRowObject THEN
hDataContainer = {fn dataContainerHandle}.
{set PositionForClient ?}.
/* If this object is in a container with its own AppServer Handle,
then we run fetchContainedRows in that in order to retrieve this objects
data together with all child objects data. */
---------------