2010-01-28 55 views
3

假設我在數據窗口上有一個字段,它是數據庫列的值(「插入」>「列」),它具有需要保護的條件(屬性>常規>保護)。在保護時有背景灰色,此刻,我可以制定如何做到這一點的唯一方法是複製保護條件,不管多麼複雜,用1(保護)和0(不保護)代替顏色值。是否可以在Powerbuilder中的表達式中使用列屬性?

是否有某種語法,我可以在表達式字段使用的列的背景顏色引用列的保護價值?我試過

如果(科拉姆n.protect = 1,灰色,白色)

但它返回errorous理由是預計一個TRUE/FALSE條件。

是什麼,我不可能經過我,或者是它只是一個得到正確的語法問題。

乾杯。

回答

6

哇。你喜歡複雜的分層問題。

第一個問題是訪問的值,它如所描述你沒有作爲直接完成。事實上,您使用Describe()來獲取值。與唯一的問題是,它回來作爲以下格式的字符串,用引號括起來(注意,我們使用的是標準的PowerScript串符號的地方〜t是一個選項卡)

"<DefaultValue>~t<Expression>" 

你想表達,所以你必須將其解析出來,同時放下引號。

一旦你得到了表達,你需要評估它是否符合給定行。可與另一個描述()調用來完成,特別是:

Describe ("Evaluate('<expression>', <rownum>)") 

一個表達式被上可與GETROW()函數可以了評價的行號。

這可能聽起來像需要PowerScript和臨時值存儲,但只要您願意進行多次函數調用以便多次獲得給定值,就可以在表達式中執行此操作,例如(一個例子列b):

if (Describe ("Evaluate (~"" + Mid (Describe ("b.protect"), 
Pos (Describe ("b.protect"), "~t")+1, 
Len (Describe ("b.protect")) - Pos (Describe ("b.protect"), "~t") - 1) 
+ "~", " + String (GetRow()) + ")")='1', 
rgb(128, 128, 128), 
rgb(255,255,255)) 

這看起來複雜,但如果你把MID()的表達在計算領域,所以你可以看到結果,你會看到,簡單地解析出的保護和表達將其放入上述的Describe(Evaluate())語法中。

把一個作弊到我的代碼進行簡單。我使用了我的Protect表達式中只有單引號的知識,並選擇將Evaluate()表達式字符串放在雙引號中。如果我試圖對任何列進行一般性操作,並且不能在我的Protect表達式中假設缺少雙引號,那麼我將使用全局函數來使用轉義引號替換Protect表達式中的任何雙引號(〜「),這我在你的代碼相信看起來像一個三重波浪和報價。再說,如果我不得不進行全局函數調用(注意,全局函數表達式調用可以有顯著的性能影響如果有很多行),我只是將它傳遞給Describe(「列」。保護「)和GETROW()和建立的PowerScript整個表達式,它會更容易理解和維護。

祝你好運,

特里。

+1

謝謝*這麼*多的特里,這是對我來說非常有用:) – glasnt 2010-01-31 23:52:10

相關問題