gpt4 book ai didi

syntax - 是否可以在 Powerbuilder 的表达式中使用列属性?

转载 作者:行者123 更新时间:2023-12-01 11:09:03 24 4
gpt4 key购买 nike

假设我在数据窗口上有一个字段,它是数据库列(“插入 > 列”)的值。它具有需要保护的条件(属性>常规>保护)。

我想在 protected 时将字段背景设为灰色。目前,我能弄清楚如何执行此操作的唯一方法是复制保护条件,无论多么复杂,用 1(保护)和 0(不保护)替换颜色值。

在引用列保护值的列背景颜色的表达式字段中是否可以使用某种语法?我试过了

如果(column.protect=1,灰色,白色)

但它返回错误,说它期望一个 TRUE/FALSE 条件。

我追求的是不可能的,还是只是获得正确语法的问题。

干杯。

最佳答案

哇。您喜欢复杂、多层次的问题。

第一个问题是访问值,这并没有像您描述的那样直接完成。事实上,您使用 Describe() 来获取值。唯一的问题是它返回为以下格式的字符串,周围有引号(请注意,我们使用标准的 PowerScript 字符串表示法,其中 ~t 是制表符)

"<DefaultValue>~t<Expression>"

您需要表达式,所以您必须解析它,同时删除引号。

获得表达式后,您需要针对给定的行对其求值。这可以通过另一个 Describe () 调用来完成,特别是:

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

可以使用 GetRow() 函数获取正在评估表达式的行号。

这听起来好像需要 PowerScript 和一些临时值存储,但只要您愿意多次调用冗余函数来获取给定值,就可以在表达式中执行此操作,例如 (for示例列 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() 表达式放在计算字段中以便查看结果,您会看到它只是解析出 Protect 表达式并将其放入 Describe (Evaluate()) 语法中如上所述。

为了简单起见,我已经在我的代码中添加了一个作弊程序。我使用了我的 Protect 表达式中只有单引号的知识,并选择将 Evaluate() 表达式字符串放在双引号中。如果我尝试对任何列执行此操作,并且不能假设我的 Protect 表达式中没有双引号,我会使用全局函数用转义引号替换 Protect 表达式中的任何双引号(~"),我相信在您的代码中看起来像一个三波浪号和一个引号。然后,如果我必须进行全局函数调用(请注意如果有很多行,表达式中的全局函数调用可能会对性能产生重大影响),我只是将它传递给 Describe ("column.protect") 和 GetRow() 并在 PowerScript 中构建整个表达式,这将是更易于理解和维护。

祝你好运

特里。

关于syntax - 是否可以在 Powerbuilder 的表达式中使用列属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2158897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com