1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62

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

18.04.2016, 09:28. Показов 3411. Ответов 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
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 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
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
18.04.2016, 14:20
вы посчитайте что у вас дольше всего
-цикл для получения массива
-создание экселя
-вывод в эксель

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

"это наверное будет долго". а я говорю что не будет
0
1 / 1 / 1
Регистрация: 25.01.2016
Сообщений: 62
18.04.2016, 14:36  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
вы посчитайте что у вас дольше всего
-цикл для получения массива
-создание экселя
-вывод в эксель
Проблема в цикле для получения массива.
Создание экселя и вывод данных в него занимает секунды.
0
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru