define class oApp as custom . . . procedure form_de lparameters oDataEnvironment local i,arr_obj(1),oDEO =amembers(arr_obj,oDataEnvironment,2) for i = 1 to alen(arr_obj) oDEO=getpem(oDataEnvironment, arr_obj(i)) if oDEO.BaseClass = 'Cursor' oDEO.database = this.get_database(justfname(oDEO.database)) endif endfor procedure get_database lparameters cDbcNameOnly * * Run time path construction goes here * blah blah * return cFullPathAndDbcName . . . enddefineWill add handling for free tables, and then see
>>>*UpdateDE.prg >>>Lparameters toDE,tcAppDb,tcPath >>>Do setups && contains general "set" like set century on, exact off, ... >>>Local Array aDEMembers[1] >>>Local lnMembers,ix,lcMembers >>>if !(Type('oApp')='O' and !IsNull(oApp)) && in case testing with customer's data >>> public oApp >>> tcAppDb = iif(empty(m.tcAppDb),"mydefault.dbc", m.tcAppDb) >>> tcPath = iif(empty(m.tcPath), "myDefaultDataFolder",m.tcPath) >>> oApp = CreateObject('myApp',m.tcAppDb,m.tcPath) >>>endif >>>lnMembers = Amembers(aDEMembers,toDE,2) >>>For ix=1 To m.lnMembers >>> With Evaluate('toDe.'+aDEMembers[m.ix]) >>> If Lower(.BaseClass) == 'cursor' >>> If Atc(oApp.cAppDBC,.Database) > 0 >>> .Database = Addbs(oApp.cAppDataPath)+oApp.cAppDBC >>> Else >>> .CursorSource = Addbs(oApp.cAppDataPath)+Justfname(.CursorSource) >>> Endif >>> Endif >>> Endwith >>>Endfor >>> >>>Define Class myApp As Custom >>> cAppDBC = '' >>> cAppDataPath='' >>> cCurPath = '' >>> Procedure Init(tcAppDb,tcPath) >>> This.cCurPath = Set('path') >>> This.cAppDataPath = m.tcPath >>> this.cAppDbc = (m.tcAppDb) >>> set Path To (this.cAppDataPath+';'+This.cCurPath) >>> Endproc >>> Procedure Destroy >>> Set Path To (This.cCurPath) >>> Endproc >>>Enddefine >>> >>>* And I have this in DE.BeforeOpenTables >>>UpdateDe(this) >>>Cetin