代码之家  ›  专栏  ›  技术社区  ›  David Huthaifah Kholi

Crystal Reports公式类型不匹配

  •  0
  • David Huthaifah Kholi  · 技术社区  · 7 年前

    我正在从一个 VB6 应用程序(Crystal Reports 6)和我需要传递两个公式的值。

    要做到这一点,我必须

    crExport.Formulas("@thisYear") = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 5, 2)
    crExport.Formulas("@thisPeriod") = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 7, 2)
    

    但是,当我运行应用程序并尝试查看报告时,会得到一个运行时错误

    类型不匹配

    一旦我到达第一条公式线。是什么导致了这个问题?

    我尝试从公式名称中删除@符号,在分配之前,我已经将这两个值都转换为整数,但这两个值都产生了相同的错误。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Bill Hileman    7 年前

    下面是我如何为我的老化报告设置公式值的示例:

    ' Global Declarations
    Public crxApp As CRAXDRT.Application
    
    Public crxRpt As CRAXDRT.Report
    Public crxTable As CRAXDRT.DatabaseTable
    Public crxFormula As CRAXDRT.FormulaFieldDefinition
    

    老化报告部分:

      For Each crxFormula In crxRpt.FormulaFields
        Select Case crxFormula.FormulaFieldName
          Case CR_FORMULA_COMPANY_NAME
            crxFormula.Text = QuoteIt(Trim(strCompanyName(1)))
          Case CR_FORMULA_GROUP_1_HIGHLIGHT
            crxFormula.Text = Replace$(strHCGroup(1), " ", "")
          Case CR_FORMULA_GROUP_2_HIGHLIGHT
            crxFormula.Text = Replace$(strHCGroup(2), " ", "")
          Case CR_FORMULA_GROUP_3_HIGHLIGHT
            crxFormula.Text = Replace$(strHCGroup(3), " ", "")
          Case CR_FORMULA_GROUP_4_HIGHLIGHT
            crxFormula.Text = Replace$(strHCGroup(4), " ", "")
          Case CR_FORMULA_GRAND_HIGHLIGHT
            crxFormula.Text = Replace$(strHCGrand, " ", "")
          Case "Processing Date"
            crxFormula.Text = "Date(" & QuoteIt(Format(dtpProcDate.Value, "Short Date")) & ")"
          Case "Days Col 1"
            crxFormula.Text = CStr(txtPeriod(0).Value)
          Case "Days Col 2"
            crxFormula.Text = CStr(txtPeriod(1).Value)
          Case "Days Col 3"
            crxFormula.Text = CStr(txtPeriod(2).Value)
          Case "Days Col 4"
            crxFormula.Text = CStr(txtPeriod(3).Value)
          Case "Age Type"
            Select Case True
              Case optAgingType(0).Value
                crxFormula.Text = QuoteIt(optAgingType(0).Tag)
              Case optAgingType(1).Value
                crxFormula.Text = QuoteIt(optAgingType(1).Tag)
              Case optAgingType(2).Value
                crxFormula.Text = QuoteIt(optAgingType(2).Tag)
              Case optAgingType(3).Value
                crxFormula.Text = QuoteIt(optAgingType(3).Tag)
            End Select
          Case "Summary"
            crxFormula.Text = IIf(optReportType(1).Value, "True", "False")
        End Select
        crxFormula.Check blnFormulaOK, strFormulaErr
        If Not blnFormulaOK Then
          MsgBox CR_FORMULA_ERROR_TEXT & crxFormula.FormulaFieldName & vbNewLine & vbNewLine & _
                 strFormulaErr & vbNewLine & vbNewLine & _
                 Trim(crxFormula.Text), vbCritical, CR_FORMULA_ERROR_TITLE
          Exit For
        End If
      Next crxFormula
    
        2
  •  0
  •   David Huthaifah Kholi    7 年前

    解决这个问题的方法是使用公式的索引而不是名称来设置值。

    所以在这种情况下

    crxReport.FormulaFields(0).Text = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 5, 2)
    crxReport.FormulaFields(1).Text = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 7, 2)