Kbase P19153: How to trap for record uniqueness violation in a dynamic TEM
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  2/11/2003 |
|
Status: Unverified
GOAL:
How to trap for record uniqueness violation in a dynamic TEMP-TABLE before the CREATE BUFFER statement?
FIX:
/*** The following code creates a dynamic temp-table object and populates it randomly with the letters A-Z and their corresponding ASCII values. The code checks if a record is already in the table before creating the new record ***/
DEFINE VARIABLE httHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE hbttHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE hField1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hField2 AS HANDLE NO-UNDO.
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE iRandom AS INTEGER NO-UNDO.
DEFINE VARIABLE lCanFind AS LOGICAL NO-UNDO.
DEFINE VARIABLE lLogical AS LOGICAL NO-UNDO.
/*** Create a temp table and populate it with unique letter values ***/
CREATE TEMP-TABLE httHandle.
ASSIGN
lLogical = httHandle :ADD-NEW-FIELD( "Field1" , "INTEGER" )
lLogical = httHandle:ADD-NEW-FIELD( "Field2" , "CHARACTER" )
lLogical = httHandle:ADD-NEW-INDEX( "myIndex", TRUE, TRUE)
lLogical = httHandle:ADD-INDEX-FIELD("myIndex","Field1", "asc").
ASSIGN
lLogical = httHandle:TEMP-TABLE-PREPARE("myTempTable").
ASSIGN
hbttHandle = httHandle:DEFAULT-BUFFER-HANDLE
hField1 = hbttHandle:BUFFER-FIELD("Field1")
hField2 = hbttHandle:BUFFER-FIELD("Field2").
DO iCounter = 1 TO 1000:
iRandom = RANDOM(65,90).
/*** Check if this value is already in the table ***/
RUN CanFind (INPUT iRandom, OUTPUT lCanFind).
IF lCanFind THEN NEXT.
DO:
hbttHandle:BUFFER-CREATE.
ASSIGN
hField1 = hbttHandle:BUFFER-FIELD("Field1")
hField2 = hbttHandle:BUFFER-FIELD("Field2")
hField1:BUFFER-VALUE = iRandom
hField2:BUFFER-VALUE = CHR(iRandom).
DISPLAY iRandom hField1:BUFFER-VALUE LABEL "Field1" hField2:BUFFER-VALUE LABEL "Field2" WITH DOWN FRAME a.
DOWN WITH FRAME a.
hbttHandle:BUFFER-RELEASE().
END.
END.
DELETE OBJECT httHandle.
PROCEDURE CanFind:
DEFINE INPUT PARAMETER iParameter AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER lParameter AS LOGICAL NO-UNDO.
DEFINE VARIABLE hqHandle AS HANDLE NO-UNDO.
CREATE QUERY hqHandle.
hqHandle:SET-BUFFERS(hbttHandle).
hqHandle:QUERY-PREPARE("for each myTempTable where field1 = " + STRING (iParameter)).
hqHandle:QUERY-OPEN.
lParameter = (hqHandle:GET-FIRST).
DELETE OBJECT hqHandle.
END.