更新程序的目录

时间:2017-03-29 18:24:07

标签: visual-foxpro

我有一个使用表单的程序。表单指向c:\ filepath1中的文件,如main.prg(set defa,set path)中所述。我制作文件的测试副本,更改main.prg中的路径,表单仍然引用旧路径中的文件。我不想重新创建所有表单中的所有数据环境。我怎么能避免这样做?对此有任何帮助将不胜感激。

大小姐。

2 个答案:

答案 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)

我最终重命名默认路径,然后遍历程序中的所有屏幕,然后重新编译。谢谢您的帮助。我理解它,可能是另一个很好的解决方案。