我最近在一家公司开始了一份新工作,我的首要任务是为他们更新一些相当旧的软件。
有一个很大的背景故事,但基本上该软件是用 PB8 编写的(大约在 1997 年),公司内部(包括我)之前没有人使用过 PowerBuilder,作为新手,我的任务是更新和维护它,直到替代品已获批准并可开发。
我们拥有 PowerBuilder 12.5 的许可证,所以我使用 PB12.5 Classic 来做所有事情。无法联系原始开发人员寻求支持,并且不存在任何文档。
我试图理解的一件事,这将在未来有很大的帮助,是如何确定函数在哪里定义以及变量在哪里获得它们的值。
我目前正在处理的示例是以下场景。有一个带有选项卡的数据窗口,命名为tab_detail
每个选项卡显示不同的任何橙色小人在树列表中。
其中之一被称为dw_detail
允许粘贴数据。其他选项卡都不允许粘贴数据,但我希望他们这样做。dw_detail
有一个事件rbuttondown()
,其中包含以下代码:
Window w_parentwin
If ib_add_mode Or ib_chg_mode Then
w_parentwin = Parent.GetParent().GetParent()
m_dwpaste m_pop_paste
m_pop_paste = CREATE m_dwpaste
m_pop_paste.idw_data = This
If ii_agent_code > 0 And Not IsNull(id_period) And Clipboard() <> "" Then
m_pop_paste.m_popup.m_paste.Enabled = TRUE
Else
m_pop_paste.m_popup.m_paste.Enabled = FALSE
End If
m_pop_paste.m_popup.PopMenu(w_parentwin.PointerX(), w_parentwin.PointerY())
DESTROY(m_pop_paste)
End If
当我将该代码添加到rbuttondown()
选项卡编号 2 ( ) 的事件时,当我在数据窗口中dw_adjustment
右键单击时,选项卡 2 现在允许粘贴,但数据会粘贴到选项卡内的字段而不是选项卡上的字段。dw_adjustment
dw_detail
dw_adjustment
我已经尝试调试和单步执行代码,但是变量窗口中有数千个值,并且无法搜索我找不到上面使用的变量以及它们的值是什么,或者为什么数据被粘贴到dw_detail
选项卡而不是dw_adjustment
选项卡时我粘贴到dw_adjustment
标签中。
基本上,我正在寻找任何有用的提示,关于在哪里查看或上面在做什么以及为什么所有内容都粘贴到选项卡 1 而不是我单击粘贴的选项卡。
如果需要来自不同位置的代码的更多细节或需要更多信息,我很乐意提供。
正如 Seki 所建议的,我发现m_popup
双击它时会出现wf_pastereturn()
:
Integer li_idx, li_rows, li_dwrows, li_comm, li_seqno
String ls_approval_type
If tab_detail.tabpage_details.dw_detail.RowCount() > 0 Then
li_idx = 1
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Do Until li_idx > li_dwrows
ls_approval_type = tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx]
If IsNull(ls_approval_type) or ls_approval_type = "" Then
tab_detail.tabpage_details.dw_detail.DeleteRow(li_idx)
Else
li_idx++
End If
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Loop
End If
If li_dwrows > 0 Then
li_seqno = Long(tab_detail.tabpage_details.dw_detail.Object.seq_no [li_dwrows])
End If
li_seqno += 10
If Clipboard() <> "" Then
If tab_detail.tabpage_details.dw_detail.ImportClipboard(1, li_rows, 1, 4, 3) <= 0 Then
MessageBox("Invalid Data", "Unable to paste!", StopSign!)
Return -1
End If
li_rows = tab_detail.tabpage_details.dw_detail.RowCount()
li_dwrows++
For li_idx = li_dwrows To li_rows
tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx])
tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx])
tab_detail.tabpage_details.dw_detail.Object.agent_code [li_idx] = ii_agent_code
tab_detail.tabpage_details.dw_detail.Object.period [li_idx] = id_period
li_comm = f_new_commission(Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.levy_payable[li_idx]= &
inv_rate.of_CalculateLevyPayable (Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.comm_deductable [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.commission [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.seq_no [li_idx] = li_seqno
li_seqno += 10
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_date[li_idx] = Today()
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_user[li_idx] = SQLCA.Logid
Next
Clipboard("")
Return 0
Else
Return -1
End If
我修改了函数以使用 windowsSelectedTab
属性。数据现在将粘贴到选项卡中,但输入字段错误。我进一步看了看,该ImportClipboard
函数的数据列没有对齐。
更改所选数据库列顺序的最佳方法是什么?
这是我所说的标签的屏幕截图:
因此,在主程序窗口中,有上述选项卡,在每个选项卡(输入字段所在的位置)内,都有一个标有dw_
前缀的数据窗口。
感谢您的帮助。