基础数据表单不会显示计算字段

时间:2015-11-10 21:44:19

标签: libreoffice-basic openoffice-basic openoffice-base libreoffice-base

我有一个数据表表单,其中包含一个计算字段列。但是,即使字段具有正确的值,也不会显示该字段。有问题的字段是" numRisk":

Sub Calculate_Risk (Form As Object)
    Dim OrderPrice, IfDonePrice, TotBrSymComm, BrComm, Risk As Double
    Dim Symbol As String
    Dim IntRateMult, noContracts As Integer
    If MinTick = 0 OR Rate = 0 Then
       Exit Sub
    End If
    Symbol = RTrim(Form.getByName("txtSymbol").CurrentValue)
    If Symbol = "" Then
       Exit Sub
    End If
    OrderPrice = Form.getByName("fmtOrder_Price").CurrentValue
    IfDonePrice = Form.getByName("fmtIf_Done_Price").CurrentValue
    noContracts = Form.getByName("fmtNo_Contracts").CurrentValue
    If NOT USIntRates Then
       Risk = ABS(OrderPrice - IfDonePrice) / MinTick
    Else
       Risk = ABS(OrderPrice\1 - IfDonePrice\1) * MinTick
       IntRateMult = IIf(Symbol = "FV" OR Symbol = "TU",400, 200)
       Risk = ABS(Risk - IntRateMult * ABS(OrderPrice - OrderPrice\1
       IfDonePrice + IfDonePrice\1)) 
    End If
    Risk = Risk * MinTickVal / Rate
    TotBrSymComm = BrSymComm + BrSymCommAud
    BrComm = IIf(TotBrSymComm = 0, BrCommission, BrSymCommAud + BrSymComm/Rate)
    Risk = noContracts*(Risk + BrComm * 2)
    Form.getByName("numRisk").Value = Risk
 End Sub

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

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

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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您是否尝试将单个值输入到tablegrid控件的列中的每个单元格中?我不相信这是可能的。

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

或者,您可以将计算字段设置为独立字段,仅显示tablegrid控件的当前选定行的计算结果。在这种情况下,"表格已加载" event只会对第一行进行计算,每次行选择改变时都会触发计算宏。