在VB6的报表使用过程中,我们会发现这样的一个问题,那就是报表中的数据只能读一次,不管你的库中字段增加也好,删除也好,以及让它显示新的查询结果等,它都不会记变。经过查资料才搞清楚,原来是DataEnvironment的问题.原来,只要Command对象中含有数据记录集合,它就不会重新执行SQL语句,就算是把新的查询语句给DataEnvironment后它也不会执行,解决的方法为:先把数据记录集合关闭,然后执行SQL语句,如下例: PrivateSubCommand11_Click() OnErrorResumeNext DimsqlAsString sql="select*fromsaledate" IfDataEnvironment1.rsCommand1.State<>adStateClosedThen DataEnvironment1.rsCommand1.Close EndIf IfRight$(Trim$(App.Path),1)="\"Then DataEnvironment1.Connection1.OpenApp.Path&"jxck.mdb" Else DataEnvironment1.Connection1.OpenApp.Path&"\jxck.mdb" EndIf DataEnvironment1.rsCommand1.Opensql SetDataReport1.DataSource=DataEnvironment1 DataReport1.DataMember="command4" 'DataReport1.Title="出库明细总表" DataReport1.Show EndSub 这样的话报表中显示的内容就可以是查询结果了。 对于分组报表,也可以这样: 如: PrivateSubCommand11_Click() OnErrorResumeNext 'DimsqlAsString 'sql="select*fromsaledategroupby分组字段名" IfDataEnvironment1.command4_分组.State<>adStateClosedThen DataEnvironment1.rsCommand4_分组.Close EndIf IfRight$(Trim$(App.Path),1)="\"Then DataEnvironment1.Connection1.OpenApp.Path&"jxck.mdb" Else DataEnvironment1.Connection1.OpenApp.Path&"\jxck.mdb" EndIf DataEnvironment1.rsCommand4.Opensql SetDataReport4.DataSource=DataEnvironment1 DataReport4.DataMember="command4_分组" 'DataReport1.Title="出库明细总表" DataReport4.Show EndSub 注意要在SQL语句中含有分组关建字"groupby"就可以了。 以上代码对于要改变DataEnvironment中的记录集同样适用.
以上代码在VB6.0,Win98上调试通过. 如有问题请与我联系.
张振兴(星云) 邮箱:xingyun0615@sina.com Oicq:4487877->
|