永发信息网

Private Sub Report_Open(Cancel As Integer)请问这个代码有什么问题

答案:2  悬赏:30  手机版
解决时间 2021-03-09 16:22
Private Sub Report_Open(Cancel As Integer)请问这个代码有什么问题
最佳答案
在VB工程中Project菜单加入"Add Crystal Report 9",报表名使用默认即可。这时Form2(Crystal Rerport自动添加的Form,假设名为Form2)被自动分配了如下代码:
Option Explicit
dim Report as New Cystal1

Private Sub Form_Load()

Screen.MousePointer = vbHourglass
'调用水晶报表时置鼠标为沙漏状 CRViewer91.ReportSource = Report '该语句的赋值将在后面被修改

CRViewer91.ViewReport
Screen.MousePointer = vbDefault '调用水晶报表完成后置鼠标为默认形状

End Sub

Private Sub Form_Resize()

CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidth

End Sub

第二步:

点击Crystal Report设计器的"数据库字段",选定"数据库专家…",然后点"创建新连接",再点"仅字段定义",创建"数据库定义"文件,字段名和宽度和原数据库表保持一致。最后,在数据库字段中获得了相应字段,将其置于报表上,按水晶报表的要求配置。

第三步:

该步骤非常关键,添加一个Modual到工程文件中,定义全局的ADODB变量,实现数据库和水晶报表的动态连接。代码如下:

Public conn As New ADODB.Connection
Public rs As New ADODB.Recordset

第四步:

关于VB程序的ADO数据库连接注意事项,请看下面的打印按钮例程。

Private Sub Command1_Click()

Dim connstr As String

If conn.State = adStateOpen Then conn.Close

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "prtest.mdb;Persist Security Info=False" 'prtest.mdb是程序当前目录的测试Access数据库

conn.ConnectionString = connstr
conn.Open
conn.CursorLocation = adUseClient

If rs.State = adStateOpen Then rs.Close
rs.Open "test", conn, adOpenKeyset, adLockReadOnly
' Report.Database.SetDataSource rs, 3, 1
Form2.Show 1 '数据库连接完成后,调用Form2水晶报表工程
End Sub

需要提请大家注意的是,上面代码中的Report.Database.SetDataSource rs, 3, 1是初用水晶报表的程序员容易犯的错误,使用该语句后将造成数据库和水晶报表的连接失败。如何动态调用水晶报表呢?请看第四步。

第五步:

创建报表和数据库数据源的连接,需要修改上面Form2的代码。

Option Explicit
'dim Report as New Cystal1
'上面一行取消

Private Sub Form_Load()

Dim oApp As New CRAXDRT.Application
Dim oRpt As CRAXDRT.Report
Dim reportName As String
'上面三行是新增加的

Screen.MousePointer = vbHourglass
reportName = "rptPr1.rpt" '定义要引用的rpt文件

Set oRpt = oApp.OpenReport(App.Path & reportName, 1)

oRpt.Database.SetDataSource rs '连接报表和数据源
oRpt.ReadRecords

CRViewer91.ReportSource = oRpt '启用报表的预览功能

CRViewer91.ViewReport
Screen.MousePointer = vbDefault

End Sub

Private Sub Form_Resize()

CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidth

End Sub

Private Sub Form_Unload(Cancel As Integer)

'Set Report = Nothing

Set rs = Nothing
Set conn = Nothing
Unload Form2
End Sub
全部回答
经测试可以使用 再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
藏传佛教点一盏油灯的意思
蜻蜒的发育属不完全变态发育其发育过程比完全
柴米油盐在哪里啊,我有事要去这个地方
机箱硬盘位装满了怎么办
新加坡偷盗会怎么处理
关于豌豆细胞有丝分裂过程中相关细胞器作用的
哪个软件买电影票便宜
乡吧佬熟食胶南店怎么去啊,有知道地址的么
六岁儿子可以做俯卧撑游戏吗?
法院传票传到需要提供什么材料
支付宝上添加新银行卡怎么改原持卡人的姓名?
混凝土地坪固化染色怎么样施工才不会掉色?
请问影视表演中的血浆是怎么做的可以含在嘴里
2.一个20度的角,透过放大5倍的放大镜看是100
鹏达蔬菜水果批发这个地址在什么地方,我要处
推荐资讯
股票中市净率是如何算出的
(4.6x+x)4=5.6解方程
圣安地列斯里别人的MOD车转向太灵敏,一转向
广州地铁买错站同样的价不同站能出去吗
对于事故调查处理必须坚持()不放过的原则。A.
做梦丢东西找不到
爱你,我需要勇气……
CPA会计,审计学,财管各科通过率多少
城管局接到举报违建建筑多长时间要处理好
k3签证和K1哪个快
太仓有哪些大学?
打开设置 用英语怎么说?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?