在PowerBuilder中保存复合数据窗口

时间:2015-03-13 02:38:35

标签: save format powerbuilder composite datawindow

有没有办法将结果作为文本或Excel电子表格保存在复合数据窗口中? Powerbuilder声明复合材料保存它的格式是PSReport。这对我正在尝试做的事情并不起作用。这个问题还有其他解决方法吗?

1 个答案:

答案 0 :(得分:0)

复合数据窗口可以包含任意数量的嵌套数据窗口。因此,如果内存服务,则无法以有意义的方式将整个复合数据窗口保存为数据(SaveAs只会为您提供一行无意义的数据),但您可以将每个嵌套数据窗口保存在复合内部。

这是我编写的一些PFC代码(用于菜单项内部),它创建嵌套报表的副本,然后执行SaveAs(在这种情况下为对话框):

            //must create a 'dummy' datawindow,
            //and put the data on the nested report into it

            u_dw ldw_Temp
            Window lw_Parent
            String ls_Syntax, ls_Error

            If Not IsValid(i_dwo) Then
                    MessageBox('Unexpected Error', &
                                              'The pointer to the datawindow object was invalid. Contact Systems.')
                    Return
            End If

            If i_dwo.Type = 'report' Then
                    //continue
            Else
                    MessageBox('Unexpected Error', &
                                              'The pointer did not refer to a report. Contact Systems.')
                    Return
            End If

            If idw_Parent.of_GetParentWindow(lw_Parent) = 1 Then
                    ls_Syntax = i_dwo.object.datawindow.syntax
                    If lw_Parent.OpenUserObject(ldw_Temp) = 1 Then
                            If ldw_Temp.Create(ls_Syntax,ls_Error) = 1 Then
                                    ldw_Temp.Object.Data.Primary = i_dwo.Object.Data.Primary
                                    ldw_Temp.Event pfc_SaveAs()
                            Else
                                    If IsNull(ls_Error) Or ls_Error = '' Then ls_Error = '<unknown error>'
                                    MessageBox('Error','Error creating datawindow object: ' + ls_Error)
                            End If
                            lw_Parent.CloseUserObject(ldw_Temp)
                    Else
                            MessageBox('Error','Error creating datawindow control on ' + lw_Parent.ClassName())
                    End If
            Else
                    MessageBox('Error','Unable to obtain pointer to the parent window.')
            End If

基本上,此代码获取嵌套报表(上面为ls_Syntax = i_dwo.object.datawindow.syntax)的数据窗口对象的语法,然后在父窗体上创建一个数据窗口控件并将该语法加载到其中,然后从该窗体中复制数据进入另一个。最后,它在副本上调用SaveAs,并向用户显示一个对话框,询问他们希望从嵌套报告中以何种格式保存数据。

您可以自动执行此操作,以便将每个嵌套报表另存为单独的文件,然后如果您愿意,可以将这些单独文件的形成自动化为单个文件(工作簿中的工作表,附加的文本文件等)。

还有其他方法可以根据您要完成的内容来完成您的要求。

即使是数据窗口控件(那里的dwo事件变量),i_dwo变量也在右上角加载。

这可能会让你跑步,如果你有任何问题,请提出问题。