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

如何將HOLD住的程式停止執行

尚未結案
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-25 09:55:15 IP:218.32.xxx.xxx 未訂閱
請教各位: 程式由於須要執行到資料庫中的預存程式,因而須較長時間, 但如果要中途停止,又因程式被HOLD住而無法結束,是否有"正常" 的方法,可停止程式...麻煩各位幫忙...謝謝
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-25 11:39:01 IP:61.221.xxx.xxx 未訂閱
sangya 你好: 一般來說 要執行預存程序的方式有2 種 1.Query1.ExecSQL; 2.Query1.OPEN; 第一種程式只需去觸發,不管結果如何怎樣 第二種是會取得回傳值 但是前提是不論如何在執行預存程序的時候,預存程序無法由外部取得終止 只能對程式取回焦點,就是說中斷資料庫連線 所以我只能給你取回焦點的code    Application.ProcessMessages; 若有不足,還請其他大大指教
------
======================
昏睡~
不昏睡~
不由昏睡~
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-25 13:19:17 IP:61.222.xxx.xxx 未訂閱
我想到兩個解法: 1.如果store procedure的執行是會因為輸入的參數不同,而有不同的執行時間的話,建議你在Delphi端以一個迴圈來處理,讓store procedure每次執行的時間不會太長.例如,本來的程式是要處理一個月份資料,store procedure一次執行就處理該月的資料;把store procedure 改成一次執行僅處理一天的資料,然後在Delphi端以一個迴圈來處理,變成呼叫store procedure30次.每次呼叫完畢後都呼叫Application.ProcessMessages,以判斷form上的停止按鈕是否被按下(這表示你的form上要有個"停止"的button,當button被按下時,會有個全域變數被設定,然後在Application.ProcessMessages之後去判斷該全域變數是否被設定) 2.把呼叫store procedure的動作直接獨立成一個thread來執行.程式一但建立該thread執行後,就進入一個迴圈.迴圈僅檢查兩個部份:1是該thread是否執行完畢,2是呼叫Application.ProcessMessages之後檢查"停止"的功能按鈕是否被按下.這兩個條件有任何一個成立就跳出迴圈.
sangya
一般會員


發表:21
回覆:46
積分:13
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-30 15:23:05 IP:211.76.xxx.xxx 未訂閱
感謝change.jian的幫忙 我將呼叫預存程式的部份獨立成一個thread,然後在停止按鈕內寫下中斷資料庫 的連結就行了....感謝
系統時間:2024-06-24 21:47:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!