MDI程式,不同FORM取得QUERY之值 |
答題得分者是:ccchen
|
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
您好...
我確實已在form1的interface uses了form 2
而在form 2的implementation uses了 form 1
且兩個皆有usesdb,adodb
但是當在form 2下如下的指令時
"if form1.Qry1.State=dsBrowse then"
或是 SS:=form1.Qry1.FIELD[0].VALUE時
就會出現
Access violation at address 005C2BA5 in module 'xxx.exe' Read of
Address 00000358
的錯誤訊息
不知該如何解決是好呢???
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
看起來是form1這個變數是nil, debug時用inspect看看 看看你的Form1是如何Create的 你在Design Time中完成TForm1之設計,Tform1是一個class, Form1則只一個Global變數,必須Create後才可存取
例如假設你的form不是autocreate, 是在mainform上的menuclick時create如下
procedure xxxxx.menuclick(Sender:object) var form1:TForm1; begin form1:=TForm1.create(self); form1.show; ... end;如此global 參數之form1並未被create,當然就錯了 未看到source只是猜猜 |
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
|
a6475
高階會員 發表:67 回覆:230 積分:154 註冊:2002-09-15 發送簡訊給我 |
procedure TForm1.callform(fname: TClass); var ICont: Integer; Form: TForm; begin Form := nil; for ICont := 0 to Form1.MDIChildCount - 1 do if MDIChildren[ICont].ClassName = fname.ClassName then begin ShowMessage('form3已開啟!'); Form3 := Tform3.Create(Self); if Form3.ADOQuery1.State = dsBrowse then begin ShowMessage('fomr3之query在瀏覽!'); Form := MDIChildren[ICONT]; Form.BringToFront; Form.WindowState := wsMaximized; end; end; if form = nil then begin ShowMessage('form3未開啟'); end;加入紅色地方即沒有問題。 我看了一下你開啟視窗的函數,雖然有開啟 但是Form3變數並沒有放入TForm3的內容 所以Form3.ADOQuery1.State 對程式來講是 空的。 ..-----------βλμε------------.. ◎Oo月夜 光明 藍更愁oO◎ 藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475
------
月夜 光明 藍更愁 |
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
引言:a6475兄您好 如以您的寫法是不會有錯誤訊息,但如此一來... Form3會不斷的開啟... 與我原先的設計就相衝突了(Form3只能開啟一次) 不知是否有解決之道.....procedure TForm1.callform(fname: TClass); var ICont: Integer; Form: TForm; begin Form := nil; for ICont := 0 to Form1.MDIChildCount - 1 do if MDIChildren[ICont].ClassName = fname.ClassName then begin ShowMessage('form3已開啟!'); Form3 := Tform3.Create(Self); if Form3.ADOQuery1.State = dsBrowse then begin ShowMessage('fomr3之query在瀏覽!'); Form := MDIChildren[ICONT]; Form.BringToFront; Form.WindowState := wsMaximized; end; end; if form = nil then begin ShowMessage('form3未開啟'); end;加入紅色地方即沒有問題。 我看了一下你開啟視窗的函數,雖然有開啟 但是Form3變數並沒有放入TForm3的內容 所以Form3.ADOQuery1.State 對程式來講是 空的。 |
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
謝謝大家的幫忙...
小弟已經找到解決的方法了...
雖然沒有人給最完整的答案...
但由各位前輩的提示中...
小弟大概知道問題應該是出在doform那個程序中未正確指定global 參數的原因
由各位前輩的回答,應該是ccchen前輩最先指出這項問題的...
因此將答題得分指定給ccchen前輩...
也感謝其他襏冗回答小弟問題的前輩...由衷感激!
另外~因為小弟不會指定如何動態將form2的參數傳入doform這個程序..
不知道是否有那位前輩可以指點一下~將doform這個程序改寫成可以傳遞form2參數呢?謝謝!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |