我的数据源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
已在数据库中。
我想这样做是为了避免重复。
答案 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的解决方案非常好。