Consultor Eletrônico



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.