如何在VB中調用Crystal Report中的Rpt檔而不是DSR檔. 希望提供Sample,在線等待..急..一定給分

jxxiaojian 2002-04-23 10:59:37
如何在VB中調用Crystal Report中的Rpt檔而不是DSR檔. 希望提供Sample,
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxxiaojian 2002-04-23
  • 打赏
  • 举报
回复
不好意思剛剛被我給試出來..
不過你給我的資料還是蠻有用..
謝謝..
wangsitao 2002-04-23
  • 打赏
  • 举报
回复
只能详细说明一下我的程序的API,你最好自己查一下CrystalReport的开发文档资料在CrystalReport8.0的安装目录下有

以下方法必须用CrystalReport编辑生成文件而不使用CrystalReport对象

1)PEOpenEngine打开引擎
无参数,有返回值 =1成功=0失败
2)EOpenPrintJob设定打印文件
jobnum = PEOpenPrintJob(App.Path + "\ducu.rpt")
参数为字符串 传入你的.RPT文件的全路径,返回值 jobnum为工作队列号
3)PESelectPrinterEX选择打印机
参数为PEOpenPrintJob的返回值
有返回值 =1成功=0失败
result = PESelectPrinterEX(jobnum)
4)得到.RPT文件中使用到的TABLE表的数量
tablecount = PEGetNTables(jobnum)
参数为PEOpenPrintJob的返回值
返回值TABLE表的数量
5)PESetNthTableLogOnInfo设定ODBC名
用PEGetNthTableLogOnInfo得到PELogOnInfo结构体
result = PEGetNthTableLogOnInfo(jobnum, i, PELogOnInfo1)
参数1为PEOpenPrintJob的返回值
参数2为第几个TABLE表(0是第一个)
参数3为PELogOnInfo结构体,是传出参数,不必赋值
有返回值 =1成功=0失败
PELogOnInfo1.ServerName = "MDB" + Chr(0)
"MDB"是我作成的ODBC连接的名称
result = PESetNthTableLogOnInfo(jobnum, i, PELogOnInfo1, 1)
参数1为PEOpenPrintJob的返回值
参数2为第几个TABLE表(0是第一个)
参数3为PELogOnInfo结构体,从PEGetNthTableLogOnInfo得到
参数4忘了,好象传1就可以了

6)result = PESetMargins(jobnum, RepLeft, RepRight, RepTop, RepBottom)设定报表的Margin
参数1为PEOpenPrintJob的返回值
参数2为报表左顶点X轴的值
参数3为报表右下点X轴的值
参数4报表左顶点Y轴的值
参数5报表右下点Y轴的值
有返回值 =1成功=0失败

7)PESetFormula设定报表文件参数值
formulacount = PEGetNFormulas(jobnum)得到.RPT文件Formula的数量
参数1为PEOpenPrintJob的返回值
返回值为Formula的数量
result = PEGetNthFormula(jobnum, FormulaN, nameHandle, nameLength, TextHandle, TextLength)
参数1为PEOpenPrintJob的返回值,FormulaN是第几个Formula(0是第一个)其他是传出参数,不必赋值
有返回值 =1成功=0失败
formulaName = String$(nameLength, 0)
result = crvbHandleToBStr(formulaName, nameHandle, nameLength)
此时formulaName为.RPT文件第FormulaN个Formula的名称,有返回值 =1成功=0失败
FormulaText="'"+"A"+"'"
result = PESetFormula(jobnum, formulaName, FormulaText)将A传给名称为formulaName的Formula
参数1为PEOpenPrintJob的返回值, 参数2为Formula的名称,参数3为Formula的值(字符)
有返回值 =1成功=0失败


8)PEDiscardSavedData使报表文件重新取数据
result = PEDiscardSavedData(jobnum)
参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败

9)PEOutputToWindow报表文件以Window打开
result = PEOutputToWindow(jobnum, "貸出期限超過者一覧", CW_USEDEFAULT, _
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
CW_USEDEFAULT + WS_BORDER + WS_SYSMENU + WS_VISIBLE + WS_MAXIMIZE, printhwnd)
参数1为PEOpenPrintJob的返回值,
参数2为WINDOW的标题,
参数3,4,5,6传就可以了
参数7为WINDOW的风格,
参数8为传出值,LONG型窗口句柄,
有返回值 =1成功=0失败

Dim PEWOptions As PEWindowOptions
PEWOptions.StructSize = PE_SIZEOF_WINDOW_OPTIONS
PEWOptions.hasGroupTree = 0
PEWOptions.canDrillDown = 0
PEWOptions.hasNavigationControls = 1
PEWOptions.hasCancelButton = 0
PEWOptions.hasPrintButton = 1
PEWOptions.hasExportButton = 0
PEWOptions.hasZoomControl = 1
PEWOptions.hasCloseButton = 1
PEWOptions.hasProgressControls = 1
PEWOptions.hasSearchButton = 1
PEWOptions.hasPrintSetupButton = 1
PEWOptions.hasRefreshButton = 1
PEWOptions.showToolbarTips = 1
PEWOptions.showDocumentTips = 0
PEWOptions.hasLaunchButton = 0
result = PESetWindowOptions(jobnum, PEWOptions)设定预览窗口上的控件
其他与报表文件输出到打印机一样


PEOutputToPrinter报表文件输出到打印机
result = PEOutputToPrinter(jobnum, Printer.Copies)
参数1为PEOpenPrintJob的返回值,参数2为印刷数量, 有返回值 =1成功=0失败

Dim PEPOptions As PEPrintOptions
PEPOptions.StructSize = PE_SIZEOF_PRINT_OPTIONS
result = PEGetPrintOptions(jobnum, PEPOptions)
PEPOptions.StructSize = PE_SIZEOF_PRINT_OPTIONS
PEPOptions.nReportCopies = nReportCopies报表印刷数量
PEPOptions.StartPageN = StartPageN印刷开始页
PEPOptions.stopPageN = stopPageN印刷结束页

PEPOptions.collation = PE_DEFAULTCOLLATION
result = PESetPrintOptions(jobnum, PEPOptions)设定打印式样

Dim PESOptions As PESectionOptions
Dim code As Integer

PESOptions.StructSize = PE_SIZEOF_SECTION_OPTIONS
PESOptions.Visible = PE_UNCHANGED
PESOptions.NewPageBefore = PE_UNCHANGED

If systotal2.Reg1.System.Other.Tokusoku = 0 Then
PESOptions.NewPageAfter = 1
Else
PESOptions.NewPageAfter = 0
End If
PESOptions.KeepTogether = PE_UNCHANGED
PESOptions.SuppressBlankSection = PE_UNCHANGED
PESOptions.ResetPageNAfter = PE_UNCHANGED
PESOptions.PrintAtBottomOfPage = PE_UNCHANGED
PESOptions.backgroundColor = PE_UNCHANGED_COLOR
PESOptions.underlaySection = PE_UNCHANGED
PESOptions.showArea = PE_UNCHANGED
PESOptions.freeFormPlacement = PE_UNCHANGED
PESOptions.reserveMinimumPageFooter = PE_UNCHANGED
code = PE_SECTION_CODE(PE_SECT_GROUP_FOOTER, 0, 0)
result = PESetSectionFormat(jobnum, 5000, PESOptions)设定REPORT式样



10)PEStartPrintJob打印报表
result = PEStartPrintJob(jobnum, True)
参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败

11)PEClosePrintJob关闭打印文件
result = PEClosePrintJob(jobnum)
参数1为PEOpenPrintJob的返回值, 有返回值 =1成功=0失败

12PECloseEngine关闭引擎
无参数,有返回值 =1成功=0失败


7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧