[英]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报告方面,是否有人知道如何诊断此问题以确定我在这里缺少什么?
更新:
当我运行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.