線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1153
推到 Plurk!
推到 Facebook!

MDI程式,不同FORM取得QUERY之值

答題得分者是:ccchen
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-02 23:59:57 IP:211.74.xxx.xxx 未訂閱
大家好 小弟做了一個MDI的程式,現於到一個問題想請教大家 假設有兩個FORM,FOMR 1有一個ADOQUERY1 若是要在FORM2 中取得 ADOQUERY1的狀態或是值該怎麼取得呢? 小弟已經有在FOMR2中USE FORM 1了 可是每次在FORM2中下取得的指令時,都會產生錯誤~ 請知道的先進能回答一下,謝謝!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-03 08:57:48 IP:210.61.xxx.xxx 未訂閱
一般來說form2 uses form1之後應該可以用 form1.adoquery1.xxxxx 來取得 若是一些使用adoquery1的一些const需uses db,adodb 不過由上面的述說還看不出問題在哪裡 能否說的更清楚些 或是貼上您的程式碼 我們大家幫您看看
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-03 22:55:05 IP:211.74.xxx.xxx 未訂閱
您好... 我確實已在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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-04 10:12:14 IP:210.61.xxx.xxx 未訂閱
>"if form1.Qry1.State=dsBrowse then" >或是 SS:=form1.Qry1.FIELD[0].VALUE時 這一段表面看來沒有問題 Qry1的SQLText不知您是否有指定 Qry1的ConnectionString是否有指定? Qry1是動態建立的還是直接置放在Form1上? 或許嚐試用Trace Into看看Error point在那裡?
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-04 17:59:31 IP:211.74.xxx.xxx 未訂閱
QRY1是已經OPEN且取得資料了... 在該FORM使用正常.. 就是從其他FORM去擷取他的狀態資料時都會出錯誤... 用TRACE看~~ERR就是在那個條件...
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-05 09:04:25 IP:210.61.xxx.xxx 未訂閱
您好 不知道問題是否解決呢? 您是單純的環境呢? 還是有引用其它元件? (我在懷疑是否有其它因素) 還是您可以把source upload到ktop 我下載來幫您trace看看問題出在那裡
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-05 09:04:26 IP:218.163.xxx.xxx 未訂閱
看起來是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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-05 21:02:17 IP:210.66.xxx.xxx 未訂閱
兩位前輩好...小弟已將程式上傳至 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41702 請兩位前輩可以參考一下! 錯誤就發生在form2 button1 按下時去判斷form3 之 adoquery狀態時產生的! to ccchen版主... 我的form不是autocreate, 是在mainform上的menuclick時create 謝謝您!
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-05 23:47:26 IP:61.229.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-06 00:21:18 IP:210.66.xxx.xxx 未訂閱
引言:
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 對程式來講是 空的。
a6475兄您好 如以您的寫法是不會有錯誤訊息,但如此一來... Form3會不斷的開啟... 與我原先的設計就相衝突了(Form3只能開啟一次) 不知是否有解決之道.....
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-07 01:50:46 IP:203.67.xxx.xxx 未訂閱
謝謝大家的幫忙... 小弟已經找到解決的方法了... 雖然沒有人給最完整的答案... 但由各位前輩的提示中... 小弟大概知道問題應該是出在doform那個程序中未正確指定global 參數的原因 由各位前輩的回答,應該是ccchen前輩最先指出這項問題的... 因此將答題得分指定給ccchen前輩... 也感謝其他襏冗回答小弟問題的前輩...由衷感激! 另外~因為小弟不會指定如何動態將form2的參數傳入doform這個程序.. 不知道是否有那位前輩可以指點一下~將doform這個程序改寫成可以傳遞form2參數呢?謝謝!
系統時間:2024-06-26 23:29:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!