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

uese 無效???

尚未結案
cxh17895
初階會員


發表:13
回覆:37
積分:25
註冊:2003-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-24 09:24:32 IP:61.223.xxx.xxx 未訂閱
請問各位大大, 在delphi 中,在uses 指令,可以存取他form 的物件資源, 可是,不知道去用到什麼指令或設定,下了uses指令,也一樣無法存取他form 的資源?? 以下指令,是原先可以正常的...    ex:    implementation      uses STChgWork;   //有下uses  . [略] . .  with  F_STCHGWORK do  begin      st_cn_uniserial := VacationQRY.FieldValues['cn_uniserial'];  end    //------錯誤訊息如下----他是說 違規存取....     發表人 - cxh17895 於 2005/07/24 12:18:35
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-24 11:42:15 IP:222.35.xxx.xxx 未訂閱
你可以把錯誤信息貼上來看一下。我貼一個例子您可以參考一下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin WITH FORM2 DO BEIGN Query1.CLOSE; Query1.SQL.ADD('...'); Query1.OPEN; END; end; end.
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-24 15:32:40 IP:222.248.xxx.xxx 未訂閱
您不要用With...do開域 而直接改用: st_cn_uniserial := F_STCHGWORK.VacationQRY.FieldValues['cn_uniserial']; 試試看還會不會出現錯誤。
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
cxg
中階會員


發表:116
回覆:192
積分:76
註冊:2004-02-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-24 15:41:05 IP:222.35.xxx.xxx 未訂閱
VacationQRY是你定义的一个变量把,是不是他没有创建呢。 ... VacationQRY := TQUERY.CREATE( SELF); ... 或者是不是F_STCHGWORK窗体没有创建呢?你可以检查一下。
cxh17895
初階會員


發表:13
回覆:37
積分:25
註冊:2003-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-24 20:04:57 IP:61.223.xxx.xxx 未訂閱
回應h@visli  st_cn_uniserial := F_STCHGWORK.VacationQRY.FieldValues['cn_uniserial']; 一樣失敗...    回應 cxg --- F_STCHGWORK 窗体有创建,因為呼叫,這支程式是由F_STCHGWORK呼叫,不可能沒創建.. 且VacationQRY是實體,並不是動態變量...    語法如下:    Procedure TF_STCHGWORK.STUchgWork (input :string); var F_STCHGWORK : TF_STCHGWORK; begin        F_STCHGWORK := TF_STCHGWORK.Create(nil);   //重建 動態FORM        try        F_STCHGWORK.stno := input;        F_STCHGWORK.ShowModal;        FINALLY           F_STCHGWORK.Release;     end;    end;    //-- 我也自己又開了一個ap來測式互相存取...可以耶... 真不知道是那裡有問題..  發表人 -
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-24 21:51:33 IP:222.248.xxx.xxx 未訂閱
我開始還以為您的F_STCHGWORK是個靜態創建的窗體。    原來您在with F_STCHGWORK do裡引用的F_STCHGWORK,是在 Procedure TF_STCHGWORK.STUchgWork (input :string); var F_STCHGWORK : TF_STCHGWORK; 裡定義的?    這裡的F_STCHGWORK是屬於STUchgWork這個Procedure的,您要在窗體的Form中引用它是不用的。但您可以試試把F_STCHGWORK放到 TF_STCHGWORK的public區域來申明定義:    private { Private declarations } public { Public declarations }   F_STCHGWORK : TF_STCHGWORK;   end;    我沒有試過,不知道行不行 < >< >< >< >
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-25 08:51:05 IP:203.69.xxx.xxx 未訂閱
1. 把 var F_STCHGWORK : TF_STCHGWORK; 移到 STChgWork.pas 的 Implementation 前面 2.叫出 Project-->Options 在 Forms 那一頁 F_STCHGWORK 由 Auto-create forms 區 移到 Available forms 區 步驟1 是將 F_STCHGWORK 讓有 uses STChgWork 的 unit 都可以引用他 步驟2 是 請 Delphi 不要安插 Create F_STCHGWORK 的程式碼, 而自行決定 F_STCHGWORK 的 Create 及 Destory 時機 產生錯誤的原因 確實是 如 cxg 所說 F_STCHGWORK 沒有创建, 因為ShowModal 後 F_STCHGWORK 就被你 Release 掉了.
cxh17895
初階會員


發表:13
回覆:37
積分:25
註冊:2003-03-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-27 06:32:13 IP:210.68.xxx.xxx 未訂閱
回應h@visli -------- 這裡的F_STCHGWORK是屬於STUchgWork這個Procedure的,您要在窗體的Form中引用它是不用的。但您可以試試把F_STCHGWORK放到 TF_STCHGWORK的public區域來申明定義: 結果是一樣失效... ----------------- 回應malanlk 1. 把 var F_STCHGWORK : TF_STCHGWORK; 移到 STChgWork.pas 的 Implementation 前面 結果 在程式中 F_STCHGWORK : TF_STCHGWORK; 其實就自動設定 Implementation 前面了,所以也不用設定,我也有改名稱試試,一樣沒有作用! 再來就是... 產生錯誤的原因 確實是 如 cxg 所說 F_STCHGWORK 沒有创建, 因為ShowModal 後 F_STCHGWORK 就被你 Release 掉了. 程式碼中,是如此寫 try F_STCHGWORK.stno := input; F_STCHGWORK.ShowModal; FINALLY F_STCHGWORK.Release; end; 我是用showmodal 也就是獨佔視窗,在未結束前,跟本不會Release掉,也就是沒有大大上面所說的問題,被Release 掉了, //------- 試了幾天,有了一些心得 當叫出 Project-->Options 在 Forms 那一頁 F_STCHGWORK 由Available forms 區 移到Auto-create forms 區,程式碼又可以正常了, 不知要如何處理這種疑問?? 這個問題,小弟以經用另外一種寫法處理掉了,基本上,已解決,但是,本討論串的疑問(就是動態form為何無法順利存取.... )還是存在的...
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-27 08:04:27 IP:203.69.xxx.xxx 未訂閱
到目前為止還是沒看出你程式的架構, 方便把程式 mail 給我看或是貼出來嗎?(只要 .pas 及 .dpr 就可以了) 不然猜來猜去又試來試去浪費時間....
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-07-27 09:05:44 IP:211.22.xxx.xxx 未訂閱
當你將 Form 由 Auto-create forms 區 移到 Available forms 區後,  這個 Form 就必須手動 Create 處理.    請將程式做調整.    
with F_STCHGWORK do
begin
  //... 略 ...
end;
改成
F_STCHGWORK := TF_STCHGWORK.Create(self);
try
  with F_STCHGWORK do
  begin
    //... 略 ...
  end;
finally
  F_STCHGWORK.Free;
end;
雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-07-27 09:25:43 IP:203.69.xxx.xxx 未訂閱
又在猜了, 樓上的大大, 如果 cxh17895 是在 F_STCHGWORK ShowModal 當中再去執行你改的程式碼, 就是災難了........ 發表人 - malanlk 於 2005/07/27 09:27:27
cxh17895
初階會員


發表:13
回覆:37
積分:25
註冊:2003-03-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-07-27 09:58:54 IP:210.68.xxx.xxx 未訂閱
各位大大,我大概知道問題點了..    示範程式在此 http://delphi.ktop.com.tw/loadfile.php?TOPICID=23688479&CC=529781 接下來是的,分數要給誰?給分數較低的人好了...有沒有問題? 發表人 - cxh17895 於 2005/07/27 10:10:09
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-07-27 11:18:17 IP:203.69.xxx.xxx 未訂閱
濃霧終於散去.... 可是你還是搞錯了...... 請你將 你放上去的程式
procedure TForm1.Button1Click(Sender: TObject);
begin
  //Form2.CallForm2;
  newForm2.CallForm2;
end;    var
  //Form2: TForm2;
  newForm2 : TForm2; 
implementation    
你就會知道, 錯是錯在 Unit1 沒有呼叫對的物件 你原來的圖是對的 傷腦筋, 分數你喜歡給誰就給誰... 我只在乎分數要給出來
系統時間:2024-04-26 6:22:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!