Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62

Необходимо вытащить большой объем данных из MySQL в Excel

18.04.2016, 09:28. Показов 3302. Ответов 22

Студворк — интернет-сервис помощи студентам
Всем привет!
Необходимо вытащить большой объем данных из mysql в excel.
Вариантный массив хорош, но при большом объеме слишком медлителен.
Нашел такую функцию у excel

Delphi
1
XL.ActiveWorkbook.ActiveSheet.cells[1, 1].CopyFromRecordset(ADOQuery1.Recordset);
Отлично работает. Миллион записей выгружает за несколько секунд.
Но на другом ПК, где не установлен драйвер MySQL программа работать не будет.
Есть возможность у ADO прописать сам драйвер MySQL и поместить его в папку с проектом, как у ZEOS?
Или может передать набор данных из Zeos в ADO Recordset...

P.S.
Для тех, кого устроит CSV
Delphi
1
2
3
4
var f: tstringlist;
......
f.text = ADOQuery1.Recordset.GetString(2, -1, ' , ', char(13) + char(10), 'null');
f.SaveToFile('test.csv');
P.S. еще разок...

Delphi
1
2
XL.ActiveWorkbook.ActiveSheet.range[XL.cells[1, 1],
    XL.cells[ADOQuery1.FieldCount +1, ADOQuery1.RecordCount + 1]]:= ADOQuery1.Recordset;
Но тут данные будут в строку... Не знаю, как перевернуть...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2016, 09:28
Ответы с готовыми решениями:

Большой объем базы данных при импорте из Excel
Добрый день. Прошу у форумчан совета или указания ошибки. Сам ввиду ничтожно малого опыта работы с базами данных разобраться с проблемой...

Быстро передать большой объем данных из Excel в DataGridviev
Есть большая таблица на одном листе. Размеры таблицы 200 столбцов на 7-10 тыс строк Нужно быстро залить ее в датагрид. Какие мысли есть?

Большой объём данных
В общем, есть проект, игра, жанр стратегия, варгейм, только в онлайн режиме и только по мобильные платформы. Детально расписывать не буду,...

22
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
18.04.2016, 11:26
прямо интересно, а как миллион записей чувствует себя в Excel
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 11:35  [ТС]
2 поля числовых значений(1000000 строк), файл весит 13 метров. Скролл не тупит, поиск работает, открывается файл за ~10 сек.
От нажатия на кнопку до готового файла ~ 14 сек.
С самим файлом проблем нет, а вот как ADO победить, чтобы на любом ПК работал...

Через вариантный массив, такой объем выгружался часа полтора.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
18.04.2016, 11:38
адо вообще ни при чем
совсем
адо обращается к серверу БД за данными
нет сервера - не к чему обращаться

Добавлено через 43 секунды
у меня 10000 строк спокойно ставят Excel на колени
каждый скролл - десятки секунд
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 11:46  [ТС]
У меня 2013 excel справляется с таким файлом без проблем.
Проблема в том, что метод CopyFromRecordset принимает только ADORecordset. А программа будет использоваться на n кол-ве ПК, где может не стоять драйвер MySQL. До того, как я нашел этот метод, использовал Zeos, в котором просто указываешь провайдера и путь к libmysql.dll. Но у Zeos нет recordset, а у ADO я не знаю, как организовать такое подключение...
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 12:02
я с помощью вот этого вывожу в эксель
http://avemey.com/zexmlss/delphizip.php?lang=ru

никаких проблем со скоростью
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 12:13  [ТС]
Тут тотже перебор, что и с вариантным массивом. Чтобы заполнить лист экселя, нужно пройтись по всем ячейкам.
А это займет кучу времени...
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 12:15
boscher, вы теоретик?
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 12:20  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
boscher, вы теоретик?
Посмотрел пример экспорта, из присланной вами ссылки.
Там 2 цикла for, для заполнения ячеек...
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 12:24
boscher, я вывожу по 100к строк за одно моргание глазом
ПОПРОБУЙТЕ

выполните
SQL
1
SELECT top 100000 FROM
, а затем все это в эксель.
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 12:44  [ТС]
А как заполняете TZEXMLSS.Sheets[0].Cell[j,i].Data?

Так нужно?
Delphi
1
2
3
4
5
6
  for x := 0 to ZReadOnlyQuery1.RecordCount - 1  do
    for y := 0 to ZReadOnlyQuery1.FieldCount - 1  do
    begin
      TZEXMLSS.Sheets[0].Cell[x, y].Data:= ZReadOnlyQuery1.Fields[y].Value;
      ZReadOnlyQuery1.Next;
    end;
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 13:10
можно и так, но я предпочитаю по старинке - цикл по строкам, а столбцы руками перечисляю
если разные типы данных и нужна обработка - так проще
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 13:52  [ТС]
К сожалению, сейчас нет возможности установить этот компонент и протестировать на 1000к записях.
Но это очень похоже на заполнение вариантного массива, что длится очень долго.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
  ZReadOnlyQuery1.Open;
  varr:= VarArrayCreate([0, ZReadOnlyQuery1.RecordCount, 0, ZReadOnlyQuery1.FieldCount], varOleStr);
  for x := 0 to ZReadOnlyQuery1.RecordCount - 1  do
    for y := 0 to ZReadOnlyQuery1.FieldCount - 1  do
    begin
      varr[x, y]:= ZReadOnlyQuery1.Fields[y].Value;
      ZReadOnlyQuery1.Next;
    end;
  XL := CreateOleObject('Excel.Application');
  XL.Visible := True;
  XL.Workbooks.add;
  XL.ActiveWorkbook.ActiveSheet.range[XL.cells[1, 1],
    XL.cells[ZReadOnlyQuery1.RecordCount, ZReadOnlyQuery1.FieldCount]]:= varr;
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 14:20
вы посчитайте что у вас дольше всего
-цикл для получения массива
-создание экселя
-вывод в эксель

Цитата Сообщение от boscher Посмотреть сообщение
сейчас нет возможности установить этот компонент и протестировать на 1000к записях.
тогда зачем теоритезировать

"это наверное будет долго". а я говорю что не будет
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 14:36  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
вы посчитайте что у вас дольше всего
-цикл для получения массива
-создание экселя
-вывод в эксель
Проблема в цикле для получения массива.
Создание экселя и вывод данных в него занимает секунды.
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 14:51
а как вы его получаете?
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 14:59  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
  ZReadOnlyQuery1.Open;
  varr:= VarArrayCreate([0, ZReadOnlyQuery1.RecordCount, 0, ZReadOnlyQuery1.FieldCount], varOleStr);  //Создаем массив
  for x := 0 to ZReadOnlyQuery1.RecordCount - 1  do // Заполняем массив
    for y := 0 to ZReadOnlyQuery1.FieldCount - 1  do
    begin
      varr[x, y]:= ZReadOnlyQuery1.Fields[y].Value;
      ZReadOnlyQuery1.Next;
    end;
  XL := CreateOleObject('Excel.Application');
  XL.Visible := True;
  XL.Workbooks.add;
  XL.ActiveWorkbook.ActiveSheet.range[XL.cells[1, 1],       
    XL.cells[ZReadOnlyQuery1.RecordCount, ZReadOnlyQuery1.FieldCount]]:= varr;   //Передаем массив в эксель
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 15:15
какой-то ужас

вот тесты скорости
http://www.webdelphi.ru/2012/0... -v-delphi/
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 15:34  [ТС]
Проблема не в скорости записи массива в эксель, а в получении этого массива.
Как я описал в первом посте, в ADO можно использовать в качестве массива данных для передачи экселю Recordset.
Тут сразу отпадает шаг по получению массива данных путем перебора из ADOQuery(ZQuery) и записи в отдельный вариантный массив. Но проблема в том, что я не знаю, как сделать, чтобы это подключение (ADOConnection к MySQL) работало на любом ПК. Или как приспособить ZEOS к ADORecordset, чтобы потом передать его в эксель.
Может есть другие компоненты для работы с БД, которые используют ADORecordset...
0
5951 / 4527 / 1094
Регистрация: 29.08.2013
Сообщений: 28,119
Записей в блоге: 3
18.04.2016, 15:41
почему не таскать драйвер с собой?

никогда не работал с mySQL из делфи, поэтому приколов с драйвером не знаю
но я распространял как то библиотеки для аксесса в локальной сети на 300 компов - никаких проблем с этим нет

вот такой батничек в групповых политиках и все
Code
1
2
3
4
5
6
7
8
if exist %SystemRoot%\system32\hasp_com_windows.dll goto L2
copy hasp_com_windows.dll  %SystemRoot%\system32 
regsvr32 %SystemRoot%\system32\hasp_com_windows.dll
 
:L2
if exist %SystemRoot%\system32\mscomct2.ocx goto L1
copy mscomct2.ocx  %SystemRoot%\system32 
regsvr32 %SystemRoot%\system32\mscomct2.ocx
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.04.2016, 15:41
Помогаю со студенческими работами здесь

Большой объём данных в Access
Здравствуйте! У меня проблема. В БД Access я создала две таблицы. 1-ая небольшая (Название_парам., Описание, Признак). А 2-ая...

ReportViewer Большой объем данных
Здравствуйте, использую на сайте в доменной сети C# элемент ReportViewer для отображения отчетов... Но есть один нехороший нюанс... Когда...

Скопировать большой объём данных
Имеются два txt-файла почти по 100К строк (каждый порядка 3 МБ весит). Нужно "скрестить" эти файлы, подставляя по очереди строки из...

Большой объем данных в ArrayDataProvider
Я использую фреймворк Yii2. Обычно для отображения табличных данных я использую виджет GridView. Чтобы получить нужные данные, я использую...

Большой объем данных в память
Привет, кто что думает по такому вопросу: Для хранения настроечных данных мы используем лотусовые документы. Далее пишутся классы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru