***SomeWhere at begin public oData oData=createobject('redirect_dataenvironment') oData.cRoot='E:\ProdData' **Then in each form DE.beforeOpenTables you simply call oData.form_de(this) &&passing entire DE object as parameter *And tables will be all correctly open. define class redirect_dataenvironment as custom cRoot='' procedure get_database lparameters cDatabaseName do case case upper(cDatabaseName)='PRODSCHD.DBC' return this.cRoot + '\data\ProdSchd.dbc' case upper(cDatabaseName)='SOMEOTHER.DBC' return this.cRoot + '\otherdata\SOMEOTHER.DBC' . . endcase procedure form_de lparameters oDataEnvironment local i,j,db_name,arr_obj(1) amembers(arr_obj,oDataEnvironment,2) for i = 1 to alen(arr_obj) j = oDataEnvironment.&arr_obj(i) .baseclass if upper(alltrim(j)) = 'CURSOR' db_name=upper(justfname(allt(oDataEnvironment.&arr_obj(i) .database ))) oDataEnvironment.&arr_obj(i) .database=this.get_database(allt(db_name)) if !file(oDataEnvironment.&arr_obj(i) .database) messagebox('['+oDataEnvironment.&arr_obj(i) .database+']'+chr(13)+; 'Not found - Check Your blah..blah') endif endif endfor enddefineThis provide you with ;