同事在問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.3
到了照MRI的當天,我下午又被推著前去三總。但報到時我竟然被自已記錯時間而錯過了早上的預約,當下晴天霹靂無法言語。因為要再排隊預約還需等3個星期。 當時有點被打擊到,因為代表我得要再痛3週才能知道我到底怎麼了。 在回家的路上,腦袋還有點神智不清的混亂著,一直在想怎麼辦怎麼辦。 在...
-
一位同事在騎單車的路途中發生意外走了,我好shock,他很年輕,不到40,去年才來公司的,還是我interview他的,本來要在同一個部門做BI,因為他也很想嚐試新東西,所以談完隔幾天,他就很爽快的答應來公司上班了. 來上班前,老板還先和他談過,要請他先支援另一個部門的案子,還說...
-
商周的專欄作家何飛鵬常有一些講到心里頭的好文章,這談週的是公司內的舒適圈與堅困圈.舒適圈套句老媽常年掛在掛在嘴上的一句,女孩子就是要找一份穩定的工作,像公務人員,老師才是我該從事的行業,幸好我年紀已經夠了,老媽也看破,也不再碎碎唸了..;套一句linda說的,錢多事少離家近,也幸...
-
陳雲林來台,電視上每天都是群眾包圍,警察趕人的畫面,蠻扯爛的劇情. 今天yahoo上的新聞,一則來自自由時報的,寫著 蔡英文悲憤:這是自由民主國家嗎? , 看了一下內容,因為我只能看到媒體報導的內容來講,所以我覺得有點吐血. 其中一段這麼報導, 蔡英文說,「我們有這麼多人要表示意...
2 則留言:
為何不將Execute proc_name放在nvo_send.ue_send()
直接在主執行緒中 nvo_send.post ue_send() ?
張貼留言