Good question why I'm limiting:) A single DBC is just fine for my applications. When multiple they're generally all shared DBCs and need to stay as is (for me). Of course as you said it's open for multiple DBC/path setting. The code I sent is good for my style:)
Probably I was lazy to create a multi version. Since you have multiple version I think you're more eligible to create the FAQ:)
PS: BTW I even didn't update that code yet for the better getpem() vs evaluate().
Cetin
>The same here :)
>
>I don't understand why are you limiting this solution to only one app-path
>or database at the time. Since you already hv global app object, then from within that cursor loop you can call method there passing just name of database and oApp.method can return full path.
>
>This way one form can use more then one databases at the same time and very reliably multiple SETS of databases (multiple companies for instance).
>Whole point is letting oApp decide where each particular database is
>at the time.
>The same oApp method can be used when opening databases/tables via code.
>
>I hv seen/participated menu threads on this subject in past 7-8 years and always advised more less the same aproach. Unfortunately people are still boggled down with this issue, even after 10 years or more of VFP being arround.
>(Recent one message#
1135579)
>
>NOT having this issue effectively resolved can lead to variety of cripling designs, data mix-ups or even loss of valuable data - and consecutively
>bad reputation to VFP.
>
>It wld be maybe good idea having FAQ entry about this.
>
>
>
>
>>This is what I do:
>>
>>*UpdateDE.prg
>>Lparameters toDE,tcAppDb,tcPath
>>Do setups
>>Local Array aDEMembers[1]
>>Local lnMembers,ix,lcMembers
>>if !(Type('oApp')='O' and !IsNull(oApp))
>> 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