ADO存儲過程的執行如何反映在進度條上 |
尚未結案
|
danielldf
一般會員 ![]() ![]() 發表:44 回覆:60 積分:20 註冊:2003-05-12 發送簡訊給我 |
|
Roach
中階會員 ![]() ![]() ![]() 發表:61 回覆:104 積分:98 註冊:2002-11-05 發送簡訊給我 |
|
Roach
中階會員 ![]() ![]() ![]() 發表:61 回覆:104 積分:98 註冊:2002-11-05 發送簡訊給我 |
|
likush
高階會員 ![]() ![]() ![]() ![]() 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
danielldf
一般會員 ![]() ![]() 發表:44 回覆:60 積分:20 註冊:2003-05-12 發送簡訊給我 |
|
bigdogchina
版主 ![]() ![]() ![]() ![]() ![]() 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
不好意思,小弟插個花:
ADO來處理後臺資料有兩種方式:
①同步
②非同步
同步的意思是說:當ADO開始處理資料後,應用程式必須等到ADO處理完畢之後才可以繼續執行。而非同步是允許ADO處理時,應用程式仍然能夠繼續執行。而當ADO處理完資料後,ADO會以事件的方式來通知應用程式,此時應用程式再根據ADO執行的結果來採取相應的動作 而像這樣的問題:應用程式需要花大量的時間的動作,我們可以在ADO中選擇以非同步的方式來執行,而讓應用程式繼續處理其他事件 ADO會以OnFetchprogress事件來通知應用程式ADO還在處理資料之中,並且以OnFetchComplete事件來通知應用程式ADO已經處理完資料了。
procedure TForm1.ADODataSet1Fetchprogress(DataSet: TCustomADODataSet;Progress,MaxProgress: Integer;var EventStatus: TEventStatus); begin ProgressBar1.Position := Progress; end; procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;const Error; var EventStatus: TEventStauts); begin ShowMessage('資料已經處理完了'); end;具體實做時,還需將ADODataSet1.ExecuteOptions := [eoAsyncFetchNonBlocking],改爲非同步哦(eoAsyncFetch是同步)
------
人生在勤,不索何获? |
danielldf
一般會員 ![]() ![]() 發表:44 回覆:60 積分:20 註冊:2003-05-12 發送簡訊給我 |
bigdogchina兄:
如果按您的意思,非同步就是還可以同時執行操作,我就在adoprocedure執行前觸發Timer,以此顯示進度條,可是還是沒有反應,而要等到adoprocedure執行完才動作。已改爲非同步了(eoAsyncFetchNonBlocking)。
TForm1.ADODataSet1Fetchprogress這個事件是加在Tadoprocedure的事件中嗎?
我的Tadoprocedure的連接是接在ADOConnection1上的。
procedure Taccount.sp_close1FetchComplete(DataSet: TCustomADODataSet;
const Error: Error; var EventStatus: TEventStatus);
begin
showmessage('Collect Over!'); 執行完也沒有顯示這個信息。
end; 努力过,还有什么遗憾呢!
|
bigdogchina
版主 ![]() ![]() ![]() ![]() ![]() 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
引言: bigdogchina兄: 如果按您的意思,非同步就是還可以同時執行操作,我就在adoprocedure執行前觸發Timer,以此顯示進度條,可是還是沒有反應,而要等到adoprocedure執行完才動作。已改為非同步了(eoAsyncFetchNonBlocking)。 TForm1.ADODataSet1Fetchprogress這個事件是加在Tadoprocedure的事件中嗎? 我的Tadoprocedure的連接是接在ADOConnection1上的。 procedure Taccount.sp_close1FetchComplete(DataSet: TCustomADODataSet; const Error: Error; var EventStatus: TEventStatus); begin showmessage('Collect Over!'); 執行完也沒有顯示這個資訊。 end; 努力過,還有什麽遺憾呢!小弟試著模仿李維大師的文章,寫了一個如何利用非同步的例子,還請您仔細看看:
------
人生在勤,不索何获? |
Roach
中階會員 ![]() ![]() ![]() 發表:61 回覆:104 積分:98 註冊:2002-11-05 發送簡訊給我 |
各位是不是把 danielldf 兄的問題複雜化了
下面範例是把 Q1資料表的內容複製到 tTemp 資料表
這一行若拿掉則呈現死機狀態Application->ProcessMessages();
Q1->Open(); Q1->First(); lblAgtPn->Caption=tAgtPn->FieldByName("AGT_PN")->AsString; while( !Q1->Eof ){ // tTemp->Append(); tTemp->FieldByName("STATION_NAME")->AsString=Q1->FieldByName("STATION_NAME")->AsString; tTemp->FieldByName("LOT_NAME")->AsString=Q1->FieldByName("LOT_NAME")->AsString; tTemp->FieldByName("QTY")->AsInteger=Q1->FieldByName("WIP_QTY")->AsString.ToInt(); tTemp->FieldByName("ON_HOLD")->AsBoolean=false; tTemp->FieldByName("REMARK")->AsString=tAgtPn->FieldByName("REMARK")->AsString; tTemp->Post(); Q1->Next(); lblStation->Caption=Q1->FieldByName("STATION")->AsString; ProcessBar->Position++; Application->ProcessMessages(); }//while( !Q1->Eof ){-------------- |
danielldf
一般會員 ![]() ![]() 發表:44 回覆:60 積分:20 註冊:2003-05-12 發送簡訊給我 |
很是奇怪,還是不行啊!
procedure TForm1.ADOProcedure1Fetchprogress(DataSet: TCustomADODataSet;Progress,MaxProgress: Integer;var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
end;
這個事件始終是沒有執行,是不是因為我那是存儲過程Adoprocedure的原因呢?Roach兄的示例我試過,但那是Adoquery;bigdogchina兄的是Adodataset,只是選擇語句的執行。小弟愚笨,請各位前輩再指教一下,多謝! 努力过,还有什么遗憾呢!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |