工程源码中的一段错误 |
答題得分者是:malanlk
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
var
bConnectOk: Boolean;
begin
Application.Initialize;
Application.CreateForm(TDataModuleform, DataModuleform);
Application.CreateForm(Tzjmform, zjmform);
Application.CreateForm(TLogoinForm, LogoinForm);
sqlsetupform := Tsqlsetupform.Create(Application);
try
if not sqlsetupform.CheckSetupDataOk then
begin
sqlsetupform.ShowModal;
bConnectOk := sqlsetupform.ConnectionTestOk;
end
else
begin
bconnectok:=true;
end;
finally
sqlsetupform.Free;
end;
if bConnectOk then
begin
Application.Run;
end;
end.
有一个很小但也不容忽视的错误,在SQLSETUPFORM显示后,如果不做任何操作就关闭窗口(代码为:FConnectionTestOk := False; close;)那么代码一步一步执行都不会有错误提示,只是到了上面代码中的最后一个end.后就跳出如图错误:
如果Application.Run后就不会有错,如果不能run而跳到end.后就出错。出错后还会引起系统死机,不断要求发送错误报告。
------
我的编程起步于ktop,我将永远支持ktop |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
引言:前辈我也是这么想过的,试了一下,不知道什么原因Application.Terminate,这一行代码也会执行的,也不会错,跳到END后,再下一步就错了,但如果是从RUN跳到END后,再下一步就不会错。 (就说明end下一步应该不会有什么错,而是在这段代码本身有什么问题?) 發表人 - ntjrr 於 2005/09/04 12:02:20..... if bConnectOk then begin Application.Run; end else begin Application.Terminate; //加上這個敘述呢? end; end.---------------------------------------------- We will either find a way, or make one. -Hannibal -。
------
我的编程起步于ktop,我将永远支持ktop |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
if bConnectOk then begin Application.Run; end else DataModuleform.Free;改成這樣看看. 應該是 ADO 物件釋放不同步造成的...這是我的推測, 主程式(Application)結束時, 對ADO 物件下達釋放令, 同時也結束自己, 而 ADO 釋放成功要回報給 Application 卻找不到 Application 了.... 所以加 DataModuleform.Free 先自行釋放, 再結束 Application. |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
引言:我匆忙试了一下好象也不行,我晚上再细测。if bConnectOk then begin Application.Run; end else DataModuleform.Free;改成這樣看看. 應該是 ADO 物件釋放不同步造成的...這是我的推測, 主程式(Application)結束時, 對ADO 物件下達釋放令, 同時也結束自己, 而 ADO 釋放成功要回報給 Application 卻找不到 Application 了.... 所以加 DataModuleform.Free 先自行釋放, 再結束 Application.
------
我的编程起步于ktop,我将永远支持ktop |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
malanlk前辈,您的判断没错,我试用了如下方法,在开始自动创建几个窗口,在下面的ELSE中就FREE几个窗口,结果就没错误提示了。我的大部分窗口中都用了ADOTABLE或者ADOQUERY,那么我该如何处理合适呢?一个一个FREE?
前辈,对这个问题,我本来还有一个疑问:您有没有注意我有一次把您的代码搬动了位置,就是般到Application.Initialize;
Application.CreateForm(TDataModuleform, DataModuleform);
下面就加sqlsetupform := Tsqlsetupform.Create(Application); if .....
然后再create 其它FORM了,后来您又把这一段移动到了最下面,也就是RUN前,不知道那段判断的代码能不能放在上面的,那样的话其它窗口不CREAT,也就不用FREE了?
------
我的编程起步于ktop,我将永远支持ktop |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
var bConnectOk: Boolean; Label ForceStop; begin Application.Initialize; Application.CreateForm(TDataModuleform, DataModuleform); sqlsetupform := Tsqlsetupform.Create(Application); try if not sqlsetupform.CheckSetupDataOk then begin sqlsetupform.ShowModal; bConnectOk := sqlsetupform.ConnectionTestOk; end else begin bconnectok:=true; end; finally sqlsetupform.Free; end; if not bConnectOk then begin DataModuleform.Free; Goto ForceStop; end; Application.CreateForm(Tzjmform, zjmform); Application.CreateForm(TLogoinForm, LogoinForm); Application.Run; ForceStop: end.當然可以啊, 我上面的寫法應該也可以... 發表人 - malanlk 於 2005/09/04 22:58:23 |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |