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

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

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

Ответить
mrpink
незнакомец
Сообщения: 4
Зарегистрирован: 01.09.2019 04:38:37

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

Сообщение mrpink »

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

Сообщение Vadim »

Если цель - передать данные из XML в таблицу БД, то промежуточные визуальные элементы, типа StringGrid, для этого не нужны. Любая визуализация всегда тормозит. Всё будет правильно, если Вы читаете данные из XML (построчно, т.е. за один раз Вы прочитываете из XML только те данные, которые соответствуют одной строке в таблице БД), формируете из них строковое SQL-выражение для вставки в таблицу (INSERT) и сразу же вставляете.
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

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


Код: Выделить всё

  StringGrid1.BeginUpdate;
   ...
  StringGrid1.EndUpdate;
mrpink
незнакомец
Сообщения: 4
Зарегистрирован: 01.09.2019 04:38:37

Сообщение mrpink »

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

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

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

Добавлено спустя 11 минут 42 секунды:
sign
...добавил, результат - те же 7-8 секунд
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

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

Сообщение mrpink »

Vadim
...дак я хочу контролировать то что у меня записывается в базу.
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

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

Значит, время теряется на массиве.
А каков у вас алгоритм изменения размера массива?
mrpink
незнакомец
Сообщения: 4
Зарегистрирован: 01.09.2019 04:38:37

Сообщение mrpink »

sign
я просто считаю сколько строк в таблице уже, считаю сколько пришло из текущего файла, соответственно увеличиваю массив, корректирую общее количество. Но вообще-то, я ставил вывод для отладки, таблица заполняется быстро, выводится долго...но как я писал выше, наверное не так уж и долго, у меня там ошибка была.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

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