Class: | _DBC |
Type | Character |
Direction | Input |
Type | Integer |
Direction | Input |
Type | Array |
By reference | |
Direction | Output |
#INCLUDE "dbc.h" SET PROCEDURE TO dbc.prg ADDITIVE LOCAL lcAlias,liIDT,liCount,lii,loDBC LOCAL ARRAY laProps(1) loDBC=CREATEOBJECT("_DBC") lcAlias=SYS(2015) =loDBC.OpenTable(HOME(2)+"\Tastrade\Data\tastrade.dbc",lcAlias,"") * Get field ID liIDT=loDBC.GetIDObject(lcAlias,_DBC_Field,"products.product_id") * Get property list liCount=loDBC.EnumProperty(lcAlias,liIDT,@laProps) FOR lii=1 TO liCount ?laProps(lii,1),loDBC.FormatProperty(laProps(lii,1)),laProps(lii,2) NEXT loDBC.CloseTable(lcAlias) RELEASE loDBC RELEASE PROCEDURE dbc.prg
LPARAMETERS lcAlias,liIDObject,laProp * lcAlias - Alia sof opened DBC * liIDObject - Object ID * @laProp - Output array for Properties and their values EXTERNAL ARRAY laProp LOCAL liStart,liLen,liLenID,lii liStart=1 && First char SELE (lcAlias) && Skip to DBC LOCATE FOR ObjectID=liIDObject && Find object IF !FOUND() && If not found RETURN _DBC_ObjectNotFound && Get out ENDIF lii=0 && Reset counter DO WHILE liStart<=LEN(Property) liLen=This.C4ToI(SUBS(Property,liStart,4)) && Lenght * This is lenght of Property ID liLenID=IIF(This.C2ToI(SUBS(Property,liStart+4,2))>256,2,1) lii=lii+1 && Increment counter DIME laProp(lii,3) * Property ID laProp(lii,1)=IIF(liLenID=1,ASC(SUBS(Property,liStart+4+2,liLenID)),; This.C2ToI(SUBS(Property,liStart+4+2,liLenID))) * Convert DBC value to Value laProp(lii,2)=This.DBCValueToValue(laProp(lii,1),; SUBS(Property,liStart+3+2+liLenID+1,liLen-(3+2+liLenID+1))) liStart=liStart+liLen ENDDO RETURN lii