请大家看看这两个函数是否存在资源释放方面的有关问题

请大家看看这两个函数是否存在资源释放方面的问题?
unit UntSQLHelper;

interface

uses
  ADODB, Uni, DB, SysUtils, StrUtils, Forms, Controls, ComObj, Windows, Activex, Variants, ADOInt, Dialogs;

type
  SQLHelper = class
  public
  { 返回一个DataSet }
  class function ExecuteDataSet(conn: TADOConnection; strSQL: string): TDataSet; overload;  
  { 直接获取一个结果值,返回结果为变体类型,可直接赋值使用。}
  class function GetFieldValue(conn: TADOConnection; strSQL: string): olevariant; overload;
   
  end;

implementation

{ SQLHelper }

class function SQLHelper.ExecuteDataSet(conn: TADOConnection;
  strSQL: string): TDataSet;
var
  query: TADOQuery;
begin
  query := TADOQuery.Create(nil);
  query.Connection := conn;
  query.SQL.Clear;
  query.SQL.Add(strSQL);
  query.Open;
  result := query;
end;

class function SQLHelper.GetFieldValue(conn: TADOConnection; strSQL: string): OleVariant;
begin
  result := SQLHelper.ExecuteDataSet(conn, strSQL).Fields.Fields[0].Value;
end;


end.

GetFieldValue函数里需不需要释放那个DataSet?如果有问题,怎么改比较好?
谢谢大家。

------解决方案--------------------
跨进程修改DBGRID内容,有没有例子,没人会我
------解决方案--------------------
每执行一次GetFieldValue就会创建一个,需要释放
------解决方案--------------------
query 做为一个参数传递进去
------解决方案--------------------
ExecuteDataSet返回的对象,用完后要释放
------解决方案--------------------
这种写法没法释入DataSet, 把DataSet做为参数传进去。用完释放。
------解决方案--------------------
你可以写个函数来释放这个dataset
就像内存申请和内存释放一样