2012-03-06 28 views
0

我有時檢索並具有結果的數據存儲區,行應該在另一個窗口Powerbuilder中傳遞一個數據存儲/對象

ds_1.Retrieve()

IF ds_1.RowCount進行顯示( )> 0 THEN

i_str_pass.po[1] = ds_1 

OpenWithParm(w_error, i_str_pass) 

END IF

i_str_pass是一個結構和PO是成PowerObject

我想無需再次找回它

我w_error打過電話來顯示DS_1的w_error的DataWindow的結果

str_pass i_str_pass

i_str_pass = Message.PowerObjectparm

是dw_1 = i_str_pass.po [1]

我調試,看到我正確 過去了,但已檢索的數據在所有 什麼IM沒有顯示做錯了什麼?謝謝。

+0

是w_error不響應窗口? ds_1是一個局部變量?如果是這樣,那麼在w_error中的代碼可以訪問現在被銷燬的數據存儲對象之前,您的引用將超出範圍。根據您的功能要求,有幾種方法可以處理此問題。 – 2012-03-06 06:19:37

+0

w_error可以是一個響應窗口,我做它作爲一個彈出窗口與數據窗口。 – Sid 2012-03-06 07:12:59

+0

哇這是一年前...我搜索谷歌在另一個項目上的同樣的問題,我登陸我的問題,正好在1年前同一日期。哈哈 – Sid 2013-03-06 03:12:35

回答

3

使用,而不是

i_str_pass.po[1]. DYNAMIC ShareData(dw_1) 

dw_1 = i_str_pass.po[1] 

驚訝後者不是一個運行時錯誤,因爲你指定的數據存儲到數據窗口。

GetFullState/RowsCopy是所有沒關係,但招致內存點球,因爲你正在做的是數據的副本(可能是也可能不是你擔心的東西)

1

你可以在GetFullState()/SetFullState()看看:

blobl lbl_data 
if i_str_pass.po[1].GetFullState(lbl_data) = 1 then 
    dw_1.SetFullState(lbl_data) 
end if 

你也可以看看ShareData()建立2個數據存儲或數據窗口之間的「聯繫」。

+0

我傳遞後使用了RowsCopy。這樣我就可以顯示行。即時通訊不知道爲什麼它不顯示在第一個地方的行,但當你打電話給dw_1.Rowcount()..其中.. RowsCopy解決了它。 – Sid 2012-03-06 09:54:12

+0

@Sid:_im不知道爲什麼它不在第一個位置顯示行:這僅僅是因爲你不能直接將數據存儲分配給數據窗口。部分原因是一個是視覺對象而不是另一個。你所做的就是將dw_1變量指向一個數據存儲,使窗口無法顯示。但是'RowCount'適用於這兩種類型,所以你有一種錯覺,即它以某種方式工作。 – Seki 2012-03-06 10:05:26

+0

哦。如果我將dw傳遞給另一個窗口的dw,它會起作用嗎? – Sid 2012-03-06 10:12:54

相關問題