Kbase 21616: 4GL. How to convert a ROWID to a RECID and Vice Versa
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  01/07/2008 |
|
Status: Unverified
GOAL:
4GL. How to convert a ROWID to a RECID and Vice Versa
GOAL:
Sample methods to convert a ROWID variable to a RECID variable.
GOAL:
Sample methods to convert a RECID variable to a ROWID variable.
FACT(s) (Environment):
All Supported Operating Systems
FIX:
A. This sample code uses the following algorithm to convert a ROWID variable to a RECID variable:
1. Get the ROWID variable.
2. Get the hexadecimal string representation.
3. Get the integer representation of the RECID.
/******** Convert ROWID to RECID **************/
DEFINE VARIABLE iRecId AS INTEGER NO-UNDO.
DEFINE VARIABLE cRowId AS CHARACTER NO-UNDO.
DEFINE VARIABLE rRowID AS ROWID NO-UNDO.
FIND FIRST customer.
cRowId = STRING(ROWID(customer)).
MESSAGE NAME cRowID
VIEW-AS ALERT-BOX INFO BUTTONS OK.
cRowId = SUBSTRING(cRowId, 3, LENGTH(cRowId)).
RUN HexToInt(INPUT cRowId , OUTPUT iRecId).
FIND FIRST Customer WHERE RECID(Customer) = iRecId.
MESSAGE NAME iRecId
VIEW-AS ALERT-BOX INFO BUTTONS OK.
PROCEDURE HexToInt:
DEFINE INPUT PARAMETER c AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER i AS INTEGER NO-UNDO INITIAL 0.
DEFINE VARIABLE j AS INTEGER NO-UNDO.
c = CAPS(c).
DO j = 1 TO LENGTH(c):
IF CAN-DO("0,1,2,3,4,5,6,7,8,9", (SUBSTRING(c, j, 1))) THEN
i = i + INT(SUBSTRING(c, j, 1)) *
exp(16, (LENGTH(c) - j)).
ELSE
i = i + (KEYCODE(SUBSTRING(c, j, 1)) -
KEYCODE("A") + 10) * EXP(16, (LENGTH(c) - j)).
END.
END PROCEDURE.
B. This sample code uses the following algorithm to convert a RECID variable to a ROWID variable:
1. Get the RECID variable integer representation.
2. Get its equivalent hexadecimal string representation.
3. Get the equivalent ROWID variable.
/************RECID to ROWID Code**************/
DEFINE VARIABLE iRecId AS INTEGER NO-UNDO.
DEFINE VARIABLE cRowId AS CHARACTER NO-UNDO.
DEFINE VARIABLE rRowID AS ROWID NO-UNDO.
FIND FIRST customer.
iRecId = RECID(customer).
MESSAGE NAME iRecId
VIEW-AS ALERT-BOX INFO BUTTONS OK.
RUN IntToHex(INPUT iRecId , OUTPUT cRowId).
rRowId = TO-ROWID(cRowId).
FIND customer WHERE ROWID(Customer) = rRowId.
MESSAGE NAME cRowId
VIEW-AS ALERT-BOX INFO BUTTONS OK.
PROCEDURE IntToHex.
DEFINE INPUT PARAMETER i AS INTEGER NO-UNDO.
DEFINE OUTPUT PARAMETER c AS CHARACTER NO-UNDO.
DEFINE VARIABLE j AS INTEGER NO-UNDO.
DO WHILE TRUE:
j = i MODULO 16.
c = (IF j < 10 THEN STRING(j) ELSE CHR(ASC("A") + j - 10)) + c.
IF i < 16 THEN LEAVE.
i = (i - j) / 16.
END.
j = 8 - LENGTH(c).
DO i = 1 TO j:
c = "0" + c.
END.
c = "0x" + c.
END PROCEDURE.