clear loMyClass=Createobject('myArray') loMyClass.setDimensions(4, 'C(16)') && 4 dimensions and C(16) will be the data type for the value loMyClass.Data['1,1,1,1'] = '[001,001,001,001]' loMyClass.Data['4,2,1,3'] = '[004,002,001,003]' ? loMyClass.Data['1,1,1,1'] ? loMyClass.Data['4,2,1,3'] loMyClass.Data['4,2,1,3'] = '[EMPTY]' ? loMyClass.Data['4,2,1,3'] define class myArray as session DIMENSION Data(1) procedure Data_assign(vNewVal, m.nIndex1) LOCAL lnItem lnItem = this.DimensionsToItem(m.nIndex1) IF INDEXSEEK(PK, .t., 'cData', 'PK') replace Value WITH m.vNewVal IN cData ELSE this.newRow(m.nIndex1, m.vNewVal) ENDIF endfunc procedure Data_Access(m.nIndex1) LOCAL lnItem lnItem = this.DimensionsToItem(m.nIndex1) RETURN IIF(INDEXSEEK(PK, .t., 'cData', 'PK'), cData.Value, null) endfunc PROCEDURE newRow(tcDimensions as String, txValue as Variant) as VOID LOCAL laDimensions(1), lnDimensions, lnDimension lnDimensions = ALINES(laDimensions, tcDimensions, 1, ',') lcCommand = 'INSERT INTO cData (' FOR lnDimension = 1 TO lnDimensions lcCommand = lcCommand + IIF(lnDimension = 1, '', ', ') + 'C' + TRANSFORM(lnDimension, '@L 999') NEXT lnDimension lcCommand = lcCommand + + ', value) values (' FOR lnDimension = 1 TO lnDimensions lcCommand = lcCommand + IIF(lnDimension = 1, '', ', ') + TRANSFORM(laDimensions[lnDimension]) NEXT lnDimension lcCommand = lcCommand + ', ' + TRANSFORM(txValue) + ')' EXECSCRIPT(lcCommand) RETURN null ENDPROC PROCEDURE setDimensions(tnDimensions as Integer, tcValueType as String) as VOID LOCAL lcCommand, lnDimension, lnDimension lcCommand = 'CREATE CURSOR cData (PK I AutoInc' FOR lnDimension = 1 TO tnDimensions lcCommand = lcCommand + ', C' + TRANSFORM(lnDimension, '@L 999') + ' I' NEXT lnDimension lcCommand = lcCommand + ', Value ' + tcValueType + ')' EXECSCRIPT(lcCommand) INDEX on PK TAG PK * Index on every column to speed up access? RETURN NULL ENDFUNC FUNCTION DimensionsToItem(tcDimensions as String) as Integer LOCAL laDimensions(1), lnDimensions, lnDimension lnDimensions = ALINES(laDimensions, tcDimensions, 1, ',') lcCommand = 'LOCATE FOR ' FOR lnDimension = 1 TO lnDimensions lcCommand = lcCommand + IIF(lnDimension = 1, '', ' and ') + 'C' + TRANSFORM(lnDimension, '@L 999') + '=' + TRANSFORM(laDimensions[lnDimension]) NEXT lnDimension EXECSCRIPT(lcCommand) RETURN IIF(FOUND(), cData.PK, - 1) ENDFUNC enddefine