Libreoffice basic 基本数据表表单将不显示计算字段

Libreoffice basic 基本数据表表单将不显示计算字段,libreoffice-basic,openoffice-basic,openoffice-base,libreoffice-base,Libreoffice Basic,Openoffice Basic,Openoffice Base,Libreoffice Base,我有一个数据表表单,它有一个计算字段列。但是,即使字段具有正确的值,也不会显示该字段。所涉及的字段是“numRisk”: 从加载表单时触发的以下例程调用子例程: Sub FromListForm(Event as Object) Dim Form As Object Dim TodaysDate As New com.sun.star.util.Date Dim CurrDate As Date Form=Event.Source.getByName("M

我有一个数据表表单,它有一个计算字段列。但是,即使字段具有正确的值,也不会显示该字段。所涉及的字段是“numRisk”:

从加载表单时触发的以下例程调用子例程:

Sub FromListForm(Event as Object)
     Dim Form As Object
     Dim TodaysDate As New com.sun.star.util.Date
     Dim CurrDate As Date
     Form=Event.Source.getByName("MainForm_Grid")
     Form.RowSet.first()
     Do Until Form.RowSet.isAfterLast()
        Get_Contract(Form)
        Get_Broker_Comm(Form)
        Calculate_Risk(Form)
        If isEmpty(Form.getByName("OrderDate").Date) Then
           CurrDate = Date()
           TodaysDate.Day = Day(CurrDate)
           TodaysDate.Month = Month(CurrDate)
           TodaysDate.Year = Year(CurrDate)
           Form.getByName("OrderDate").CurrentValue = TodaysDate
        End If
        Form.RowSet.next()
     Loop
     Form.RowSet.last()
End Sub

还有一种更有效的方法来循环行吗?由于这看起来很慢,我可以看到在处理每一行时,行指针在表中向下移动。

如果我理解正确,您是在尝试将单个值输入tablegrid控件列中的每个单元格吗?我认为那是不可能的

在tablegrid控件中,所有值都必须来自基础查询。我建议编写一个查询来执行这些计算,并将该查询用作表单的基础-这将解决显示计算结果的问题,并提高表单的加载速度(因为确定查询结果的数据库逻辑几乎总是比逐行执行宏更有效)


或者,您可以将计算字段设置为独立字段,仅显示tablegrid控件当前选定行的计算结果。在这种情况下,“form loaded”事件只会对第一行进行计算,并且每次更改行选择时都会触发计算宏。

感谢您的支持。我将计算字段(最初99%的时间是在另一个屏幕上计算的)设置为表futures\U orders中的字段。现在整件事都很顺利。我知道你不应该那么做,但是,不管怎样。
Sub FromListForm(Event as Object)
     Dim Form As Object
     Dim TodaysDate As New com.sun.star.util.Date
     Dim CurrDate As Date
     Form=Event.Source.getByName("MainForm_Grid")
     Form.RowSet.first()
     Do Until Form.RowSet.isAfterLast()
        Get_Contract(Form)
        Get_Broker_Comm(Form)
        Calculate_Risk(Form)
        If isEmpty(Form.getByName("OrderDate").Date) Then
           CurrDate = Date()
           TodaysDate.Day = Day(CurrDate)
           TodaysDate.Month = Month(CurrDate)
           TodaysDate.Year = Year(CurrDate)
           Form.getByName("OrderDate").CurrentValue = TodaysDate
        End If
        Form.RowSet.next()
     Loop
     Form.RowSet.last()
End Sub