我最近继承了一个连接到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或水晶报告方面确定我在这里缺少什么?
更新:
当我运行MsgBox(ParamDef.Value)时,它也会显示为空白且缺少相同的字符串错误。我也找不到关于craxdrt.ParameterFieldDefinition类的任何文档,以查看可用的其他隐藏函数。当我看到方法和属性变量列表时,它不会将SetCurrentValue列为其中一个函数。 关于这个的任何想法?
答案 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的语法相同