0

アプリで関数を作成しようとしているDelphiに問題があり、この関数はこのようなものです

function Get_Foundation_infos(): TFields;
begin
  with TMyQuery.Create(nil) do
  begin
    try
      Connection := DataBaseForm.DataBaseForm1.DataBase;
      SQL.Add('SELECT * FROM `foundation_infos` WHERE `Id`=1');
      Execute;
      Result := Fields;
    except
      on E: Exception do
        Result := nil;
    end;
  end;
end;

問題は、関数の外側から解放できないことTMyqueryです。メモリ リークの問題があり、2 ~ 3 分後にアプリケーションが停止します。しかし、関数内のオブジェクトを
解放すると、TMyquery関数呼び出しの外側から関数の結果を取得できません。

4

2 に答える 2

0

別の方法を見つけたのかもしれませんが、名前の変数を参照せずにオブジェクトを作成したときに、この状況でメモリマネージャーがメモリリークを修正できないため、同じ型の関数が返される変数を作成し、この場合、メモリ マネージャはこの名前付き変数を使用してメモリ リークを修正できます ....

これは変数の新しいコードです...

function Get_Foundation_infos(): TMyQuery;
var
  q: TMyQuery;
begin
  q := TMyQuery.Create(nil);

  with q do

  begin

    try

      Connection := DataBaseForm.DataBaseForm1.DataBase;

      SQL.Add('SELECT * FROM `foundation_infos` WHERE `Id`=1');
      Execute;

      Result := q;

    except
      on E: Exception do
        Result := nil;
    end;

  end;

end;
于 2013-05-30T22:41:29.740 に答える