关键问题:如何释放Data Report显示后占用的内存!
类似:set mydata=nothing
类似:set mydata=nothing
解决方案 »
- 模拟福彩抽奖的软件
- 急!!寻求非WEB的Bug管理系统!!
- 在vb2008中有关ado操作的问题
- 高分求:实时仿真软件的编写。。。。。
- SQL Server代理程式的帳戶問題(急﹐在線等!!)
- textbox输入的问题,(简单,但我不会。望指教)
- 如何让flexgrid右键弹出个菜单来???
- RS232协议 驱动程序项目开发
- 请看一下http://www.csdn.net/expert/topic/210/210491.shtm //////#####数字金额===〉〉汉字金额!!!
- 微软bug?!.(:-(
- 什么垃圾论坛,一会能跟贴,一会又不能跟贴,这种垃圾产品也能上线,服了
- 急~数据库无法查询,在线等
Set youRptName = Nothing
End Sub
Set youRptName = Nothing
set data environment=nothing (数据环境)
set myRpt_money=nothing (报表)已占用的内存没有减少,继续打开报表内存依旧在递增(XP任务管理器中的PF使用率显示结果)
看来要从VB清理内存着手了。
DE.CT.ConnectionString = strCnn
DE.Commands("gas_money").CommandText = "SELECT * FROM ChargeArre WHERE ........"
strDRPName = "普通用户管道燃气抄度报表" & Rep_pay
drpGas_Money.Sections(2).Controls("LTD_Name").Caption = Bran_ch
drpGas_Money.Sections(2).Controls("Report_Name").Caption =strDRPName
drpGas_Money.Caption = strDRPName
drpGas_Money.Show监测结果:
从“drpGas_Money.Sections(2).Controls("LTD_Name").Caption = Bran_ch
”开始内存占有率开始升高,到“drpGas_Money.Show”达到本次最高。关闭报表窗口drpGas_Money后内存占有率没降低,如果再次查询预览,内存占有率继续升高,.........多次之后内存溢出!
郁闷啊,找不到解决办法。
现在暂时只能让用户每次预览报表的时候都监控内存占有率,快到的时候退出软件再进入。
dim rpt as new drpGas_Money
rpt.show
关闭报表时释放对象
Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
Set drpGas_Money = Nothing
End sub手边没有VB,测试不了
dim rpt as new drpGas_Money
rpt.show 再在datareport_initialize()事件中绑定数据
最后在DataReport_QueryClose中释放报表对象
2、
dim rpt as new drpGas_Money
...................................
rpt.show
Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
Set drpGas_Money = Nothing
Set DE = Nothing
End Sub
...................................
rpt.show
set rpt=nothing
在drpGas_Money的Form_Terminate里面把你定义的所有object都=nothing
诸如此类
CRAXDDRT.Application
CRAXDDRT.report ADODB.Connection
报表窗口drpGas_Money也关闭了内存还是释放不掉。每运行一次增加约50M内存消耗,end后才释放。
...................................
rpt.show 1
set rpt=nothing
myRpt.Caption = strDRPName
myRpt.Show 1
Set myRpt = NothingPrivate Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
Set drpGas_Money = Nothing
DE.CT.Close
Set DE = Nothing
End Sub代码修改后测试结果:
第一次运行预览报表内存PF使用率924MB
第二次 973MB
第三次 0.99GB关闭程序(VB工程还开着)PF使用率降到826MB毫无进展啊!国庆期间的疑难问题啊!
Dim rpt As New RptGroup
'显示分组报表
rpt.Show
End Sub报表代码:Option ExplicitDim cn As ADODB.Connection
Dim rs As ADODB.RecordsetPrivate Sub DataReport_Initialize()
Dim Sql As String, strSql As String
'连接数据库(Access)
Set cn = New ADODB.Connection
With cn
.Provider = "MSDataShape.1" '一定要这句
.Open "Data Provider=Microsoft.Jet.OLEDB.4.0 ;" & _
"Data Source=" & App.Path & "\db1.mdb;" & _
"Persist Security Info=False"
End With'设置RptTextBox控件属性
'分组标头,注意不要设置其DataMember属性
Me.Sections("Section6").Controls("text1").DataField = "gp"
'细节标头,其中“miCmd”是分组名称
Me.Sections("Section1").Controls("text2").DataField = "iName"
Me.Sections("Section1").Controls("text2").DataMember = "miCmd"
Me.Sections("Section1").Controls("text3").DataField = "iCode"
Me.Sections("Section1").Controls("text3").DataMember = "miCmd"
Me.Sections("Section1").Controls("text4").DataField = "gp"
'RptGroup.Sections("Section7").Controls("text5").DataMember = "miCmd"
Me.Sections("Section7").Controls("text5").DataField = "iCode" '分组合计
'查询表:
Sql = "SELECT * FROM tb "
'打开查询记录集
strSql = "SHAPE {" & Sql & " } " & _
"AS miCmd COMPUTE sum(miCmd.iCode) as iCode,miCmd BY 'gp' "
Set rs = New ADODB.Recordset
rs.Open strSql, cn, adOpenStatic, adLockReadOnly Set Me.DataSource = rs
End SubPrivate Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
If rs.State = adStateOpen Then rs.Close
If cn.State = adStateOpen Then cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
还有这个 CRAXDDRT.Report
我想你的情况可能是二个,一是用了DE,不过这个只是推测,因为没有用过这个,或者是用法上有问题。二是你是在窗体相关事件中设置和绑定报表数据源的,个人认为更恰当的用法应该是放在DataReport_Initialize事件中。个人看法,不一定正确,只供参考。
处理办法:原来报表窗体中的DataSource选中的是“DE”,现在去掉,改用赋值的方法:Set myRpt.DataSource = DE。测试结果:内存再也没递增了,而且查询出报表速度奇快!