我有一个使用表单的程序。表单指向c:\ filepath1中的文件,如main.prg(set defa,set path)中所述。我制作文件的测试副本,更改main.prg中的路径,表单仍然引用旧路径中的文件。我不想重新创建所有表单中的所有数据环境。我怎么能避免这样做?对此有任何帮助将不胜感激。
大小姐。
答案 0 :(得分:1)
当使用Dataenvironment并且DataEnvironment表中记录的路径存在时,无论当前路径是什么,都使用该路径。如果您根本不想触摸Dataenvironment(甚至是以编程方式),那么您必须删除该路径(例如重命名)。
作为旁注:我有:
UpdateDE(this)
在我的DataEnvironment.BeforeOpenTables方法中。在UpdateDE.prg中,我有代码循环DE中的所有游标,并将其路径设置为我想用作“当前”的游标。
编辑:这是一个示例UpdateDE.prg:
Lparameters toDE
Do setups && prg keeping common "set" entries
Local Array aDEMembers[1]
Local lnMembers,ix,lcMembers
If !(Type('oApp')='O' And !Isnull(m.oApp))
Public oApp
oApp = Createobject('myApp')
Endif
lnMembers = Amembers(aDEMembers,m.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 = 'myDatabase.dbc'
cAppDataPath=Fullpath('data')
cCurPath = ''
Procedure Init
This.cCurPath = Set('path')
If File('dbparam.dbf') && a small dbf that holds path to current data folder
Select dataLoc From dbparam Where locType == 'DATABASE' Into Array arrDataLoc
If _Tally > 0
This.cAppDataPath = arrDataLoc
Set Path To (arrDataLoc[1]+';'+This.cCurPath)
Endif
Use In 'dbparam'
Endif
Endproc
Procedure Destroy
Set Path To (This.cCurPath)
Endproc
Enddefine
答案 1 :(得分:0)
我最终重命名默认路径,然后遍历程序中的所有屏幕,然后重新编译。谢谢您的帮助。我理解它,可能是另一个很好的解决方案。