在DW ImportClipboard和验证之间处理数据

时间:2013-11-05 00:04:26

标签: powerbuilder datawindow

我有一个DataWindow,我希望能够使用excel文档中的复制/粘贴来填充。 它目前导入我想要的所有内容,除了日期字段。 目前,用户手动输入包含MM / YYYY日期的excel文件中的所有内容,当他们单击“保存”时,系统会添加日期组件,以便将其作为日期字段传递给oracle数据库。

执行复制/粘贴日期字段来自于MM / YYYY格式(例如二千零十三分之十一)和PowerBuilder与数据验证错误消息(项目弹出的Excel文件后'11 / 2013' 未通过验证测试)一旦粘贴完成。

如果我继续导入所有其他数据都已正确粘贴,如果我手动将Excel中的日期更改为01/11/2013,则所有内容都会正确粘贴,包括日期。 excel文档受第三方保护,日期格式无法更改为包含日期组件。

我使用dw.ImportClipboard()方法从剪贴板获取数据并将其分配给正确的DW列。 代码段:

    If Clipboard() <> "" Then
            If tab_detail.tabpage_adjustment.dw_adjustment.ImportClipboard(1, li_rows, 1, 7, 3) <= 0 Then
                MessageBox("Invalid Data", "Unable to paste!", StopSign!)
                Return -1
            End If 
... process data further

有没有办法可以截取ImportClipboard()函数和自动验证之间的数据,以便在日期字段的前面添加DD/,以便通过验证?也许在上面代码的过程数据的进一步部分。

或者有更好的方法吗?

感谢。

我正在使用最初在PB8中开发的PowerBuilder Classic 12.5。

编辑: <击> 建议使用数据存储,并对其进行调查。这似乎是我所追求的。但是我无法让它为我工作。

这就是我所做的:

datastore ids_Adjustment
ids_Adjustment = CREATE DATASTORE
ids_Adjustment.DataObject = "tab_detail.tabpage_adjustment.dw_adjustment"
ids_Adjustment.SetTransObject( SQLCA )

li_test = ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3)
messagebox("test", "Here: "+String(li_test))

    If ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3) <= 0 Then
        MessageBox("Invalid Data", "Unable to paste the return Adjustment! "+String(ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3)), StopSign!)
        Return -1
    End If

不会出现任何消​​息框,但是当我删除导入剪贴板时,消息框会正常显示。我无法确定他们为什么不工作..

当我换行时:

ids_Adjustment.DataObject = "tab_detail.tabpage_adjustment.dw_adjustment"

ids_Adjustment.DataObject = "d_agentreturn_detail_adjustment"

(这是DW对象的名称)

消息框返回错误代码-4,根据文档表示无效输入。我复制/粘贴我一直拥有的相同行和数据,因此不确定为什么会这样做。

EDIT2 /解决方案:

根据建议,我创建了一个新的DataWindow对象(richtext),选择外部数据源并添加列,这次使所需的日期字段成为字符串。 然后我创建了一个DataStore,如上所述引用新数据对象并在其上执行importClipboard。 然后我继续在日期字符串中添加日期组件:

ids_Adjustment.SetItem(li_idx, 'adjustment_period', String("01/"+ids_Adjustment.GetItemString(li_idx, 'adjustment_period')))

然后使DataWindow对象等于DataStore值。

tab_detail.tabpage_adjustment.dw_adjustment.Object.adjustment_period [li_idx] = date(ids_Adjustment.GetItemString(li_idx, 'adjustment_period'))

感谢您的意见和建议。

1 个答案:

答案 0 :(得分:1)

您可以将数据粘贴到数据存储中,并将日期字段作为字符串,修复日期格式,然后将行移动到数据窗口中。