同事在問pb9能不能做到call sp時,畫面的progress bar也給跑一下,不然還以為當掉了呢.這個問題,回想起來,在pb6時,就好像沒有sp呼叫時asynchronous的功能,於是就在畫面上show個正在處理中的static text,只不過整個handle都被帶走了,user只能等等等,等sp結束傳回值來.
也好長一段時間沒看pb,我的knowledeg都只停留在pb6,所以花了一些時間在sybase forums上找了一下,發現好像可以做,回頭再看了一下pb help,照著上面的step做了一遍,就是失敗加失敗.惱了一會後,拜google之賜,看到了一個可能的解法,再回去測了一下,嘿嘿,竟然給做到了,看來pb要加把勁了,寫了一個不work的sample help.
我簡化後的步驟如下,
1. 先建二個non visual object,分別為nvo_callback 及nvo_send
2.宣告nvo_send為instance variable, 在這只要先宣告一個就好,不要參考help上的做法
nvo_send invo_send
3. 在原本呼叫sp的event或function中取取得nvo_send reference,
SharedObjectRegister( "nvo_send", "myshare" )
SharedObjectGet( "myshare", invo_send )
4. 在 nvo_send 中自訂一個user evnet, 例如 ue_send ,帶不帶參數都可以,看需要囉,要注意,這里只能帶non visual的型態參數.
5. 在nvo_callback自訂一個user event, 例ue_callback, 將sp的呼叫寫到這個event中
記得,最好在這個event中,自訂一個sp專屬的transaction object,
Transaction ltr_callback
ltr_callback = CREATE Transaction
DECLARE proc_name PROCEDURE FOR sp_proceduer USING ltr_callback;
Execute proc_name ;
FETCH proc_name INTO :ll_return ;
CLOSE proc_name;
.....
6. 在nvo_send ue_send event 中,
nvo_callback lnvo_calback
lnvo_calback = CREATE nvo_callback
lnvo_calback.Post Event ue_callback ( as_sender, as_logtime )
用trigger event或post event 好像都可
結論是, step 3的二個動作,一旦取得了reference後, 就可以做到非同步的呼叫了,
和help sample不同的是, 要在ue_send 才宣告nvo_callback, 這是在newsgroup找答案時得到的靈感.
星期日, 5月 14, 2006
訂閱:
張貼留言 (Atom)
人生關卡No.2
113/12/09的加班日,做完事起身準備要回家,然後痛到我直不了身,當下用力搥打了二下右屁股,然後狀況變得更嚴重,完全走不了路。最後被老板載去三總急診。 看診的是一位看腸胃的醫生,問了一下我的狀況,然後很訝異的說,怎麼痛了快三個月,然後還沒有一家醫院診斷出是什麼原因? 其實我...
-
馬英九上任后,看來諸事不順,股市直直落,我要買股票,老媽說,不是馬上好...是馬上死,我想她的心中只有陳水扁好,只有民進黨好,好死忠的台獨份子. 大家都說小馬哥當總統太沒霸氣,所以下面的人都不會怕他,拿他當軟柿子,說這些話的人,都是自以為人生歷練足夠,行走江湖多人,閱人無數的人?...
-
在simple talk看到這篇文章,很發我深省的一篇.雖然還要好幾好幾好幾年(太強調了一點...:>)才40,剛開頭看這篇文章時,著實shock me more,因為作者的好心副總刻意把他拉到角落說對著他說," I was getting too old to ...
-
近幾個月迷上看知否知否應是綠肥紅瘦,前前後後下來好像部份集數都看了4、5回了。 大陸劇不管是配音還是演員的口條聽著都覺得順耳,反觀台灣戲劇在我小時候還能聽得到演員們純正口條,不管國台語都是那麼的地道好聽。 現在不管國台語幾乎已經看不到好好說話的劇,台語劇時刻摻雜著國台語亂七八糟的...
2 則留言:
為何不將Execute proc_name放在nvo_send.ue_send()
直接在主執行緒中 nvo_send.post ue_send() ?
張貼留言