我有一个 DataWindow,我希望能够使用 Excel 文档中的复制/粘贴来填充它。它目前导入我想要的所有内容,日期字段除外。目前,用户手动输入 Excel 文件中的所有内容,包括 MM/YYYY 日期,当他们单击保存时,系统会添加日期组件,以便可以将其作为日期字段传递到 oracle 数据库。
实施复制/粘贴后,日期字段来自 MM/YYYY 格式的 excel 文件(例如 11/2013),PowerBuilder 弹出数据验证错误消息(项目 '11/2013' 未通过验证测试)由于已执行粘贴。
如果我继续导入,则所有其他数据都正确粘贴,如果我手动将 Excel 中的日期更改为 2013 年 1 月 11 日,则所有内容都正确粘贴,包括日期。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/
在日期字段的前面添加 a 以便它通过验证?也许在上面代码的流程数据部分。
或者有更好的方法吗?
谢谢。
我正在使用 PowerBuilder Classic 12.5,最初在 PB8 中开发的应用程序。
编辑:
建议使用数据存储,并对其进行调查。这似乎是我所追求的。但是我一直无法让它为我工作。
这是我所做的:
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 对象(富文本),选择外部数据源并在其中添加列,这次将所需的日期字段设为字符串。然后,我创建了一个如上所述的 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'))
感谢您的意见和想法。