L
listhano
Unregistered / Unconfirmed
GUEST, unregistred user!
利用ACCESS数据库,用TADOQuery控件,返回数据集。<br>我要问的问题是:当打开少量的TADOQuery数据集,程序运行正常;如果打开多个数据集,运行程序就会出错(可能是正用内存太多的缘故吧)。请问下面的程序怎样做才能关闭TADOQuery数据集(即用完一个,关闭一个)?<br>==============================<br>{***这是数据层的数据集***}<br>unit uClassTab;<br><br>interface<br><br>uses<br> SysUtils,Classes,ADODB;<br><br>type<br> TTab=class(TObject)<br> public<br> CunQry:TADOQuery;<br> procedure AllQry(AllQryName:string);<br> procedure TabShow(ShowName:string);<br> end;<br><br>implementation<br><br><br>procedure TTab.AllQry(AllQryName:string);<br>var<br> cnn:TADOConnection;<br>const<br> strA='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';<br> strB=';Persist Security Info=False';<br> mdbName='ClimateNMDat.mdb';<br>begin<br> CunQry:=TADOQuery.Create(nil);<br> cnn:=TADOConnection.Create(nil);<br> cnn.ConnectionString:=strA+ExtractFilePath(ParamStr(0))+mdbName+strB;<br> cnn.LoginPrompt:=false;<br> with CunQry do<br> begin<br> Connection:=cnn;<br> Close;<br> SQL.Clear;<br> SQL.Add('select * from '+AllQryName+' order by year');<br> open;<br> end;<br>end;<br><br><br>procedure TTab.TabShow(ShowName:string);<br>begin<br> AllQry(showName);<br>end;<br><br>=========================<br>{***这是界面层应用情况***}<br><br>{***返回的是树状节点值(其目的是为了查找数据库中的数据表。<br>即R0101、R0102、R0103...R1001、R1002、R1003...***)<br><br>function TfrmMain.tvTTreeNode:string;<br>var<br> parent,child:string;<br><br>begin<br> if (tv.Selected.Parent.Index<9) and (tv.Selected.Parent.Index>=0) then<br> parent:='0'+IntToStr(tv.Selected.Parent.Index+1); //tv是TTreeView;<br><br> if tv.Selected.Parent.Index>=9 then<br> parent:=IntToStr(tv.Selected.Parent.Index+1);<br><br> if (tv.Selected.Index<9) and (tv.Selected.Index>=0) then<br> child:='0'+IntToStr(tv.Selected.Index+1);<br><br> if tv.Selected.Index>=9 then<br> child:=IntToStr(tv.Selected.Index+1);<br><br> if (StrToInt(parent)>=0) and (StrToInt(child)>=0) then<br> Result:='R'+parent+child<br> else<br> Result:='R0101';<br>end;<br><br><br>//当改变树状(即TTreeView)焦点(节点)时显示不同的数据集<br>procedure TfrmMain.tvChange(Sender: TObject; Node: TTreeNode);<br>begin<br> tvSelect(tvTTreeNode);<br>end;<br><br>//在dbg(TDBGrid控件)中显示数据集<br>procedure TfrmMain.tvSelect(strName:string);<br>var<br> s:TTab;<br>begin<br> s:=TTab.Create;<br> s.TabShow(stRName); //<----当多次改变树状节点时这里就产生错误(就是找不到数据库中表了 即R****我想这个可能与打开多个数据集有关)<br> ds.DataSet:=s.CunQry; //ds:是TDataSource;<br> dbg.DataSource:=ds; //dbg:是TDBGrid;<br>end;<br>========================<br><br>s.TabShow(stRName); <br>当多次改变树状节点时这里就产生错误(就是找不到数据库中表了 即R****我想这个可能与打开多个数据集有关);我想到释放数据集,在这个过程中<br>procedure TTab.AllQry(AllQryName:string);<br>这样释放数据集?<br>大概是这种结构有问题,请高手给一个合理的结构。<br>谢谢!