如何检查PowerBuilder DataWindow中的欺骗

时间:2015-06-26 07:58:09

标签: powerbuilder

我的数据源Person中包含多个联系号码的表格:

+----------+------+------+------+------+
|   NAME   | con1 | con2 | con3 | con4 |
+----------+------+------+------+------+
|   Jack   |  123 | 3214 | 7458 | 454  |
+----------+------+------+------+------+
|   Mack   |  113 | 3224 | 9458 | 954  | 
+----------+------+------+------+------+
|   Mary   |  133 | 3215 | 3458 | 054  |  
+----------+------+------+------+------+

如何验证SLE对象中的字符串是否已存在于我的表中?

例如:用户在SLE对象中输入9458并单击名为Save的按钮,然后App会告诉用户联系号码9458已在数据库中。

我想这样做是为了避免重复。

2 个答案:

答案 0 :(得分:1)

许多方法都可以做到这一点。

如果您一次输入单个合约价值(比如值为' 123'),您可以在表格中创建INSERT语句,条件为

AND contract_num <> '123'

如果表中已存在id,则会失败。您检查SQL的成功/失败,然后通知用户。

答案 1 :(得分:0)

解决方案1:在数据窗口中查找重复行 - 按表达式(无SQL)

概念是按比较的列对数据进行排序,并使用数据窗口表达式(或过滤器)突出显示重复的行。例如,通过将表达式添加到背景颜色属性上的列或计算列,将列的背景颜色设置为重复行上的红色。

这是通过引用列名(在表达式中)并将其与相同的列名称进行比较来完成的,其中[-1]表示之前的行。请务必先通过代码或菜单对数据窗口进行排序。

PowerScript代码

// First sort the data using PowerScript
dw_1.setsort('your_pk_or_composite_key')
dw_1.sort()

表达式代码

// datawindow column expression on background color for column or computed field
if (primary_or_concat_key = primary_or_concat_key[-1]), rgb(255,0,0), rgb(255,255,255))

解决方案2:在数据窗口中查找重复行 - 按过滤器(无SQL)

这与datawindow列表达式相同,但使用数据窗口过滤器。如果要比较很多行,这样可以更轻松地找到重复项。运行代码后,只有具有重复的行才会显示,其他行将从主数据窗口缓冲区中过滤掉。

如果您希望将此作为验证过程的一部分,则可以将其放在事件/函数中,并防止在查找重复项时进行保存。

PowerScript代码

// sort by key or composite columns concatenated
dw_1.SetSort ('key_or_concatenated_cols A')
dw_1.Sort()

// now run the filter, any rows remaining are duplicates
dw_1.SetFilter ('key_or_concatenated_cols = key_or_concatenated_cols [-1]')
dw_1.Filter()

// number of duplicates stored in local variable
integer li_count
li_count = dw_1.RowCount() 


// reset the datawindow filter
dw_1.SetFilter('')
dw_1.Filter()

提示:在PowerBuilder中使用表达式时检查列中的空值总是一个好主意,因为比较/连接空值会导致不可预测的行为。

如果您想使用数据库查找副本,Matt Balent的解决方案非常好。