2017-03-29 50 views
0

我有一個使用表單的程序。這些表單指向main.prg(set defa,set path)中設置的c:\ filepath1中的文件。我製作了這些文件的測試副本,在main.prg中更改路徑,這些表單仍然引用舊路徑中的文件。我不想重新創建所有表單中的所有數據環境。我怎樣才能避免這樣做?任何幫助,將不勝感激。更新程序目錄

大小姐。

回答

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 
+0

切廷 - 你當然愛福克斯:) – Missy

+0

雖然我也與其他語言一起工作,但是我確實:)順便說一句,我通過編程方式向所有窗體添加這樣的東西。如果你需要它通知我。 –

0

我結束了重命名,則默認路徑通過所有的屏幕會在程序然後重新編譯。感謝您的幫助。我確實瞭解它,可能是另一個好的解決方案。