Hi,
One of our customers insists on running our fat client prowin32 as a Microsoft RemoteApp (https://technet.microsoft.com/en-us/library/cc755055.aspx) .
We now encounter an issue that we don't see when we run the same code on the terminal server directly.
Are there known issues with remote apps ? I searched the PKB but didn't find relevant info there.
An issue we encounter is error 17630 when deleting a temp-table record
SYSTEM ERROR: Index T-GRID3 in TGRID for recid <recid> partition <partition> could not be deleted. (17630)
The error is not-fatal, code execution continues but I cannot catch it.
code snippet : T-GRID is a temp-table holding ocx com-handles.
def temp-table T-GRID no-undo
field PROG-HANDLE as widget-handle
field TGRID-IDENT as char
field TGRID-TITLE as char
field TGRID-WIDGET as widget-handle /* rectangle */
field CFGrid as widget-handle
field chCFGrid as component-handle
field TGRID-QUERY as handle
field TGRID-FIELD-UNIEK as log init true
field TGRID-STATIC-COLUMN as log init true
/* grid housekeeping */
field TGRID-NUM-ROWS as int
field TGRID-NUM-COLUMNS as int
field TGRID-ROWS-VAST as int
field TGRID-COLUMNS-VAST as int
/* trigger functionality housekeeping */
field TGRID-LASTPOS as char
field TGRID-LASTPOS-ENABLED as log
/* tree view */
field TREE-VIEW as log init false
index T-GRID1 is unique primary TGRID-WIDGET
index T-GRID2 is unique PROG-HANDLE TGRID-IDENT
index T-GRID3 chCFGrid.
The error occurs in
PROCEDURE DestroyBuffer : def param buffer BT-GRID for T-GRID. delete object BT-GRID.CFGrid. delete BT-GRID. end procedure.
Given that this is a NO-UNDO temp-table, my guess at what is happening here is that there was some other error that caused the AVM to leave a block without doing the indexing. You defined the temp-table as NO-UNDO, meaning changes (even incomplete changes) don't get backed out in the event of undo.This is simple enough to reproduce:
DEF TEMP-TABLE tt1 NO-UNDO
FIELD f1 AS CHAR
FIELD f2 AS CHAR
FIELD f3 AS CHAR
INDEX ix1 IS UNIQUE PRIMARY f1
INDEX ix2 IS UNIQUE f2
INDEX ix3 f3.
DEFINE VARIABLE ictr AS INTEGER NO-UNDO.
DEFINE VARIABLE ival AS INTEGER NO-UNDO.
DO TRANSACTION:
DO ictr = 1 TO 5:
CREATE tt1.
ASSIGN
tt1.f1 = FILL(CHR(64 + ictr),5)
tt1.f2 = tt1.f1.
tt1.f3 = tt1.f2.
IF (ictr = 5) THEN
ASSIGN
tt1.f3 = "Error"
ival = INT("error").
END.
END.
FOR EACH tt1:
DISPLAY tt1.
DELETE tt1.
END.
To resolve this particular error, you need to identify what caused the transaction to terminate while updating the temp-table (specifically, updating the chCFGrid field). The cause of the termination is probably specific to RemoteApp. You might try 4GLTRACE:3,4GLTRANS:3 logging, although it is very verbose.
The alternative is to not declare the temp-table as NO-UNDO, and incur any performance penalties for it. Depending on how intensively this temp-table is used, that performance penalty might be inconsequential.