最近在做一个项目,遇到了一个怪问题。
项目情况:
开发工具: vb6.0+crystalreprt9.2中文版
程序中使用了CRviewer9控件(打印预览)。
问题:在用InstallShield10.5对程序进行打包后,打包方法采用这个方法。在目标机器安装后,运行程序。在使用了CRviewer9的窗口,显示窗口前回水晶报表会弹出一个提示"A Crystal Reports job failed because a free license could not be obtained in the time allocated."点确定后程序可以使用。
原因:出现这个问题的原因是水晶报表的License不够,一台机器每次只能运行一个CRviewer9,显示多个需购买License。但是我的程序就只显示一个CRviewer9控件啊?经过对程序本身的分析发现,程序中有一个地方对CRviewer9进行了重复的调用。就是这段代码引起的错误。这个重复调用很隐蔽,它的出现,也在此给我敲响了警钟(呵呵,当然这段程序不是我这个“高手”编的)。现在来分析一下错误原因。程序里有一个字程序CrpView()用于显示调用CRviewer9控件。程序里还有一个地方用到了combobox控件。
有一段程序是这样的。
Private Sub Form_Load()
..................................
Combobox1.ListIndex = initOrder
' Call CrpView(Combobox1.ListIndex = initOrder) '根据参数值显示预览画面
.................................
End Sub
Private Sub Combobox1_Click()
......................
Call CrpView(Combobox1.ListIndex = initOrder) '根据参数值显示预览画面
...................................
End Sub
问题出在Combobox1.ListIndex = initOrder,这里隐含了一次Combobox1_Click()调用,而Combobox1_Click()里有一次Call CrpView()的调用而在用Combobox1.ListIndex = initOrder作参数就形成了多次调用。
删掉一个from_load中的Call CrpView(),将参数改为变量调用这个问题就解决了。