Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > ADO Частые запросы в цикле потока


Автор: namervasek 13.6.2012, 16:37
Пишу длл. В ней выполняется мой поток
В потоке необходимо постояно делеать запрос к базе 
Вот метод Execute
Код

procedure TMainDevice.MainProc;

  function CreateQeury: TADOQuery;
  begin
    Result := TADOQuery.Create(nil);
    Result.AutoCalcFields := False;
    Result.Connection := FADOConnection;
    Result.CommandTimeout := 300;
    Result.CursorType := ctOpenForwardOnly;
    Result.LockType := ltReadOnly;
    Result.SQL.Text := MainSql;
    Result.ExecuteOptions := [eoAsyncExecute, eoAsyncFetchNonBlocking];
    Result.OnFetchComplete := QueryFetchComplete;
    FQueryComplete := False;
  end;  

var
  DataSet: TADOQuery;
  RecSet: _Recordset;
begin  
  while not Terminated do
  begin
  //////////////////////////////////////////////////////////////////////////////
  try
    // открывем
    DataSet := CreateQeury;
    DataSet.Open;
    try

      // ждем пока выполнится запрос
      while not FQueryComplete do
      begin
        if Terminated then
        begin
          DataSet.Recordset.Cancel;
          Break;
        end;
        Sleep(50);
      end;

      if FQueryComplete and not Terminated then
      begin
        RecSet := DataSet.Recordset;
        RecSet.MoveFirst;
        while not RecSet.EOF do
          RecSet.MoveNext;
      end;

    finally
      if DataSet.Active then
        DataSet.Recordset.Close;
      DataSet.Free;
    end;

    Sleep(3000);
  except
    //
  end;
  //////////////////////////////////////////////////////////////////////////////
  end;
end;

Если просто ходить отладчиком по коду то все нормально, но если запускать без отладки начинают валить exception причем IDE не показывает где они возникают(exception в основном access violation)
Отлаживаю с помощью host application(exe без исходников)
Пустой цикл работает нормально, так что у меня подозрение что это шалит ADO
Подскажите в чем может быть дело? 


Автор: namervasek 14.6.2012, 09:51
В общем удалось победить exception. Достаточно было добывить sleep после открытия.
Но теперь нарисовалась новая проблема... 

Сегодня заметил что течет пямять EXE, очень маленькими порциями 4-16 кб в секунду. А то не есть хорошо так как приложение долно работать очень долго.
Как это можно исправить? 

Автор: Аватар 25.6.2012, 18:00
ADOQuery в цикле создается каждый раз заново. В этом какой-то сокровенный смысл?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)