2008-09-19 76 views
1

我最近继承了一个连接到sql server数据库的旧的visual basic 6/crystal reports项目。当我尝试运行该项目我得到(错误#-2147191803一个字符串这里需要)的错误信息,似乎在下面的代码将被缩小到.Printout命令:VB6/Crystal Report 8.5错误:这里需要一个字符串

 
     '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变量设置“公司名称”,当它到达提示打印的行时,它会抛出错误。我猜水晶报告没有收到“公司名称”来正确运行水晶报告。是否有人知道如何诊断这个......无论是在vb6还是水晶报告方面,以确定我在这里失踪的东西?

UPDATE:

  • 插入的CStr的(所选择的)来强制域名是一个字串
  • 插入msgboxes到for循环的上方和.setcurrentvalue线以下
  • 插入案“{?公司名称}“声明,看看是否有助于设置值
  • 尝试.AddCurrentValue和.SetCurrentValue函数建议由其他论坛网站
  • 排除了这是我的开发environement ..加载它在另一台机器上完全相同的vb6水晶报告8.5运行在winxp prof sp2上并出现相同的错误。

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

回答

1

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

Table.SetLogOnInfo CONNNAME,数据库名,用户,通过
域名=选择
“设置参数字段

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

1

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

1

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

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

谢谢,但这并没有真正的帮助。它设置参数的方式似乎完全不同于.NET – phill 2008-09-23 16:32:34

0

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

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

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

+0

我将检查列变量类型。 至于升级,我已经尝试在水晶报表xi中运行它,它会产生一个运行时错误。它与Crystal Report Engine Library DLL有关,它在这两个版本之间进行了修改 感谢您的建议! – phill 2008-09-23 15:47:20

0

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

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

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

相关问题