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

时间:2008-09-19 16:01:52

标签: visual-studio vb6 crystal-reports

我最近继承了一个连接到sql server数据库的旧的visual basic 6 / crystal reports项目。当我尝试运行项目时,我得到的错误消息(错误#-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或水晶报告方面确定我在这里缺少什么?

更新:

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

当我运行MsgBox(ParamDef.Value)时,它也会显示为空白且缺少相同的字符串错误。我也找不到关于craxdrt.ParameterFieldDefinition类的任何文档,以查看可用的其他隐藏函数。当我看到方法和属性变量列表时,它不会将SetCurrentValue列为其中一个函数。 关于这个的任何想法?

6 个答案:

答案 0 :(得分:1)

所选变量的值是多少?

Table.SetLogOnInfo ConnName,DBName,user,pass
DomainName =已选择
'设置参数字段

如果它不是字符串,则可能是问题所在。 Crystal期望一个字符串变量,当它没有收到它期望的内容时,就会抛出错误。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

,也会发生这种情况

原因是水晶报告8.5将长度超过255个字节的所有字符串视为备注字段。

我建议您升级到水晶报告XI - API没有那么大改变。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

以下是设置我们使用的参数的实例:

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的语法相同