Consultor Eletrônico



Kbase P170881: Client session dies with error 1101 when attempting to update a field with data > 32K via DataServer
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   8/2/2010
Status: Unverified

SYMPTOM(s):

Client session dies with error 1101 when attempting to update a field with data > 32K via DataServer for MS SQL Server

SYSTEM ERROR: <function-name>: invalid parameter, size=<value>. (1101)

SYSTEM ERROR: bfget: invalid parameter, size=32665. (1101)

Stack trace from PROWIN32 reads:

bfget
odbc_scrlfnd
odblck
fdlck

Locking level is not explicitly declared in the ABL code

Updating records from PROWIN32: /* where bigfield is already 31850 in length */

FIND FIRST myTable.
bigfield = bigfield + FILL("x",1).

FACT(s) (Environment):

Error 12370 is raised when attempting to create a record with > 32K but the client session does not die
Attempt to update <name> record data exceeding <number>. (12370)
Field being updated has the following data type definitions:

Microsoft SQL Server database: VARCHAR(MAX)
Schema holder FOREIGN-TYPE: VARCHAR
OpenEdge: CHARACTER
OpenEdge 10.2x
Windows
MS SQL Server

CAUSE:

Bug# OE00199039

CAUSE:

This error is happening in the OpenEdge client as the result of a lock-upgrade requirement. The application appears to be crashing but actually it is a controlled death. When the ABL client receives a record allocation error from an overflow condition, the 1101 error initiates an automatic shutdown. This is not GPF but does abruptly and immediately terminate the application session in order to avoid data corruption. These are events that are not supposed to occur and when they do, the only proper response is immediate termination.

FIX:

Explicitly set the lock-type on the FIND to avoid lock-upgrades, e.g.

FIND FIRST customer EXCLUSIVE-LOCK.

Instead of:

FIND FIRST customer.

This will ensure that error 12370 is encountered rather than error 1101; error 12370 can be handled with error-handling.