接続数が増加したもう1つの理由は、同じ接続でアクティブな複数のオープンクエリです。
は、結果を格納し、あなたがこのようなコードがある場合
にプールされていないを作成する別の接続が発生します)あなたは
db := TAdoConnection.Create()
qry1 := TAdoQuery.Create();
qry2 := TAdoQuery.Create();
qry1.connection := db;
qry2.connection := db;
qry1.SQL.Text := 'select * from whatever';
qry1.open;
while not qry1.eof do
begin
x := qry1.fieldbyname('fld').AsString;
qry2.SQL.Text := 'select * from elsewhere where SomeField='+ QuotedStr(x);
qry2.Open;
..do something..
qry2.Close;
qry1.Next;
end;
のようなコードqry2.Openを(持っていると言いますqry1をローカルの場所に移動し、qry2の作業を行います。この場合、接続は1つだけ維持されます。ラフに言えば
、これはより多くのようになります。
db := TAdoConnection.Create()
qry1 := TAdoQuery.Create();
qry2 := TAdoQuery.Create();
str := TStringList.Create();
qry1.connection := db;
qry2.connection := db;
qry1.SQL.Text := 'select * from whatever';
qry1.open;
while not qry1.eof do
begin
x := qry1.fieldbyname('fld').AsString;
str.Add(x);
qry1.Next;
end;
qry1.Close;
for i := 0 to str.Count-1 do
begin
qry2.SQL.Text := 'select * from elsewhere where SomeField='+ QuotedStr(str[i]);
qry2.Open;
..do something..
qry2.Close;
end
接続文字列にMultipleActiveResultSets = Trueを追加してみてください。これをコメントとして追加するのは、Delphiで動作するかどうかわからないからです。 –
もし私が間違っていなければ、これは 'TADOConnection'コンポーネントの背後にある全ての目的です。独自の接続で複数の' TADOQuery'コンポーネントを作成するのではなく、データベース接続を1か所にプールすることです。しかし、ここでの答えは、ADOのいくつかの奇妙な動作を記述しています。私のケースでは、 –