WAIT WINDOW guid2(1) WAIT WINDOW guid2(2) WAIT WINDOW guid2(3) proc guid2 lPARAMETERS xform IF EMPTY(m.xform) xform=1 ENDIF Local loGUID, lcGUID, lcGUID16 loGUID = Createobject('GUIDLib') lcGUID = loGUID.GetGUID() lcGUID16 = loGUID.GUID2Str(lcGUID) DO CASE CASE m.xform=1 RETURN lcGUID CASE m.xform=2 RETURN loGUID.Str2Guid(lcGUID16) OTHERWISE RETURN lcGUID16 ENDCASE Define Class GUIDLib As Relation Procedure Init Declare Integer UuidCreate In 'RPCRT4.dll' String @pguid Declare Integer CoCreateGuid In 'Ole32.dll' ; string @pguid Declare Integer StringFromGUID2 In 'Ole32.dll' ; string rguid, String @lpsz, Integer cchMax Declare RtlMoveMemory In WIN32API ; INTEGER @DestNumeric, ; STRING @pVoidSource, ; INTEGER nLength Endproc Procedure GetGUID Local pguid,rguid,lcFail lcFail = "" pguid=Replicate(Chr(0),16) rguid=Replicate(Chr(0),80) If Inlist(UuidCreate(@pguid),0,1824) && 1824 = LOCAL_ONLY Return Iif(StringFromGUID2(pguid,@rguid,40) # 0, ; Strconv(Left(rguid,76),6), lcFail) Endif Return lcFail Endproc Procedure GUID2Str Lparameters tcGUID Local lcGUID, lcGUID2, ix lcGUID = Chrtran(tcGUID, '{}-','') lcGUID2 = '' For ix=16 To 1 Step -1 lcGUID2 = lcGUID2 + Chr(; Evaluate('0x'+Substr(lcGUID, (ix-1) * 2 + 1, 2))) Endfor Return lcGUID2 Endproc Procedure Str2Guid Lparameters tc16Bytes Local lcGUID, ix, lnValue lnValue = 0 lcGUID = '' For ix=4 To 1 Step -1 RtlMoveMemory(@lnValue, ; Substr(tc16Bytes, (ix-1)*4+1, 4), 4) lcGUID = lcGUID + ; Substr(Transform(lnValue, '@0'),3) Endfor Return Transform(lcGUID, ; "@R XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX") Endproc Enddefine>Hi at all,