全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:944
推到 Plurk!
推到 Facebook!

如何把uses的物件恢復預設值?

尚未結案
hznhzn
一般會員


發表:5
回覆:3
積分:1
註冊:2005-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-26 09:41:12 IP:210.202.xxx.xxx 未訂閱
我的問題是這樣的.. Dm.pas中放了許多的BDE控件的Table元件,和DataAccess控件的DataSource元件, 我的form1和form2各別都有uses dm ,不過如果form1先使用(新增,刪除,查詢)Dm ,但form1 close 後, form2再去使用dm時會有問題,之後把程式關掉再開起來,先執行form2..就不會有問題了,...不過如果先使用form2時form1也會出現問題,出現的問題不是會出現什麼錯誤訊息, 而是資料明明是正確的但不能新增或刪除,不知有沒有法可以可當form1 close時 醬dm中的資料清空呢?... 如果form1做成執行檔form2也做成執行檔是不會有這個問題的.. 如果form1和form2存成一個project做成一個執行檔,就會有上述的問題.. 以上就是我的問題...^_^
lesae
一般會員


發表:1
回覆:11
積分:17
註冊:2003-07-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-26 11:36:06 IP:211.72.xxx.xxx 未訂閱
不好意思 可以麻煩您將程式碼po一下嗎 偶試著造您講的方式測嚕一下發現沒這個問題ㄝ 人心惟微,道心惟危,惟精唯一,允執厥中。 新手上路,請各位前輩多多指導。
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-26 12:17:38 IP:61.218.xxx.xxx 未訂閱
我想您的兩隻程式應該是共用同一個 DataModule 所致, 你可以試試看以下的寫法 ,在程式中 DataModule 不要由 Project 自動建立 , 改由程式中自己去寫 Code 建立 , 一般你可以寫在 Form.onCreate 的事件中 , 而 Form 上面有用 到 DataModule 中的 Datasource 或者是 Dataset 物件時 , 必須要重新指定    
Type
  TForm1= class( TFrom )
  private
    FModule : TDataModule ;
  .....      procedure TForm1.FormCreate(Sender: TObject);
begin
  FModule := TTestDataModule.Create( Self ) ;
  
  DBGrid.DataSource := ( FModule as TTestDataModule ).datasource1 ;
end ;
大概是類似的處理 , 提供給您參考看看囉
zch2002115
一般會員


發表:24
回覆:15
積分:7
註冊:2004-11-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-26 13:08:05 IP:211.96.xxx.xxx 未訂閱
dm 中的一句控件不要,被不同的 form 聯接,如果一個控件可以搞定多個form,那我們就沒必要。。。。。。。。        我的小小建議!!!!
zch2002115
一般會員


發表:24
回覆:15
積分:7
註冊:2004-11-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-26 13:21:07 IP:211.96.xxx.xxx 未訂閱
或許,我表達的意思,不是很明確。我的意思是dm 中的某個控件要針對一個表 而不是 多個表的 新增刪除等操作。 試一試吧!!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-27 10:46:31 IP:220.135.xxx.xxx 未訂閱
Hi hznhzn 你好: 一個建議, DM裡面放DataBase, Form裡面放自己要用的DataSet, DataSet再連到DM的DataBase.讓各個Form裡面的DataSet獨立來試試看. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
hznhzn
一般會員


發表:5
回覆:3
積分:1
註冊:2005-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-27 23:41:42 IP:218.172.xxx.xxx 未訂閱
Dear all :   首謝謝各位提供這些方法,真是太感動了...不過由於程式還uses了許多的function 所以 貼出來可能太長了,所以就沒po出來囉,其實我也有想說將一個表用一個Dataset或DM中放Database, form中放Dataset.但"源碼"是別人寫的..哈哈..我只是派來改寫的初學者,原先的那個前輩寫法是.. 一個form就是一個Project 一個exe檔, 然後再用一個Mainform 把這些exe檔連結起來做成api介面, 上頭是要我把這些眾多的Project 整合起來成為一個Project,最後make成一個exe檔....所以才有問題發生囉...不然本來每個exe都是能正常執行的... 再舉個例好了
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-28 09:25:27 IP:220.135.xxx.xxx 未訂閱
Hi hznhzn 你好: 我的想法是程式裡面可能有地方沒控制好, 這就要Debug來修正錯誤, 不過沒有程式有時很難抓只能猜想, 另一個建議是若架構有問題真的要一歩一歩慢慢修正, 根據小弟粗淺的經驗, 維護別人的程式要將他修改能動沒什麼問題, 問題在於後續若要在系統上加新功能會受限很多, 先找出之前撰寫程式的人員請教, 再透過重構(Refactoring)來修正, 順便增加一下自己的功力. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
zch2002115
一般會員


發表:24
回覆:15
積分:7
註冊:2004-11-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-01-28 12:40:12 IP:211.96.xxx.xxx 未訂閱
若DataSet是Adoquery的話,
 With Adoquery1 do 
 begin
    close;
    sql.clear;
    sql.text:='select * from table.name';
    open;
 end;
或者上面的紅色代碼能幫你清除以前的SQL語句。
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-02-16 14:34:45 IP:220.130.xxx.xxx 未訂閱
以物件導向來看, 當你說資料會殘留, 表示你使用了同一個物件。 看起來DM.PAS中含有一個物件。 而在interface段, 系統也宣告了一個var dm的Public變數, 且你在form1, form2都同時使用了這個Public vaiable。 我的做法通常是在form1, form2各宣告一個變數, 而這個變數都是DM.pas裡頭定義的這個物件, 那麼這二個變數便不會有你提出的這個問題。
系統時間:2024-11-22 11:41:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!