Страница 1 из 1

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

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

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

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

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

СообщениеДобавлено: 02.09.2019 06:40:28
sign
mrpink писал(а):таблица у меня большая, и большую часть времени занимает именно вывод массива в stringgrid.


Код: Выделить всё
  StringGrid1.BeginUpdate;
   ...
  StringGrid1.EndUpdate;

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

СообщениеДобавлено: 02.09.2019 06:51:21
mrpink
Vadim писал(а):Любая визуализация всегда тормозит

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

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

Добавлено спустя 11 минут 42 секунды:
sign
...добавил, результат - те же 7-8 секунд

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

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

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

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

СообщениеДобавлено: 02.09.2019 12:17:50
mrpink
Vadim
...дак я хочу контролировать то что у меня записывается в базу.

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

СообщениеДобавлено: 02.09.2019 13:50:03
sign
mrpink писал(а):...добавил, результат - те же 7-8 секунд

Значит, время теряется на массиве.
А каков у вас алгоритм изменения размера массива?

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

СообщениеДобавлено: 02.09.2019 14:09:56
mrpink
sign
я просто считаю сколько строк в таблице уже, считаю сколько пришло из текущего файла, соответственно увеличиваю массив, корректирую общее количество. Но вообще-то, я ставил вывод для отладки, таблица заполняется быстро, выводится долго...но как я писал выше, наверное не так уж и долго, у меня там ошибка была.

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

СообщениеДобавлено: 02.09.2019 16:15:09
Vadim
mrpink писал(а):...дак я хочу контролировать то что у меня записывается в базу.

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