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

TADOConnection Connection ing.... 時, 想要有個 TProgressBar 在跑!!

答題得分者是:st33chen
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-13 09:49:55 IP:220.132.xxx.xxx 未訂閱
各位好:
想請問一下,

假設預連線的 ms-sql server 是關閉的,
用 TADOConnection 要連接此 sql server ,
因為 server 是關閉的,所以一定連不上,
但我是想在畫面有一個 TProgressBar 再跑 (顯示連線中........),

TProgressBar ->Position = 0;
TProgressBar ->Min = 1;
TProgressBar ->Max = TADOConnection ->ConnectionTimeout
tConnectionEnd = Now();
tConnectionStart = Now();
TTimer ->Enabled = true;
TADOConnection ->Connected = true;

我用一個 TTimer 在跑,
OnTimer 事件 :
tConnectionEnd = Now();
TProgressBar ->Position = SecondsBetween(tConnectionStart,tConnectionEnd);
Application->ProcessMessages();

為什麼 TTimer OnTimer 事件沒觸發??
也就是 TProgressBar 沒在跑??
是不是還要設定什麼??

謝謝!!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-14 08:41:56 IP:122.116.xxx.xxx 未訂閱
您好,
我用 delphi 將您的邏輯改寫如下, 是正常的 :
var dt0, dt2 : tdatetime;
procedure TForm1.Timer1Timer(Sender: TObject);
var ii : integer;
begin
// if adoconnection1.Connected then // 最好有個判斷 如果連上了就停止 timer
// timer1.Enabled := false
// else begin
dt2 := now;
// label3.caption := floattostr(dt2); // 和 secondsbetween 比較用的
// ii := round((dt2-dt0)*60*60*24);
// label1.Caption := inttostr(ii);
ii := secondsbetween(dt0, dt2);
label4.Caption := inttostr(ii);
ProgressBar1.Position := ii;
// end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
dt0 := now;
// label2.caption := floattostr(dt0);
progressbar1.Min := 0;
progressbar1.Max := adoconnection1.ConnectionTimeout;
timer1.Enabled:=true;
adoconnection1.Connected := true;
end;

( := 改成 =, . 改成-> 就大約是 bcb 的語法 )

看您的原碼, 元件都用 T 開頭 ( 例如 TADOCONNECTION, 而非 ADOCONNECTION1)
這在 DELPHI 有些是 COMPILE 不過的
不知道是不是這原因讓您的程式跑起來不是您所想要的
您也可以用 DEBUG, 斷點設在 TIMER 事件裏
或是
設 LABEL 來顯示 TIMER 事件內的變數或元件值
來判斷 TIMER 有否被觸發
參考一下

==========================================
我今天再試 RUN, 發覺 若 DB 的 SERVICE 不起來, ADOCONNECTION.CONNECTED := TRUE 會一直
HOLD 在那裡, 並不會交回執行權, 連 TIMER 都不會被觸發.
SORRY, 現象和您說的一樣, 答了等於沒答,
不過, 我再試試
==========================================
google 了一下, 確有很多人反應類似問題...
我想, 用不同的 thread, 可能可以解決吧,
請試試看
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-01-14 08:56:40, 註解 無‧
st33chen 重新編輯於 2009-01-14 09:13:10, 註解 無‧
st33chen 重新編輯於 2009-01-14 11:35:53, 註解 無‧
2007
中階會員


發表:54
回覆:90
積分:98
註冊:2008-08-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-14 13:27:07 IP:220.132.xxx.xxx 未訂閱

謝謝 st33chen 大大!!

看您的原碼, 元件都用 T 開頭 ( 例如 TADOCONNECTION, 而非 ADOCONNECTION1) <---sorry 那不是原碼,
只是要讓看的人知道我用的是那一個元件。 例如:我的程式是 adocon <---誰知道 adocon 是什麼元件,
所以直接用元件的名字(TADOConnection 、TProgressBar )。

我的程式是可以正常 work 的,只是如你以下所說的:
====================================================================================
我今天再試 RUN, 發覺 若 DB 的 SERVICE 不起來, ADOCONNECTION.CONNECTED := TRUE 會一直
HOLD 在那裡, 並不會交回執行權, 連 TIMER 都不會被觸發.
SORRY, 現象和您說的一樣, 答了等於沒答,
不過, 我再試試
====================================================================================


===================引 用 st33chen 文 章===================
您好,
我用 delphi 將您的邏輯改寫如下, 是正常的 :
var dt0, dt2 : tdatetime;
procedure TForm1.Timer1Timer(Sender: TObject);
var ii : integer;
begin
// if adoconnection1.Connected then // 最好有個判斷 如果連上了就停止 timer
// timer1.Enabled := false
// else begin
dt2 := now;
// label3.caption := floattostr(dt2); // 和 secondsbetween 比較用的
// ii := round((dt2-dt0)*60*60*24);
// label1.Caption := inttostr(ii);
ii := secondsbetween(dt0, dt2);
label4.Caption := inttostr(ii);
ProgressBar1.Position := ii;
// end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
dt0 := now;
// label2.caption := floattostr(dt0);
progressbar1.Min := 0;
progressbar1.Max := adoconnection1.ConnectionTimeout;
timer1.Enabled:=true;
adoconnection1.Connected := true;
end;

( := 改成 =, . 改成-> 就大約是 bcb 的語法 )

看您的原碼, 元件都用 T 開頭 ( 例如 TADOCONNECTION, 而非 ADOCONNECTION1)
這在 DELPHI 有些是 COMPILE 不過的
不知道是不是這原因讓您的程式跑起來不是您所想要的
您也可以用 DEBUG, 斷點設在 TIMER 事件裏
或是
設 LABEL 來顯示 TIMER 事件內的變數或元件值
來判斷 TIMER 有否被觸發
參考一下

==========================================
我今天再試 RUN, 發覺 若 DB 的 SERVICE 不起來, ADOCONNECTION.CONNECTED := TRUE 會一直
HOLD 在那裡, 並不會交回執行權, 連 TIMER 都不會被觸發.
SORRY, 現象和您說的一樣, 答了等於沒答,
不過, 我再試試
==========================================
google 了一下, 確有很多人反應類似問題...
我想, 用不同的 thread, 可能可以解決吧,
請試試看
系統時間:2024-04-26 23:45:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!