繁体   English   中英

VB6 / Crystal Report 8.5错误:此处需要一个字符串

[英]VB6 / Crystal Report 8.5 error: A string is required here

我最近继承了一个旧的Visual Basic 6 / Crystal Reports项目,该项目连接到sql server数据库。 当我尝试运行项目时,收到的错误消息(错误代码-2147191803这里需要一个字符串)似乎在以下代码中缩小为.Printout命令:

'Login to database
        Set Tables = Report.Database.Tables
        Set Table = Tables.Item(1)

        Table.SetLogOnInfo ConnName, DBName, user, pass
        DomainName = CStr(selected)
        'Set parameter Fields
            'Declare parameter holders
            Set ParamDefs = Report.ParameterFields
            'Store parameter objects
            For Each ParamDef In ParamDefs
                With ParamDef
                    MsgBox("DomainName : " + DomainName)
                    Select Case .ParameterFieldName
                        Case "Company Name"
                        .SetCurrentValue DomainName

                    End Select

                    Select Case .Name 
                         Case "{?Company Name}" 
                         .SetCurrentValue DomainName
                    End Select 
                    'Flag to see what is assigned to Current value
                    MsgBox("paramdef: " + ParamDef.Value)
                End With
            Next

        Report.EnableParameterPrompting = False

        Screen.MousePointer = vbHourglass
        'CRViewer1.ReportSource = Report
        'CRViewer1.ViewReport


        test = 1
        **Report.PrintOut**

        test = test + 3

        currenttime = Str(Now)
        currenttime = Replace(currenttime, "/", "-")
        currenttime = Replace(currenttime, ":", "-")
        DomainName = Replace(DomainName, ".", "")

        startName = mPath + "\crysta~1.pdf"
        endName = mPath + "\" + DomainName + "\" + DomainName + " " + currenttime + ".pdf"
        rc = MsgBox("Wait for PDF job to finish", vbInformation, "H/W Report")

        Name startName As endName
        Screen.MousePointer = vbDefault
    End If

在运行期间,将显示该表单,ParamDef变量将设置“公司名称”,并且当它到达提示打印的Report.PrintOut行时,将引发错误。 我猜水晶报表没有收到“公司名称”以正确运行水晶报表。 在vb6或Crystal报告方面,是否有人知道如何诊断此问题以确定我在这里缺少什么?

更新:

  • 插入的CStr(selected)强制DomainName为字符串
  • 将msgboxes插入.setcurrentvalue行上方和下方的for循环中
  • 插入案例“ {?Company Name}”语句以查看是否有助于设置值
  • 尝试使用其他论坛网站建议的.AddCurrentValue和.SetCurrentValue函数
  • 排除它是我的开发环境。将其加载到另一台计算机上,该计算机在winxp prof sp2上运行的vb6 crystal报告8.5完全相同,并且出现相同的错误。

当我运行MsgBox(ParamDef.Value)时,它也出现空白,并出现相同的字符串错误。 我也找不到关于craxdrt.ParameterFieldDefinition类的任何文档,以查看还有哪些其他隐藏函数可用。 当我看到方法和属性变量的列表时,它没有将SetCurrentValue列为功能之一。 有什么想法吗?

您选择的变量的值是多少?

Table.SetLogOnInfo ConnName,DBName,用户,传递
域名=已选择
'设置参数字段

如果不是字符串,则可能是问题所在。 Crystal需要一个字符串变量,当它没有收到期望的字符串时,它将引发错误。

selected是从带有下拉选择框的表单中获取的字符串变量输入。 我之前在此处放置了一个消息框,以确保该变量在Report.Printout之前通过,并且确实出现了。 DomainName变量也声明为字符串类型。

这是我在Crystal中设置参数的方法(.NET附带的-不知道它是否对您有帮助)。

Dim dv As New ParameterDiscreteValue
dv.Value = showphone
rpt.ParameterFields("showphone").CurrentValues.Add(dv)

如果更改了报表中使用的字符串列的长度,使其超过255个字节,则在Crystal报表8.5中可能会发生这种情况。 如果将列类型从varchar更改为nvarchar(双字节字符串!),也会发生这种情况。

原因是Crystal Report 8.5将所有长度超过255字节的字符串都视为备注字段。

我建议您升级到Crystal Report XI-API并没有太大改变。

从我的角度来看,如果在Crystal Reports设计器中打开报表并切换到预览模式,则应该收到相同的错误消息。 设计器还应向您显示一条消息,其中包含问题的确切位置,例如,不能视为字符串的字段。

问题不在于不能打印长度超过255个字节的字段。 问题是,不能在公式中使用超过255个字节的字段作为排序标准...

这是设置我们使用的参数的实时示例:

For Each CRXParamDef In CrystalReport.ParameterFields
  Select Case CRXParamDef.ParameterFieldName
    Case "@start"
      CRXParamDef.AddCurrentValue CDate("1/18/2002 12:00:00AM")
    Case "@end"
      CRXParamDef.AddCurrentValue Now
  End Select
Next

这实际上是用VBScript编写的用于打印Crystal 8.5报告的示例,但是语法与VB6相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM