Перейти к содержанию
Fire Monkey от А до Я
  • 0

[Restrequest] Как сделать запрос в потоке?


lomanu4

Вопрос

Всем привет.

       Вообщем пытаюсь синхронизировать свою локальную базу с сервером, использую при этом Restrequest,все идет нормально но только приложение зависает на время цикла.

В цикле идет перебор все данных в локальной базе и заносится по ссылке в базу.

Пытался сделать в потоке но выскакивает ошибка "Argument errore", а без потока не выскакивает.

Есть решение для улучшения скорости или хотя бы убрать зависания приложения?

спасибо за ранее за вашу помощь.

var
  aggiornarichiesta: TJSONObject;
  i,b: Integer;
  a:TStream;
begin

  FDTable1.First;
  for i := 0 to FDTable1.RecordCount do
  begin
    if RESTRequest1.Response.StatusCode = 200 then
    begin

        try
         RESTRequest1.ClearBody;
          RESTClient1.BaseURL := 'http://localhost/loman/dati.php';
         RESTRequest1.Execute;



          aggiornarichiesta := TJSONObject.Create;
          aggiornarichiesta.AddPair('id', FDTable1ID.Text);
          aggiornarichiesta.AddPair('Materiale',
            FDTable1.FieldByName('Materiale').AsString);
          aggiornarichiesta.AddPair('Descripzione',
            FDTable1.FieldByName('Descripzione').AsString);
          aggiornarichiesta.AddPair('Quantita', FDTable1.FieldByName('Quantita')
            .AsString);
          aggiornarichiesta.AddPair('Treno', FDTable1.FieldByName('Treno')
            .AsString);
          aggiornarichiesta.AddPair('Discorta', FDTable1.FieldByName('Discorta')
            .AsString);
          aggiornarichiesta.AddPair('Commento', FDTable1.FieldByName('Commento')
            .AsString);
          aggiornarichiesta.AddPair('Creatoda', FDTable1.FieldByName('Creatoda')
            .AsString);
          aggiornarichiesta.AddPair('Ordinato', FDTable1.FieldByName('Ordinato')
            .AsString);

          RESTClient1.BaseURL := 'http://localhost/loman/Product/update.php';
          RESTRequest1.ClearBody;
          RESTRequest1.AddBody(aggiornarichiesta.ToString,
            ContentTypeFromString('application/json'));
          RESTRequest1.Execute;
          FDTable1.Next;
          RESTRequest1.ClearBody;
          RESTClient1.BaseURL := 'http://localhost/loman/dati.php';
          RESTRequest1.Execute;
        finally
          RESTRequest1.DisposeOf;
        end;



    end;

  end;

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
11 часов назад, lomanu4 сказал:

Всем привет.

       Вообщем пытаюсь синхронизировать свою локальную базу с сервером, использую при этом Restrequest,все идет нормально но только приложение зависает на время цикла.

В цикле идет перебор все данных в локальной базе и заносится по ссылке в базу.

Пытался сделать в потоке но выскакивает ошибка "Argument errore", а без потока не выскакивает.

Есть решение для улучшения скорости или хотя бы убрать зависания приложения?

спасибо за ранее за вашу помощь.

 

В этом месте я получаю ошибку argument out range

 

 RESTRequest1.Execute;
Ссылка на комментарий
  • 0
В 21.01.2020 в 03:03, lomanu4 сказал:

Всем привет.

       Вообщем пытаюсь синхронизировать свою локальную базу с сервером, использую при этом Restrequest,все идет нормально но только приложение зависает на время цикла.

В цикле идет перебор все данных в локальной базе и заносится по ссылке в базу.

Пытался сделать в потоке но выскакивает ошибка "Argument errore", а без потока не выскакивает.

Есть решение для улучшения скорости или хотя бы убрать зависания приложения?

спасибо за ранее за вашу помощь.


var
  aggiornarichiesta: TJSONObject;
  i,b: Integer;
  a:TStream;
begin

  FDTable1.First;
  for i := 0 to FDTable1.RecordCount do
  begin
    if RESTRequest1.Response.StatusCode = 200 then
    begin

        try
         RESTRequest1.ClearBody;
          RESTClient1.BaseURL := 'http://localhost/loman/dati.php';
         RESTRequest1.Execute;



          aggiornarichiesta := TJSONObject.Create;
          aggiornarichiesta.AddPair('id', FDTable1ID.Text);
          aggiornarichiesta.AddPair('Materiale',
            FDTable1.FieldByName('Materiale').AsString);
          aggiornarichiesta.AddPair('Descripzione',
            FDTable1.FieldByName('Descripzione').AsString);
          aggiornarichiesta.AddPair('Quantita', FDTable1.FieldByName('Quantita')
            .AsString);
          aggiornarichiesta.AddPair('Treno', FDTable1.FieldByName('Treno')
            .AsString);
          aggiornarichiesta.AddPair('Discorta', FDTable1.FieldByName('Discorta')
            .AsString);
          aggiornarichiesta.AddPair('Commento', FDTable1.FieldByName('Commento')
            .AsString);
          aggiornarichiesta.AddPair('Creatoda', FDTable1.FieldByName('Creatoda')
            .AsString);
          aggiornarichiesta.AddPair('Ordinato', FDTable1.FieldByName('Ordinato')
            .AsString);

          RESTClient1.BaseURL := 'http://localhost/loman/Product/update.php';
          RESTRequest1.ClearBody;
          RESTRequest1.AddBody(aggiornarichiesta.ToString,
            ContentTypeFromString('application/json'));
          RESTRequest1.Execute;
          FDTable1.Next;
          RESTRequest1.ClearBody;
          RESTClient1.BaseURL := 'http://localhost/loman/dati.php';
          RESTRequest1.Execute;
        finally
          RESTRequest1.DisposeOf;
        end;



    end;

  end;

 

TTask.Run(
    procedure
    var
      //Какие то переменные
    begin
      //тут пишешь код, который никак не изменяет свойства визуальных компонентов
      //Это может быть например запрос на сервер или работа с большим объемом данных
      //в твоем случае это(RESTRequest надо тут же и создать):
      RESTRequest.ClearBody;
      RESTClient.BaseURL := 'http://localhost/loman/dati.php';
      RESTRequest.Execute;
      TThread.Synchronize(TThread.CurrentThread,
          procedure
        var
          //переменные
        begin
            //тут пишешь код который изменяет свойства визуальных компонентов.
            //т.е. получил например от сервера JSON тут его распарсил и отдал 
            //на вывод
        end);
    end);
Изменено пользователем Edward Tarasov
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...