Подскажите - правильно-ли делаю...

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Подскажите - правильно-ли делаю...

Сообщение mrpink » 01.09.2019 08:55:07

Добрый день.
Я только начал изучать lazarus, решаю такую задачу: из xml файлов читаю данные, это несколько больших таблиц. Далее я хочу загрузить эти данные в базу данных на sqlite. Задача имеет мало практического смысла, просто хочу попрактиковаться. Делаю так - создал тип запись для строк таблицы и массив этих записей для хранения таблицы. массив динамический, при считывании данных увеличиваю его размер. Далее у меня на форме stringgrid в который я этот массив вывожу. Всё работает, но таблица у меня большая, и большую часть времени занимает именно вывод массива в stringgrid.
Вопрос - все правильно делаю или есть какие-то другие методы и компоненты?
Спасибо.
mrpink
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.09.2019 05:38:37

Re: Подскажите - правильно-ли делаю...

Сообщение Vadim » 02.09.2019 06:24:35

Если цель - передать данные из XML в таблицу БД, то промежуточные визуальные элементы, типа StringGrid, для этого не нужны. Любая визуализация всегда тормозит. Всё будет правильно, если Вы читаете данные из XML (построчно, т.е. за один раз Вы прочитываете из XML только те данные, которые соответствуют одной строке в таблице БД), формируете из них строковое SQL-выражение для вставки в таблицу (INSERT) и сразу же вставляете.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите - правильно-ли делаю...

Сообщение sign » 02.09.2019 06:40:28

mrpink писал(а):таблица у меня большая, и большую часть времени занимает именно вывод массива в stringgrid.


Код: Выделить всё
  StringGrid1.BeginUpdate;
   ...
  StringGrid1.EndUpdate;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Подскажите - правильно-ли делаю...

Сообщение mrpink » 02.09.2019 06:51:21

Vadim писал(а):Любая визуализация всегда тормозит

Vadim У меня предполагается, что в базу пойдут не совсем те данные, что в файлах, их нужно собрать вместе из разных таблиц прежде чем вставлять в базу. Для этого я их и вывожу. И да - в конечном счете я планирую их не выводить, а сразу писать в БД.

Добавлено спустя 22 минуты 14 секунд:
...Получается так, 571 файл, таблица 30 колонок и 968 строк выполняется за 7 секунд. В принципе я доволен, вчера когда писал, у меня была досадная ошибка - вывод таблицы был не в том месте в цикле, и таблица выводилась каждый раз с начала)))

Добавлено спустя 11 минут 42 секунды:
sign
...добавил, результат - те же 7-8 секунд
mrpink
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.09.2019 05:38:37

Re: Подскажите - правильно-ли делаю...

Сообщение Vadim » 02.09.2019 11:40:25

mrpink писал(а):У меня предполагается, что в базу пойдут не совсем те данные, что в файлах, их нужно собрать вместе из разных таблиц прежде чем вставлять в базу. Для этого я их и вывожу.

В этом случае вывод данных на экран - всё равно лишняя операция. Собрать вместе данные можно и сразу в строку INSERT. Она тут же будет готова для отправки в таблицу, что о строке находящейся в StringGrid никак не скажешь... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите - правильно-ли делаю...

Сообщение mrpink » 02.09.2019 12:17:50

Vadim
...дак я хочу контролировать то что у меня записывается в базу.
mrpink
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.09.2019 05:38:37

Re: Подскажите - правильно-ли делаю...

Сообщение sign » 02.09.2019 13:50:03

mrpink писал(а):...добавил, результат - те же 7-8 секунд

Значит, время теряется на массиве.
А каков у вас алгоритм изменения размера массива?
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Подскажите - правильно-ли делаю...

Сообщение mrpink » 02.09.2019 14:09:56

sign
я просто считаю сколько строк в таблице уже, считаю сколько пришло из текущего файла, соответственно увеличиваю массив, корректирую общее количество. Но вообще-то, я ставил вывод для отладки, таблица заполняется быстро, выводится долго...но как я писал выше, наверное не так уж и долго, у меня там ошибка была.
mrpink
незнакомец
 
Сообщения: 4
Зарегистрирован: 01.09.2019 05:38:37

Re: Подскажите - правильно-ли делаю...

Сообщение Vadim » 02.09.2019 16:15:09

mrpink писал(а):...дак я хочу контролировать то что у меня записывается в базу.

Глазами? :D
30 х 968 = 29 040 ячеек. По-моему, не реально. Глаз замыливается и слишком велика вероятность ошибки. Если уж контролировать, то лучше определить критерии контроля. Например, в колонке 1 числа должны быть не менее 3 и не более 100, в колонке 2 - строковые значения трёх типов: "Вася", "Коля", "Никифор Аполинарьевич" и т.п. Автоматизация контроля данных намного надёжнее, чем уставший глаз...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru