【问题标题】:Base data sheet form will not display calculated Field基本数据表表单将不显示计算字段
【发布时间】:2015-11-10 21:44:19
【问题描述】:

我有一个包含计算字段列的数据表表单。但是,即使它具有正确的值,该字段也不会显示。有问题的字段是“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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Lyrl。我将计算字段(最初 99% 的时间在另一个屏幕上计算)作为 futures_orders 表中的一个字段。整个事情现在完美无缺。我知道你不应该这样做,但是嘿 - 无论如何。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2021-11-10
    • 2017-09-30
    相关资源
    最近更新 更多