:关于TADOQuery 和 TDBGrid的动态使用有关问题

高手请进:关于TADOQuery 和 TDBGrid的动态使用问题
在一个函数内实现的代码如下:
void   GtData(AnsiString   myid)
{
TADOQuery   *Tsql=new   TADOQuery(NULL);
TDataSours   *ds=new   TDataSours(NULL);
Tsql-> close();
Tsql-> sql-> clear();
Tsql-> sql-> add( "select   *   from   tab   where   id= ' "+myid+ " ' ");
Tsql-> open();
ds-> datasours=Tsql;
TDBGrid1-> datasours=ds;
///以下是重点。。。
delete   Tsql;
delete   ds;
Tsql=NULL;
ds=NULL;
}
如果在该函数内执行delete那么在TDBGrid中的数据就不被保留!!
如何保留TDBGrid中的数据,还要执行delete
如果不执行delete   ,那么每调用GtData(AnsiString   myid)一下内存就会不停的增加一点。。。
如何处理??????


------解决方案--------------------
头文件中
private:
TADOQuery *Tsql;
TDataSours *ds;

void GtData(AnsiString myid)
{
if(Tsql)delete Tsql;
if(ds)delete ds;
Tsql=NULL;
ds=NULL;

Tsql=new TADOQuery(this);
ds=new TDataSours(this);
Tsql-> close();
Tsql-> sql-> clear();
Tsql-> sql-> add( "select * from tab where id= ' "+myid+ " ' ");
Tsql-> open();
ds-> datasours=Tsql;
TDBGrid1-> datasours=ds;
}