在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上調試通過.
如有問題請與我聯系.
張振興(星雲)
郵箱:
[email protected] Oicq:4487877->