我最近继承了一个旧的 Visual Basic 6/ Crystal Reports 项目,它连接到一个 sql server 数据库。当我尝试运行项目时收到的错误消息(错误# -2147191803 A String is required here)似乎缩小到以下代码中的 .Printout 命令:
'登录数据库
设置表 = Report.Database.Tables
设置表 = Tables.Item(1)
Table.SetLogOnInfo ConnName, DBName, user, pass
域名 = CStr(已选择)
'设置参数字段
'声明参数持有者
设置 ParamDefs = Report.ParameterFields
'存储参数对象
对于 ParamDefs 中的每个 ParamDef
使用 ParamDef
MsgBox("域名:" + 域名)
选择案例 .ParameterFieldName
案例“公司名称”
.SetCurrentValue 域名
结束选择
选择案例.名称
案例“{?公司名称}”
.SetCurrentValue 域名
结束选择
'标记以查看分配给当前值的内容
MsgBox("paramdef:" + ParamDef.Value)
结束于
下一个
Report.EnableParameterPrompting = False
Screen.MousePointer = vbHourglass
'CRViewer1.ReportSource = 报告
'CRViewer1.ViewReport
测试 = 1
**报告.打印输出**
测试 = 测试 + 3
当前时间 = Str(现在)
当前时间=替换(当前时间,“/”,“-”)
当前时间=替换(当前时间,“:”,“-”)
域名=替换(域名,“。”,“”)
startName = mPath + "\crysta~1.pdf"
endName = mPath + "\" + DomainName + "\" + DomainName + " " + currenttime + ".pdf"
rc = MsgBox("等待 PDF 作业完成", vbInformation, "H/W Report")
名称 startName 作为 endName
Screen.MousePointer = vbDefault
万一
在运行期间,表单显示,ParamDef 变量设置“公司名称”,当它到达提示打印的Report.PrintOut行时,它会抛出错误。我猜水晶报告没有收到“公司名称”来正确运行水晶报告。有谁知道如何诊断这个......无论是在vb6还是水晶报告方面来确定我在这里遗漏了什么?
更新:
- 插入 CStr(selected) 以强制 DomainName 为字符串
- 将 msgboxes 插入到 .setcurrentvalue 行上方和下方的 for 循环中
- 插入 Case "{?Company Name}" 语句以查看是否有助于设置值
- 尝试了其他论坛网站建议的 .AddCurrentValue 和 .SetCurrentValue 函数
- 排除这是我的开发环境..将它加载到另一台机器上,在 winxp prof sp2 上运行完全相同的 vb6 水晶报告 8.5 并出现相同的错误。
当我运行 MsgBox(ParamDef.Value) 时,它也会出现相同的缺失字符串错误。我也找不到关于 craxdrt.ParameterFieldDefinition 类的任何文档,以查看还有哪些其他隐藏函数可用。当我看到方法和属性变量的列表时,它没有将 SetCurrentValue 列为函数之一。对此有什么想法吗?