精华内容
下载资源
问答
  • 获取数据窗口数据列的数据类型

    千次阅读 2013-04-22 08:36:06
    获取数据窗口数据列的数据类型 llCount = Long(idwLTRList.Describe("DataWindow.Column.Count")) For i = 1 To llCount lsColumnName = Lower(idwLTRList.Describe('#' + String(i) + ".name")) If Left...
    获取数据窗口数据列的数据类型
    
    llCount = Long(idwLTRList.Describe("DataWindow.Column.Count"))
    	For i = 1 To llCount
    		lsColumnName = Lower(idwLTRList.Describe('#' + String(i) + ".name"))
    		If Left(lsColumnName , Len('lis_data_lab_request_')) = 'lis_data_lab_request_' Then
    			lsColumnType = Lower(idwLTRList.Describe('#' + String(i) + ".Coltype"))
    			Choose Case True
    				Case Left(lsColumnType , Len('char')) = 'char'
    					idwLTRList.Object.Data[llRow , i] = String(Message.#CF._NullValue())
    				Case Left(lsColumnType , Len('long')) = 'long' OR &
    					  Left(lsColumnType , Len('decimal')) = 'decimal' OR &
    					  Left(lsColumnType , Len('int')) = 'int' OR &
    					  Left(lsColumnType , Len('number')) = 'number' OR &
    					  Left(lsColumnType , Len('real')) = 'real' OR &
    					  Left(lsColumnType , Len('ulong')) = 'ulong'
    					idwLTRList.Object.Data[llRow , i] = Long(Message.#CF._NullValue())
    				Case Left(lsColumnType , Len('datetime')) = 'datetime'
    					idwLTRList.Object.Data[llRow , i] = DateTime(Message.#CF._NullValue())
    				Case Left(lsColumnType , Len('date')) = 'date'
    					idwLTRList.Object.Data[llRow , i] = Date(Message.#CF._NullValue())
    				Case Left(lsColumnType , Len('time')) = 'time'
    					idwLTRList.Object.Data[llRow , i] = Time(Message.#CF._NullValue())
    				Case Left(lsColumnType , Len('timestamp')) = 'timestamp'
    					idwLTRList.Object.Data[llRow , i] = DateTime(Message.#CF._NullValue())
    			End Choose
    		End If
    	Next

    展开全文
  • 对于多窗口的情况,一般有两种解决方法:一种是主窗口获取子窗口中控件的属性,另一种是通过信号与槽机制,一般是子窗口通过发射信号的形式传递数据,主窗口的槽函数获取这些数据

    目录

    1、单一窗口数据传输

    2、多窗口数据传输:调用属性

    3、多窗口数据传输:信号与槽


    在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的。如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。

    本篇博文首先给出一个例子,说明在一个窗口中不同控件之间的数据是如何传递的。对于多窗口的情况,一般有两种解决方法:一种是主窗口获取子窗口中控件的属性,另一种是通过信号与槽机制,一般是子窗口通过发射信号的形式传递数据,主窗口的槽函数获取这些数据。

    1、单一窗口数据传输

    对于具有单一窗口的程序来说,一个控件的变化会影响另一个控件的变化,这种变化利用信号与槽机制非常容易解决。

    通过示例,了解单一窗口数据传输的方法,效果如下所示:

    首先,创建滑块和LCD控件,然后,通过QVBoxLayout设置布局,最后,连接QSlider控件的valueChanged()信号函数和LCD面板控件的display()槽函数。

    valueChanged()是QSlider 的一个信号函数,只要 slider 的值发生改变,它就会发射一个信号。还可以设置参数控制信号在什么时候发射,然后通过connect连接信号的接收控件,也就是lcd。槽是对信号的响应,这里是lcd.display,即更新LCD面板的数字信息。

    实现代码如下所示:

    import sys
    from PyQt5.QtWidgets import QWidget,QLCDNumber,QSlider,QVBoxLayout,QApplication
    from PyQt5.QtCore import Qt
    
    class WinForm(QWidget):
        def __init__(self):
            super().__init__()   
            self.initUI()
    
        def initUI(self):
            #1 先创建滑块和 LCD 部件
            lcd = QLCDNumber(self)
            slider = QSlider(Qt.Horizontal, self)
            
            #2 通过QVboxLayout来设置布局
            vBox = QVBoxLayout()
            vBox.addWidget(lcd)
            vBox.addWidget(slider)
    
            self.setLayout(vBox)
            #3 valueChanged()是Qslider的一个信号函数,只要slider的值发生改变,它就会发射一个信号,然后通过connect连接信号的接收部件,也就是lcd。
            slider.valueChanged.connect(lcd.display)
    
            self.setGeometry(300,300,350,150)
            self.setWindowTitle("信号与槽:连接滑块LCD")
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        form = WinForm()
        form.show()                      
        sys.exit(app.exec_())

    2、多窗口数据传输:调用属性

    在PyQt编程过程中,经常会遇到输入或选择多个参数的问题。把多个参数写到一个窗口中,主窗口会显得很臃肿,所以一般是添加一个按钮,调用对话框,在对话框中进行参数的选择,关闭对话框时将参数值返回给主窗口。

    PyQt提供了一些标准的对话框类,用于输入数据、修改数据、更改应用的设置等,常见的有QFileDialog、QInputDialog、QColorDialog、QFontDialog等。

    本小节将介绍不同窗口在自定义对话框之间通过属性传参。通过示例,了解属性传参的方法,效果如下所示:

    示例中,在主窗口中调用对话框有两种方法,单击“弹出对话框"按钮,在对话框的时间日期控件中选择日期,则会把所选中的日期返回到主窗口的lineText文本框控件中。

    使用两个按钮(Ok和Cancel)分别连接accept()和reject()槽函数。在类中定义一个静态函数getDateTime(),该静态函数返回3个时间值。原理是利用静态函数的特性,在静态函数中实例化 DateDialog 类,并调用dialog.exec_()函数来显式执行对话框。通过 dialog.exec_()的返回值来判断用户单击的是Ok按钮还是Cancel按钮,然后做出下一步判断。

    主窗口实现代码如下所示:

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from DateDialog import DateDialog
    
    
    class WinForm(QWidget):
        def __init__(self, parent=None):
            super(WinForm, self).__init__(parent)
            self.resize(400, 90)
            self.setWindowTitle('对话框关闭时返回值给主窗口例子')
    
            self.lineEdit = QLineEdit(self)
            self.button1 = QPushButton('弹出对话框1')
            self.button1.clicked.connect(self.onButton1Click)
    
            self.button2 = QPushButton('弹出对话框2')
            self.button2.clicked.connect(self.onButton2Click)
    
            gridLayout = QGridLayout()
            gridLayout.addWidget(self.lineEdit)
            gridLayout.addWidget(self.button1)
            gridLayout.addWidget(self.button2)
            self.setLayout(gridLayout)
    
        def onButton1Click(self):
            dialog = DateDialog(self)
            result = dialog.exec_()
            date = dialog.dateTime()
            self.lineEdit.setText(date.date().toString())
            print('\n日期对话框的返回值')
            print('date=%s' % str(date.date()))
            print('time=%s' % str(date.time()))
            print('result=%s' % result)
            dialog.destroy()
    
        def onButton2Click(self):
            date, time, result = DateDialog.getDateTime()
            self.lineEdit.setText(date.toString())
            print('\n日期对话框的返回值')
            print('date=%s' % str(date))
            print('time=%s' % str(time))
            print('result=%s' % result)
            if result == QDialog.Accepted:
                print('点击确认按钮')
            else:
                print('点击取消按钮')
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        form = WinForm()
        form.show()
        sys.exit(app.exec_())

    对话框窗口实现代码如下所示:

    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    
    class DateDialog(QDialog):
        def __init__(self, parent=None):
            super(DateDialog, self).__init__(parent)
            self.setWindowTitle('DateDialog')
    
            # 在布局中添加部件
            layout = QVBoxLayout(self)
            self.datetime = QDateTimeEdit(self)
            self.datetime.setCalendarPopup(True)
            self.datetime.setDateTime(QDateTime.currentDateTime())
            layout.addWidget(self.datetime)
    
            # 使用两个button(ok和cancel)分别连接accept()和reject()槽函数
            buttons = QDialogButtonBox(
                QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
                Qt.Horizontal, self)
            buttons.accepted.connect(self.accept)
            buttons.rejected.connect(self.reject)
            layout.addWidget(buttons)
    
        # 从对话框中获取当前日期和时间
        def dateTime(self):
            return self.datetime.dateTime()
    
        # 静态方法创建对话框并返回 (date, time, accepted)
        @staticmethod
        def getDateTime(parent=None):
            dialog = DateDialog(parent)
            result = dialog.exec_()
            date = dialog.dateTime()
            return (date.date(), date.time(), result == QDialog.Accepted)
    

    3、多窗口数据传输:信号与槽

    对于多窗口的数据传递,一般是通过子窗口发射信号的,主窗口通过槽函数捕获这个信号,然后获取信号里面的数据。子窗口发射的信号有两种:其中一种是发射PyQt内置的一些信号,另一种是发射自定义的信号。

    发射自定义信号的好处是,它的参数类型可以自定义。比如发射一个自定义信号,它的参数类型可以为int、str、dict、list等;如果发射内置信号,则只能是特定的几个参数。

    2、多窗口数据传输:调用属性例子基础上进行修改。

    主窗口实现代码如下所示:

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from DateDialog2 import DateDialog
    
    
    class WinForm(QWidget):
        def __init__(self, parent=None):
            super(WinForm, self).__init__(parent)
            self.resize(400, 90)
            self.setWindowTitle('信号与槽传递参数的示例')
    
            self.open_btn = QPushButton('获取时间')
            self.lineEdit_inner = QLineEdit(self)
            self.lineEdit_emit = QLineEdit(self)
            self.open_btn.clicked.connect(self.openDialog)
    
            self.lineEdit_inner.setText('接收子窗口内置信号的时间')
            self.lineEdit_emit.setText('接收子窗口自定义信号的时间')
    
            grid = QGridLayout()
            grid.addWidget(self.lineEdit_inner)
            grid.addWidget(self.lineEdit_emit)
    
            grid.addWidget(self.open_btn)
            self.setLayout(grid)
    
        def openDialog(self):
            dialog = DateDialog(self)
            '''连接子窗口的内置信号与主窗口的槽函数'''
            dialog.datetime_inner.dateTimeChanged.connect(self.deal_inner_slot)
            '''连接子窗口的自定义信号与主窗口的槽函数'''
            dialog.Signal_OneParameter.connect(self.deal_emit_slot)
            dialog.show()
    
        def deal_inner_slot(self, date):
            self.lineEdit_inner.setText(date.toString())
    
    
        def deal_emit_slot(self, dateStr):
            self.lineEdit_emit.setText(dateStr)
    
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        form = WinForm()
        form.show()
        sys.exit(app.exec_())

    对话框窗口实现代码如下所示:

    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    
    class DateDialog(QDialog):
        Signal_OneParameter = pyqtSignal(str)
    
        def __init__(self, parent=None):
            super(DateDialog, self).__init__(parent)
            self.setWindowTitle('子窗口:用来发射信号')
    
            # 在布局中添加部件
            layout = QVBoxLayout(self)
    
            self.label = QLabel(self)
            self.label.setText('前者发射内置信号\n后者发射自定义信号')
    
            self.datetime_inner = QDateTimeEdit(self)
            self.datetime_inner.setCalendarPopup(True)
            self.datetime_inner.setDateTime(QDateTime.currentDateTime())
    
            self.datetime_emit = QDateTimeEdit(self)
            self.datetime_emit.setCalendarPopup(True)
            self.datetime_emit.setDateTime(QDateTime.currentDateTime())
    
            layout.addWidget(self.label)
            layout.addWidget(self.datetime_inner)
            layout.addWidget(self.datetime_emit)
    
            # 使用两个button(ok和cancel)分别连接accept()和reject()槽函数
            buttons = QDialogButtonBox(
                QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
                Qt.Horizontal, self)
            buttons.accepted.connect(self.accept)
            buttons.rejected.connect(self.reject)
            layout.addWidget(buttons)
    
            self.datetime_emit.dateTimeChanged.connect(self.emit_signal)
    
        def emit_signal(self):
            date_str = self.datetime_emit.dateTime().toString()
            self.Signal_OneParameter.emit(date_str)
    展开全文
  • PB数据窗口9种风格

    千次阅读 2018-10-29 11:21:59
    数据窗口的预览状态下可以调整字段的顺序,并且自动反馈到数据窗口的设计状态中,调整字段顺序时,对应的标签顺序也相应地自动调整。缺省情况下,字段不能随意移动,只能在detail band中做上下移动。这种显示样式...

    Grid:
    表格风格
    字段横向排列在detail band中,标签横向排列在header band中,和字段相对应,字段和字段之间有网格线分隔,类似于电子表格。在数据窗口的预览状态下可以调整字段的顺序,并且自动反馈到数据窗口的设计状态中,调整字段顺序时,对应的标签顺序也相应地自动调整。缺省情况下,字段不能随意移动,只能在detail band中做上下移动。这种显示样式的数据窗口布局整齐,但不能灵活地安排字段、标签、表头的布局,所以常用来显示数据或录入数据,而很少用来做报表。Grid显示样式的数据窗口中,表头只能和标签放置在同一个header band中,在放置表头处仍然有网格线。
    ----------


    Tabular: 
    列表(Tabular)风格
    在列表风格中,数据按列排列在数据窗口中,每列的上方都有一个标题,说明该列的数据。每屏显示的数据行数取决于数据窗口的大小,而且支持运行时由用户调整各列位置。另外,在每页中都可以显示页标题。列表风格的数据窗口常用于数据输入,有时也用于生成报表
    表格风格数据窗口中,数据的行与列之间通过网格线分隔,数据的每一项都位于其中一个网格中,运行时用户通过拖曳操作既能改变列的宽度,也能调整列的左右位置,但是,在设计数据窗口对象时我们不能移动列以及列标题的左右次序,这一点有别于列表风格和自由风格。表格风格的数据窗口既可用于数据输入,又能作为报表输出

    当刚刚创建这种样式的数据窗口时,字段、标签的布局和 Grid显示样式的数据窗口相同,都是横向排列的,但是字段之间没有网格线分隔。字段和标签的布局可以随意调整,在header band中的标签可以随意拖放到detail band中,detail band中的字段也可以拖动到header band中。这种显示格式的数据窗口布局安排非常灵活,开发人员可以根据需要设计字段和标签的布局,然后手工画线制作表格,在制作中国式报表时经常使用,虽然比较烦琐,但是表格比较美观,比较适合中国式报表的要求,另外,这种格式的数据窗口在数据录入、查询时也经常使用。
    ----------


    Group:
    分组(Group)风格
    Group主要用于分组 

    分组(Group)风格分组风格的数据窗口提供了一种对数据进行分组的简便途径,在这种风格下,数据被分成一个一个的组,组中可以带有统计数据。实际上,我们可以把它看成是带有分组特性的列表风格。当选择了此风格且定义了数据集后,系统将弹出“Group Report”对话框,在这个对话框中指定按哪些列进行分组。

    Group分组显示样式的数据窗口可以指定按哪个(或哪些)字段进行分组,可以用指定的分组条件将数据分组显示,并且允许为每组指定一些计算。例如,要显示某公司在各地区的销售数据,可以按地区分组,为每个分组指定统计计算,在地区改变时显示地区的销售总金额。
    当选择多个字段时,这几个字段共同作为分组的条件,而不是以每个字段都创建一个分组。使用Group类型只能创建一个分组,要创建多个分组必须在DataWindow画板中完成。
    ----------


    Freefrom:
    自由格式(Freeform)
    自由格式的显示样式十分灵活,所有字段前面都加有字段标题(称为标签),并且以垂直方式排列在数据窗口中。在数据窗口画笔里,我们能够根据需要灵活地安排字段、标签、以及其它对象的位置。一般情况下,自由格式的数据窗口一屏显示一条记录,常用于单记录输入

    前面讨论的三种显示样式都是一次可以显示多行数据的。对于比较重要的数据,用户可能需要一次只编辑一行这时可以使用Freefrom显示样式的数据窗口。该类型的数据窗口将标签放置在字段的左例,字段和标签放置在同一个detail band中,先从上到下再从左到右依次排列。实际上,这种显示样式的数据窗口布局也很灵活,可以随意安排字段和标签的位置。这种显示样式的数据窗口在卡片式数据的录入和显示方面也经常使用。
    ----------


    Label:
    标签风格
    Label主要用于标签
    标签风格的数据窗口以标签形式显示每行数据,用它可以制作各种标签。如果选择了标签风格,则在定义数据源后,还必须在“Specify LabelSpecifications”对话框中定义标签的各项参数。在这个对话框中,系统列出了许多预定义的通用邮件标签,我们可以从中选择一个。如果其中没有合适的格式,则完全能够进行手工调整,以满足特定的需求。

    如果用户想要生成邮件标签,可以使用Label显示样式的数据窗口来实现。
    ----------


    N-Up:
    这是可以在同一页上显示多列相同字段的一种特殊的显示样式。当要显示的字段比较少或者不同行之间的数据需要做比较时,经常使用这种显示样式。使用向导可以创建N-up显示样式的数据窗口,需要指定的一个重要参数是每行重复显示的字段的次数,也就是Number of rows per detail band,缺省为2。该参数的大小视需要显示的字段总长度和报表使用的打印纸宽度而定。N-up显示样式的数据从左到右显示。另外,当选中行数据时,并不能选中实际上看到的一整行,而是逻辑上的一行。
    ----------


    CrossTab:
    交叉列表

    交叉列表(Crosstab)风格交叉列表风格支持按行和/或按列分析数据,该风格的数据窗口对数据进行加工处理后以汇总形式展现出来。当选择了此风格并定义了数据集后,系统将弹出“Crosstab Definition”对话框,在这个对话框中分配交叉列表中的行、列及行列交叉点的数据值,通过双击分配后的行、列或值可以编辑相应的表达式。

    当需要做数据统计和分析时,最好使用CrossTab显示样式的数据窗口,虽然报表在显示格式方面不适合中国人的口味,但还没有哪个C/S数据库开发软件将数据统计分析做得如此之好。使用CrossTab显示样式可以创建复杂的分类统计表,不管是表头分类还是行分类。创建CrossTab显示样式的数据窗口时,有几个重要参数需要指定。这些重要参数是行、列和统计值。每个参数可以指定多个字段,也可以使用表达式。当指定多个字段(或表达式)时,字段的顺序决定在表中的分组顺序。比如,统计某销售公司某年各个月份各种产品、不同花色在各个地区的销售情况,可以用月份和地区作为列,用产品名称和花色作为行。在Columns列表框中按Month、Region的顺序加入字段,没有Month可以使用表达式Month(sales_date)来获取销售时的月份。Rows列表框中的字段对应数据窗口中左侧的表头,Columns列表框中的字段对应数据窗口中上面 表头,Values是出现在数据窗口表格单元中的统计值;Source Data列表框中是可以使用的字段,使用鼠标选中并拖动到相应的列表框即可。在Rows、Columns、Values三个列表框中都可以用鼠标双击已有字段,可以在接下来的对话框中输入组合表达式。比如,使用year作为Columns是可以的,也可以双击然后在上面的窗口中输入下面的表达式:year+"年"
    ----------


    Graph:
    统计图(Graph)风格
    统计图风格的数据窗口以统计图的形式表现数据,在这里,数据不是通过行、列一个个孤立地显示出来,而是以图形的方式呈现在用户面前。该风格的数据窗口提供了多种统计图,包括:面积图(Area)、条形图(Bar)、列形图(Column)、线形图(Line)、饼图(Pie)、散点图(Scatter)、堆积图(Stacked)以及上述图形的三维形式。

    Graph显示样式的数据窗口可以以多种图形样式将数据显示出来,例如饼图、柱状图、折线图等。Graph显示样式的数据窗口给用户的感觉是使用方便、表达直观。从开发者的角度来讲,创建Graph显示样式的数据窗口也是很简单的事情,所以在开发应用程序时不要忘记这费力不多却很受用户欢迎的显示样式。创建Graph显示样式的数据窗口时,最重要的参数是Category、Values及Series。在创建向导中可以指定这几个参数。指明这三个参数的操作很简单,在下拉列表框中选择合适的字段即可。Category可以理解成显示在横向坐标铀上的字段,Values可以理解成显示在纵向坐标轴上的字段,而Series是横向坐标轴上同组比较时的分组标准。
    ----------


    Composite:
    复合(Composite)风格
    复合风格的数据窗口没有自己的数据源,它通过特殊方式将其它数据窗口对象组合起来,从而创建形式更复杂的数据窗口。

        这种显示样式的数据窗口可以将多种类型的、多个逻辑上毫不相关的数据窗口放置到一起,是一种灵活的数据表现形式。因为Composite显示样式的数据窗口不允许修改其中的数据,所以不能用于数据录入和数据修改,只能在报表时使用这种显示祥式的数据窗口。使用这种显示样式的数据窗口创建报表,经常将对同一问题不同表现形式的数据窗口或者是关系紧密的数据放到一起。例如,将几个关键数据的统计结果以Graph显示样式显示在最上面,用CrossTab类型的数据窗口将比较详细的数据统计结果显示在中间,然后是Grid类型的详细数据,这样的报表数据表现能力要比任何单一的一种数据窗口要强得多。
    ----------


    RichText:
    超文本(RichText)风格
    RichText主要用于处理一些大文本
    超文本风格的数据窗口能够处理超文本数据,它可以利用Windows系统的字体、字型、颜色等属性以丰富多采的形式显示与编辑超文本,并且能够将数据库中的数据插入到超文本文档中。

    RichText祥式的数据窗口使数据库中的数据和文字可以在一起排版,可以方便地特数据库中的数据和文字内容一起形成文档、报告等;提供了很强的文字编辑处理能力,可以很方便地处理文字的多种格式:可以开发更有表现力的应用系统,自动生成报告、文档资料,省去了使用PowerBuilder的应用程序却需要切换到其他文字处理软件中的麻烦。
    ----------


    OLE 2.0:

    OLE 2.0风格的数据窗口既能够显示非数据库数据(比如Word文档),也能够显示数据库中的BLOB(二进制大对象)列。

    OLE是Object Link and Embedding的字头缩写,表示对象链接和嵌入。使用这种技术,可以将其他软件的功能引入到PowerBuilder开发的应用程序中。PowerBuilder中不仅提供了OLE 2.0显示样式的数据窗口,而且在窗口中提供了OLE 2.0控件。例如,在数据库中保存的图像在OLE 2.0显示样式的数据窗口中,可以借助一些专门的图像处理软件来处理,并可以把处理结果返回保存到数据库中。只有当数据库的表中包含blob类型的字段时,才有必要使用OLE 2.0显示样式的数据窗口。将blob类型的字段作为OLE 2.0列,在处理其中的数据时,可以直接触发调用相关的软件进行处理,并能够将处理结果返回保存到数据库中。例如,某字段中保存的是Excel文档,可以创建OLE 2.0显示样式的数据窗口,当双击该字段时可以调用Excel,然后在Excel中编辑处理数据,保存编辑结果返回到数据窗口时,可以将结果反映到数据窗口中。创建OLE 2.0显示样式的数据窗口,需要指定三类参数。Source Data框中显示的是所有可用字段,可以使用鼠标选中并拖动到其他两个列表框中;Group by列框中显示的是用来分组的字段,由于OLE 2.0数据窗口的特殊性,它的分组不在设计时创建,只能在向导中创建;Target Data框中显示的是在数据窗口中要显示的字段,使用了分组,则对该框中的字段做统计(字符串型的列将统计记录数,数值型的列将统计累加和),没有使用分组,则直接显示它们的值。接下来要设置的是和OLE对象关系紧密的内容

    展开全文
  • pb从数据窗口获得数据的方法总结

    千次阅读 2015-01-17 15:06:35
    pb从数据窗口获得数据的方法总结 pb从数据窗口获得数据的方法总结(2008-05-09 13:03:51)标签:it 分类:学习笔记 pb从数据窗口获得数据的方法总结 通过PowerBuilder的数据窗口对象属性,我们可以指定一定...

    pb从数据窗口获得数据的方法总结

    pb从数据窗口获得数据的方法总结(2008-05-09 13:03:51)标签:it   分类:学习笔记
    pb从数据窗口获得数据的方法总结
    通过PowerBuilder的数据窗口对象属性,我们可以指定一定格式的表达式来直接从数据窗口中获得数据。这种直接的数据操作方法让我们能只需一条语句而不用调用许多方法,就可得到一定量甚至大量的数据。操作数据的表达式大致可分为三种,下面逐一介绍。
    ---------------------------------------------------------------------
    1)在知道列或计算域名时得到数据得到某列中一行或全部的值,
    表达式:(如果rownum忽略,则可得到缓冲区或数据源的值)
    dwcontrol.Object.columnname {.buffer } {.datasource } { [ rownum ] }
    其中datasource 参数表示数据源,它有两个可选项,Current(缺省)和Original,由此参数我们可以指定数据是从当前数据窗口上还是从数据库中得到。对于计算域,它不能被改变也没有当前值,所以我们必须指定为此参数为Original。
    示例:
    因为缺省设置是在Primary缓冲区的当前值,下面语句是等价的,都是从第一行得到emp_name列的值
    dw_1.Object.emp_name[11.Object.emp_name.Primary.Current[11.Object.emp_name[1] = "国防科技大学先进制造中心"
    下面语句得到所有emp_name列的值,并将它们放入数组中
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Current
    下面语句得到emp_name列在filter缓冲区的所有当前值
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Filter
    下面语句得到emp_name在filter缓冲区的初始值(数据库中的值)
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Filter.Original
    下面语句得到emp_name列在delete缓冲区的第14行的当前值
    string ls_name
    ls_name = dw_1.Object.emp_name.Delete[14]This statement gets the original
    下面语句得到emp_name列在delete缓冲区的第14行的初始值(数据库中的值)
    string ls_name
    ls_name = dw_1.Object.emp_name.Delete.Original[14]
    下面语句得到review_date计算域的所有值
    string ld_review[]
    ld_review = dw_1.Object.review_date.Original
    得到被选择项的值
    表达式:dwcontrol.Object.columnname {.Primary }{.datasource }.Selected
    示例:
    由于Primary缓冲区是程序本选择项所在的唯一缓冲区并且当前数据是缺省的,下面的语句作用是等价的,它们实现从emp_name列中得到被选中行的值。
    dw_1.Object.emp_name.Selected
    dw_1.Object.emp_name.Primary.Selected
    dw_1.Object.emp_name.Current.Selected
    dw_1.Object.emp_name.Primary.Current.Selected
    下面语句从数据库中得到被选择行的数据
    dw_1.Object.emp_name.Original.Selected
    dw_1.Object.emp_name.Primary.Original.Selected
    下面语句设置emp_name列的第一个被选中行的值为空字符串
    string ls_empty[]
    ls_empty[1] =1.Object.emp_lname.Selected = ls_empty
    下面语句可得到emp_name列被选中行的初始值(从数据库中检索出的值),并将它放入一个字符串数组
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Original.Selected
    得到一定范围的值
    返回指定列的一个范围的行的值,并将它们放入数组
    表达式:
    dwcontrol.Object.columnname {.buffer } {.datasource } [ startrownum,
    endrownum ]
    示例:
    由于Primary缓冲区和当前数据是缺省选项,下面的语句式等价的
    dw_1.Object.emp_name[11,201.Object.emp_name.Primary[11,201.Object.emp_name.Current[11,201.Object.emp_name.Primary.Current[11,20]
    下面语句将emp_name列从11行到20行的值设置为空字符串
    string ls_empty[]
    ls_empty[1] =1.Object.emp_name[11,20] = & {"","","","","","","","","",""}
    ---------------------------------------------------------------------
    下面语句的得到emp_name列的初始值,并将它们放入一个字符串数组
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Original[11,20]
    ---------------------------------------------------------------------
    下面语句得到emp_name列在过滤缓冲区从5行到8行的当前值,并且将它们放入到数组中
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Filter[5,8]
    ---------------------------------------------------------------------
    下面语句得到emp_name列在过滤缓冲区从5行到8行的初始值,并且将它们放入到数组中
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Filter.Original[5,8]
    ---------------------------------------------------------------------
    下面语句得到emp_name列在删除缓冲区从50行到200行的当前值,并且将它们放入到数组中
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Delete[50,200]
    ---------------------------------------------------------------------
    下面语句得到emp_name列在删除缓冲区从50行到200行的初始值,并且将它们放入到数组中
    string ls_namearray[]
    ls_namearray = dw_1.Object.emp_name.Delete.Original[50,200]
    ---------------------------------------------------------------------
    2)得到已知列号列的值
    得到指定行号列号的值
    表达式:
    dwcontrol.Object.Data {.buffer } {.datasource } [ rownum, colnum ]
    示例:
    由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行,第二列的数据
    dw_1.Object.Data[1,21.Object.Data.Primary.Current[1,2]
    ---------------------------------------------------------------------1.Object.Data.Filter.Original[1,2] = 0
    ---------------------------------------------------------------------
    得到一定范围行的数据
    表达式:
    dwcontrol.Object.Data {.buffer } {.datasource } [ startrownum, startcolnum, endrownum, endcolnum ]
    示例:
    ---------------------------------------------------------------------
    由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行到第十行,第一列到第四列的值
    dw_1.Object.Data[1,1,10,41.Object.Data.Primary.Current[1,1,10,4]
    ---------------------------------------------------------------------
    下面语句得到employee Ids和 last names列在delete缓冲区的所有行的值,Ids和names列是第一第二列。得到的数据放在名为str_namelist的一个结构中,此结构有两个属性,整形的id和字符串形的lastname。Ids和names被存放在文件deleted.txt中。
    integer li_fileNum
    long ll_deletedrows
    str_namelist lstr_namelist[]
    ll_deletedrows = dw_1.DeletedCount()
    lstr_namelist =1.Object.Data.Delete[1,1, ll_deletedrows,2= FileOpen("C:\HR\DELETED.TXT", &
    LineMode!, Write!)
    FOR ll_count = 1 to UpperBound(lstr_namelist)
    FileWrite(li_fileNum, &
    String(lstr_namelist.id) +++ &
    "~r~n")
    NEXT
    FileClose(li_fileNum)
    ---------------------------------------------------------------------
    下面的语句使Ids和last names列的数据为NULL
    long ll_n
    str_namelist lstr_namelist[]
    SetNull(lstr_namelist[11= 2 to dw_1.RowCount()
    lstr_namelist[ll_n] = lstr_namelist[11.Object.Data[1,1, dw_1.RowCount(),2] = lstr_data
    3)得到整行数据
    得到数据窗口上的某行或全部行的数据
    表达式:
    dwcontrol.Object.Data {.buffer } {.datasource } { [ rownum ] }
    示例:
    ---------------------------------------------------------------------
    由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到Primary缓冲区第五行的当前数据
    dw_1.Object.Data[51.Object.Data.Primary.Current[5]
    下面语句将数据窗口Primary缓冲区的当前值放入到一个结构数组中
    any la_dwdata
    la_dwdata = dw_1.Object.Data
    下面语句得到数据窗口Delete缓冲区的当前值,并将它放入到一个结构数组中
    any la_dwdata
    la_dwdata = dw_12的Primary缓冲区的当前值覆盖嵌套报表的第二行的数据,在数据窗口dw_21.Object.NestRep[2].Object.Data = dw_2.Object.Data
    ---------------------------------------------------------------------
    得到选中行的数据
    表达式:
    dwcontrol.Object.Data {.Primary } {.datasource } .Selected
    示例:
    由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到选中行的数据
    dw_11.Object.Data.Primary.Selected
    dw_1.Object.Data.Current.Selected
    dw_1.Object.Data.Primary.Current.Selected
    =====================================================================1.Object.Data.Original.Selected
    dw_1.Object.Data.Primary.Original.Selected
    ---------------------------------------------------------------------
    下面语句得到dw_2中Primary缓冲区选中行的当前值,然后放到dw_11.Object.useroptions.Object.Data = dw_2.Object.Data.Selected
    4)从Crosstab数据窗口中获得点击域名和域值
    对于Crosstab类型的数据窗口,我们在前面已做了简要的介绍,但由于它的行列都可以随着后台数据库存放数据的改变而发生改变,所以在想得到它的某个行列定义的值时不能采用一般的方法,如GetItem××××和点操作符。
    通过数据窗口画板可以看到所有的列具有同样的列名,在程序运行时它们会自动的*列名后加后缀的方法进行区别,格式为:列名_列号~t行号,列号和行号之间通过‘~t’分隔,列名和列号通过‘_’分隔。因此如果我们需要detail栏的任何一列的值,就需要将得到的信息进行解析,提取出选择的列名,列号和行号,然后才可以通过一般得数据的方法在数据窗口中获得需要的数据。下面我们以一个具体的例子来解说上面采用的方法。
    作用:在数据窗口(数据源为Crosstab)的Cliked事件中编程,当点击事件发生后将获得点击交*//定义变量
    string ls_detail, ls_name, ls_col
    int li_pos, li_len, li_row, li_col
    //判断用户点击处是否为detail栏,如不是则退出
    if left(getbandatpointer(),6) <> "detail" then return
    //= geto b j e c tatpointer()
    //= Object.#2.Name
    //将第二列列名和前面点击得到的点击域信息进行比较,如不是点击的第二列则退出
    if left(ls_detail,len(ls_name)) <> ls_name then return
    //== len(ls_detail)
    //= right(ls_detail, li_len - len(ls_name))
    //得到点击域的列号
    if left(ls_col,1) <> "_" then
    li_col = 2
    else
    li_pos == integer(mid(ls_col,2,li_pos - 1) ) + 2
    end if
    //显示出点击域的值
    string(getitemnumber(li_row,li_col))

    展开全文
  • PB数据窗口对象值获取

    千次阅读 2016-03-27 23:17:47
    通过PowerBuilder的数据窗口对象属性,我们可以指定一定格式的表达式来直接从数据窗口获得数据。这种直接的数据操作方法让我们能只需一条语句而不用调用许多方法,就可得到一定量甚至大量的数据。操作数据的表达式...
  • pb中数据窗口函数小结(转)

    千次阅读 2016-03-19 17:25:52
    pb中数据窗口函数小结(转) 一、连接数据库 连接数据库也就是指定事务对象。PowerBuilder提供了两个函数:SetTrans()和SetTransObject()。 语法格式: dw_control.SetTrans(TransactionObject) dw_...
  • SQL Server 2008数据类型

    千次阅读 2018-08-27 09:56:09
    在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创
  • PB数据窗口控件之函数

    千次阅读 2014-07-10 11:58:14
    功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。 返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。 ★Retrieve 语法...
  • PB数据窗口控件-datawindow

    千次阅读 2016-03-17 23:28:47
    PB数据窗口控件-datawindow (2011-09-17 14:35:17) 标签: it 分类: IT编程技术技巧 PB9.0提供了28个属性、35个默认事件、162个函数。注意与数据窗口对象的区分。 【其他】 ■脚本...
  • 获取下拉数据窗口显示列、其他列的值 [code lang=”JS”] /* Function:getdddwitemany 获取下拉数据窗口显示列、其他列的值 Argu1:datawindow adw_source 数据窗口 Argu2:long al_row 数据窗口中的行 Argu3:s...
  • <转>在PB中控制数据窗口列的修改属性 在编制管理信息应用系统中,一般都会遇到一个共同问题,那就是如何根据不同情况去控制表中的数据列,比如对于同一DATAWINDOW不同的用户有不同的操作(如对于数据录入人员可以...
  • pb数据窗口设置操作

    千次阅读 2014-04-17 21:44:01
    如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下: 将每一列的 Protect 属性设置为: If( IsRowNew(), 0, 1) ) 在 PowerScript 中可以动态修改...
  • 在pyqt编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,一般是添加一个按钮,调用对话框,在对话框中进行参数的选择,关闭对话框将参数返回给主窗口 ...
  • PowerBuilder数据窗口对象

    千次阅读 2015-01-04 12:43:56
    数据窗口对象的数据源 ---------- PB提供5种数据源:Quick Select(快速选择类型)、SQL Select(SQL选择类型)、Query(查询类型)、External(外部类型)和Stored Procedure(存储过程类型) ---------- Quick Select ...
  • PB数据窗口对象之显示样式

    千次阅读 2014-07-04 10:55:43
    数据窗口对象显示样式有11种:Grid、Tabular、Group、Freefrom、Label、N-Up、Crosstab、Graph、Composite、RichText、OLE2.0 ---------- Grid: 字段横向排列在detail band中,标签横向排列在headerband中,和...
  • SQL Server 数据类型

    千次阅读 2018-04-04 16:48:15
    SQL Server 2014数据类型(1)在SQL Server中,数据类型是创建表的基础。在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,也必须基于一种标准...
  • 获取数据窗口所有字段的字段名

    千次阅读 2012-08-08 11:04:57
    //获取数据窗口的字段名称 If ls_ColName <> 'gwgz' AND ls_ColName <> 'qjj' AND ls_ColName <> 'wpbt' AND & ls_ColName <> 'zfgjj' AND ls_ColName <> 'dkdj' AND ls_ColName <> 'fzf' AND & ls_...
  • PB数据窗口说明大全

    千次阅读 2015-02-02 23:33:03
    数据窗口控件 数据窗口控件-datawindow PB9.0提供了28个属性、35个默认事件、162个函数。注意与数据窗口对象的区分。 【其他】 ■脚本的执行效率 *尽量不要在RetrieveRow事件下编写脚本(包括注释)。 *如果...
  • 在不同的窗口之间传参有两种常用的方式:在自定义对话框之间通过属性传参在窗口之间使用信号与槽机制传参多窗口数据传递:调用属性'''【简介】对话框关闭时返回值给主窗口 例子'''from PyQt5.QtCore import *from ...
  • *获取字段的类型(Coltype属性) 字段的ColType属性是一个非常有用的属性,使用该属性可以在程序运行时获取字段的类型。但是不能在运行时修改该属性。下面是它的语法: 直接引用:dw_1.object.object.objectname....
  • PB,pb缓冲区,filter detete之后不更新update,PB-数据窗口缓冲区与数据修改状态
  • PyQt5-多窗口数据传输

    2020-12-22 14:02:33
    #窗口之间数据传递(通过属性方式)from PyQt5.QtWidgets import QDialogButtonBox, QDateTimeEdit,QDialog,QComboBox,QTableView,QAbstractItemView,QHeaderView,QTableWidget, QTableWidgetItem, QMessageBox,...
  • 计算域是指在数据窗口的设计状态下添加到数据窗口中的Computed Field部件,它是一个数据窗口部件,具有部件的属性特征。计算字段是指在数据窗口对应的SQL语句中添加的表达式,计算字段是一个字段,它具有字段的属性...
  • python滑动窗口处理时序数据

    千次阅读 2019-12-25 18:20:34
    使用库sklearn, pandas, numpy 读取数据 读取日期格式的数据,转化为DateFrame,如 2019-01-02 00:00:01.001 import pandas as pd df = pd.read_csv(file_path,#... names=['date', 'value'],#表头名称 index_col...
  • sql server 2008 的数据类型大全

    千次阅读 2021-03-31 11:13:54
    数据库sql server 的数据类型大全,最全的sql里面各种数据大小使用等
  • PB获取数据窗口字段列名和标题名

    千次阅读 2012-08-08 13:24:14
    w_sys_tip.st_info.text = '系统正在比对上月数据,请耐心等候...' w_sys_tip.hpb_bar.MaxPosition = ll_rowcount + 1 Int li_cnt,li_Count String ls_ColName Decimal ldc_Data String ls_col[], ls_value[] for...
  • 窗口函数也是基于结果集计算,与聚合函数不同的是窗口函数会把计算后的结果合并到原来的结果集上,返回多行并保持与结果集相同的行数。 可以使用窗口函数的业务场景: 排名问题:比如每个部门按业绩来排名 topN问题...
  •  虽然Visual Basic .Net中提供了Date数据类型来处理时间日期类型,但在实际中往往并不使用它,因为它的定义非常麻烦,加上时间日期类型结构相当复杂,对于很多初学者往往会出现错误。下面就是在Visual Basic .Net中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,238
精华内容 34,095
关键字:

数据窗口获取date类型数据