同事在問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的加班日,做完事起身準備要回家,然後痛到我直不了身,當下用力搥打了二下右屁股,然後狀況變得更嚴重,完全走不了路。最後被老板載去三總急診。 看診的是一位看腸胃的醫生,問了一下我的狀況,然後很訝異的說,怎麼痛了快三個月,然後還沒有一家醫院診斷出是什麼原因? 其實我...
-
在你週年的前夕,家裡來了一位小嬌客 和你比起來,她如果是豪門的嬌嬌女,那你就是鄉下來的憨小唄了 我那麼愛 你無辜眼神 你浩呆表情 你滿臉傻笑 你搖擺扭臀 我那麼懷念你 總是跟前跟後的如影隨行 頂樓解放前後的狂吠與原地轉圈 夜深人靜時的呼呼打鼾聲 和夢境中的微...
-
神鬼是人類極度失望與無助下的產物,寄託神鬼的人我想是有救的,但 連神鬼都無法寄託的人,狀況真的很嚴重. 今晚腦子里想到了行天宮籤詩的問題,也想到brenda.過年看到她時,很不好,應該是說這幾年來我都感覺她過的不好.也許是精神,也許是經濟,就是感覺她不快樂.在MCD我們說著說著時...
-
今天又收到小朋友的辭職信, 唉, 我今年怎麼了, 身邊的人都留不住, 我感覺我遇到了職場生涯以來的最低點, 很讓我沮喪和失去信心, 沒法留住人, 自已好累. hooli舅舅說,管理的人不能凡事以站在員工的立場來向老板要求,老板賦予你管理的權力是要你幫他管人,你必須以主管的位階和你...
2 則留言:
為何不將Execute proc_name放在nvo_send.ue_send()
直接在主執行緒中 nvo_send.post ue_send() ?
張貼留言