powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Экспорт данных из БД в потоке
25 сообщений из 29, страница 1 из 2
Экспорт данных из БД в потоке
    #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
Экспорт данных из БД в потоке
    #39957146
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять зачем у тебя LConnection сидит за пределами треда.
...
Рейтинг: 0 / 0
Экспорт данных из БД в потоке
    #39957148
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Не могу понять зачем у тебя LConnection сидит за пределами треда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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