Я развиваю как небольшую программу диабета, используя Delphi 5 и ADO. Я делаю небольшой запрос:Delphi: TAdoQuery Memory Leak?
function GetLowestGlucoseLevel(StartDate:string;EndDate:string): Integer;
var
Q:TADOQuery;
begin
try
Q:=TADOQuery.Create(Application); //Separate unit, owner set to App
Q.Connection:=dtMod.ADOCon;
Q.DisableControls;
Q.Close;
Q.SQL.Clear;
Q.SQL.Add('SELECT Min(qGlucose.Glucose) AS MinOfGlucose from qGlucose');
Q.Parameters[0].Value:=StartDate;
Q.Parameters[1].Value:=EndDate;
Q.Open;
Result:=Q.FieldByName('MinOfGlucose').AsInteger;
Q.Close;
finally
Q:=nil;
Q.Free;
end;
end;
Запрос выполняется ОК и возвращает результат, как ожидалось. Однако, когда я проверял Диспетчер задач Windows, использование памяти продолжает увеличиваться, а не уменьшаться после запроса.
Как это исправить?
Спасибо!
Дополнительный комментарий на код: Объект Q создается внутри подпрограммы, таким образом, вызов DisableControls/Close/Clear совершенно не нужны, потому что запрос не имеет никаких связанных элементов управления, не является открытым, а свойство SQL - _blank_ при создании. Влияние на производительность почти ничего не делает, делая вызовы, но я избегаю такого рода кода по своей природе, главным образом потому, что он упрощает обычную процедуру. – jachguate
Дополнительный 2: текст запроса не содержит параметров, но вы назначаете два из них в следующей строке ... без delphi под рукой прямо сейчас, я не могу проверить, но я думаю, что произойдет исключение , или, по крайней мере, неопределенное поведение. – jachguate
@Jachguate: об отключенных управлениях это просто привычка моей, чтобы она всегда отключала элементы управления перед выполнением вызова sql. Спасибо за указание, хотя :) О параметрах, я на самом деле вызываю запрос в файле доступа MS с параметрами, поэтому без установки параметров в моем коде это создаст исключение. – AFF