Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Экспорт данных из БД в потоке / 25 сообщений из 29, страница 1 из 2
13.05.2020, 22:18
    #39957144
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Хочу сделать экспорт данных из БД, но т.к. процесс довольно медленный - хочу засунуть это в анонимный поток.

Вопрос, я правильно понял как это делается, или можно сделать как-то лучше?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
procedure TDExport.CreateExportThread(const QuerySQL: string);
var
  LConnection: TFDCustomConnection;
begin
  LConnection := DBTables.fdConnection.CloneConnection; // копия соединения
  LConnection.UpdateTransaction := nil;
  LConnection.Transaction := TFDTransaction.Create(LConnection);
  LConnection.Transaction.Connection := LConnection;
  LConnection.Transaction.Options := DBTables.fdTReadCommited.Options; // копируем параметры транзакции
  FExportThread := TThread.CreateAnonymousThread(
    procedure
    var
      LQuery: TFDQuery;
    begin
      LQuery := TFDQuery.Create(LConnection);
      try
        LQuery.Connection := LConnection;
        LQuery.SQL.Text := QuerySQL;
        LConnection.Connected := True;
        LConnection.StartTransaction;
        LQuery.Active := True;
        while not FExportThread.CheckTerminated do
        begin
          { .... }
        end;
        LConnection.Connected := False;
      finally
        LConnection.Commit;
        LConnection.Free;
      end;
    end);
  FExportThread.FreeOnTerminate := False;
  FExportThread.OnTerminate := ThreadFinished; 
  FExportThread.Start;
end;
...
Рейтинг: 0 / 0
13.05.2020, 22:21
    #39957146
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Не могу понять зачем у тебя LConnection сидит за пределами треда.
...
Рейтинг: 0 / 0
13.05.2020, 22:33
    #39957148
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
rgreat
Не могу понять зачем у тебя LConnection сидит за пределами треда.

Чтобы анонимный метод захватил его, а не глобальный fdConnection.
...
Рейтинг: 0 / 0
13.05.2020, 22:44
    #39957150
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
alekcvp,

как правило, современные СУБД хорошо умеют делать экспорт. Delphi для этого не нужен. Если только "дёрнуть" хранимку
...
Рейтинг: 0 / 0
13.05.2020, 22:56
    #39957154
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
alekcvp,

Так внутри треда бы и создал.
...
Рейтинг: 0 / 0
13.05.2020, 23:09
    #39957156
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
alekcvp,
как правило, современные СУБД хорошо умеют делать экспорт. Delphi для этого не нужен. Если только "дёрнуть" хранимку

Мне нужно экспортнуть сложный запрос, чтобы было "как на экране", с подсветкой строк и т.п.
rgreat
alekcvp,
Так внутри треда бы и создал.

Хм, я просто думал что он тогда fdConnection захватит, до конца исполнения потока. Правда хз чем это плохо :)
Ну и если что-то пойдёт не так, то максимальное количество возможных исключений хотелось бы обработать вне потока.
...
Рейтинг: 0 / 0
13.05.2020, 23:13
    #39957157
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
[quote автор]
alekcvp
Gerasimenko
alekcvp,
как правило, современные СУБД хорошо умеют делать экспорт. Delphi для этого не нужен. Если только "дёрнуть" хранимку

Мне нужно экспортнуть сложный запрос, чтобы было "как на экране", с подсветкой строк и т.п.
...

Экспорт, расцветка и отображение как на экране... Что же вы вкладываете в понятие экспорт? И какая у Вас СУБД?
...
Рейтинг: 0 / 0
13.05.2020, 23:14
    #39957158
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
alekcvp
Ну и если что-то пойдёт не так, то максимальное количество возможных исключений хотелось бы обработать вне потока.
Все исключения у тебя будут в потоке и так.
Да и смысл делать 2 обработчика и в потоке и нет, если можно только один в потоке?
...
Рейтинг: 0 / 0
13.05.2020, 23:38
    #39957165
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
rgreat
Не могу понять зачем у тебя LConnection сидит за пределами треда.

А я не могу понять, почему Commit идёт после закрытия коннекта. =8-[ ]
...
Рейтинг: 0 / 0
13.05.2020, 23:43
    #39957166
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
авторХм, я просто думал что он тогда fdConnection захватит, до конца исполнения потока. Правда хз чем это плохо :)

Охота связываться с анонимным потоком и гадать захватится / не захватится? Классический TThread чем не угодил? И там и тут масса граблей, но классика хоть нагляднее смотрится.
...
Рейтинг: 0 / 0
13.05.2020, 23:50
    #39957167
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
DmSer,

Однако, как это стильно, модно, молодежно!))
...
Рейтинг: 0 / 0
13.05.2020, 23:50
    #39957169
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
DmSer,

Я бы тогда лучше TTask предложил, если уж есть тяга к анонимным методам.
Удобней.
...
Рейтинг: 0 / 0
14.05.2020, 00:13
    #39957175
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
авторпропущено...

Экспорт, расцветка и отображение как на экране... Что же вы вкладываете в понятие экспорт? И какая у Вас СУБД?
Firebird, ну это больше отчёт, чем экспорт, люди хотят работая в программе в какой-то момент получить в экселе табличку точь-в-точь как на экране, чтобы, например, по почте её кому-нибудь отправить.
авторВсе исключения у тебя будут в потоке и так.
Да и смысл делать 2 обработчика и в потоке и нет, если можно только один в потоке?
Принято, перенёс.
авторА я не могу понять, почему Commit идёт после закрытия коннекта. =8-[ ]
Закрытие после добавил, коммит убрать забыл 😁
авторОхота связываться с анонимным потоком и гадать захватится / не захватится? Классический TThread чем не угодил? И там и тут масса граблей, но классика хоть нагляднее смотрится.
Лень писать класс, ради одного вызова... да и вообще, зачем тогда нужны анонимные потоки?
...
Рейтинг: 0 / 0
14.05.2020, 00:32
    #39957178
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
alekcvp,

Excel умеет забирать данные из БД и это будет существенно быстрее.
Думаю, и FB тоже умеет в Excel экспортировать.
...
Рейтинг: 0 / 0
14.05.2020, 00:40
    #39957180
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko,

FB не умеет, но и не должен куда то там что-то экспортировать, ибо не серверное это дело. Но вот FR, например, имеет достаточно отлаженный набор фильтров в разного рода популярные форматы. И вот именно это, на мой взгляд, в данном случае самый цивилизованный путь.
...
Рейтинг: 0 / 0
14.05.2020, 00:51
    #39957181
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Vlad F
Gerasimenko,

FB не умеет, но и не должен куда то там что-то экспортировать, ибо не серверное это дело. Но вот FR, например, имеет достаточно отлаженный набор фильтров в разного рода популярные форматы. И вот именно это, на мой взгляд, в данном случае самый цивилизованный путь.

глянул, для интересу... http://www.ibase.ru/impexp/
...
Рейтинг: 0 / 0
14.05.2020, 00:56
    #39957182
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
alekcvp,

Excel умеет забирать данные из БД и это будет существенно быстрее.
Думаю, и FB тоже умеет в Excel экспортировать.

Иксель импортировать данные из БД умеет только когда есть источник odbc или oledb, или из древних db-форматов.
...
Рейтинг: 0 / 0
14.05.2020, 01:06
    #39957184
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
Vlad F
Gerasimenko,

FB не умеет, но и не должен куда то там что-то экспортировать, ибо не серверное это дело. Но вот FR, например, имеет достаточно отлаженный набор фильтров в разного рода популярные форматы. И вот именно это, на мой взгляд, в данном случае самый цивилизованный путь.

глянул, для интересу... http://www.ibase.ru/impexp/

Ещё раз, - сервер - не умеет. Инструменты некоторые, да, умеют экспортировать ИЗ него, с разной степенью успеха.
Ты уж давай, жена, отличай разврат от ситуации. (с))
...
Рейтинг: 0 / 0
14.05.2020, 01:08
    #39957185
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Vlad F
Gerasimenko
пропущено...

глянул, для интересу... http://www.ibase.ru/impexp/

Ещё раз, - сервер - не умеет. Инструменты некоторые, да, умеют экспортировать ИЗ него, с разной степенью успеха.
Ты уж давай, жена, отличай разврат от ситуации. (с))

т.е. ты согласен, что экспортировать можно. на этом все: давай, до свидания
...
Рейтинг: 0 / 0
14.05.2020, 01:15
    #39957186
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
А зачем выборку запускать в транзакции? Ну и цикл бесконечный понравился тоже конечно)))

Код: pascal
1.
2.
3.
4.
        while not FExportThread.CheckTerminated do
        begin
          { .... }
        end;
...
Рейтинг: 0 / 0
14.05.2020, 01:28
    #39957187
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
Vlad F
пропущено...

Ещё раз, - сервер - не умеет. Инструменты некоторые, да, умеют экспортировать ИЗ него, с разной степенью успеха.
Ты уж давай, жена, отличай разврат от ситуации. (с))

т.е. ты согласен, что экспортировать можно. на этом все: давай, до свидания

Все дело в том, что я с твоим первоначальным посылом, в принципе, не согласен.
А так, экспортировать можно и нужно, надо только уметь как.
А ежели бы ты действительно хотел "до свидания", то мог бы уже и сам не продолжать упорствовать, считаю.))
...
Рейтинг: 0 / 0
14.05.2020, 01:45
    #39957191
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Gerasimenko
Vlad F
пропущено...

Ещё раз, - сервер - не умеет. Инструменты некоторые, да, умеют экспортировать ИЗ него, с разной степенью успеха.
Ты уж давай, жена, отличай разврат от ситуации. (с))

т.е. ты согласен, что экспортировать можно. на этом все: давай, до свидания

Нельзя. В системе, кроме икселя, должны быть "драйвера"(см.выше), специфичные для данной СУБД. Иксель не умеет коннектиться к FB, и драйвера в поставку не входят.
...
Рейтинг: 0 / 0
14.05.2020, 03:33
    #39957197
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Relic Hunter
А зачем выборку запускать в транзакции? Ну и цикл бесконечный понравился тоже конечно)))

А FireDAC умеет запрос без транзакции выполнять?.. Цикл - рыба.
...
Рейтинг: 0 / 0
14.05.2020, 03:35
    #39957198
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
Vlad F
Но вот FR, например, имеет достаточно отлаженный набор фильтров в разного рода популярные форматы. И вот именно это, на мой взгляд, в данном случае самый цивилизованный путь.

Согласен, но а) у меня слишком примитивная задача, б) нафиг надо на свои его покупать.
...
Рейтинг: 0 / 0
15.05.2020, 04:19
    #39957809
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных из БД в потоке
А написать просто отдельное приложение, запустил его и пусть работает, если это долго.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Экспорт данных из БД в потоке / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]