Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1: 2013-03-06 22:43:54 ЛС | профиль | цитата
Для работающих с БД
code_30511.txt
Пришлось работать с таблицей на 800 000 строк.
(Обычная загрузка в MTStrTbl - более 4-х минут.)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_30511.txt [5.3KB] [508]
Гость
Ответов: 17029
Рейтинг: 0
#2: 2013-03-06 22:46:26 правка | ЛС | профиль | цитата


Редактировалось 6 раз(а), последний 2021-06-21 07:13:34
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#3: 2013-03-06 22:47:57 ЛС | профиль | цитата
143.gprs.mts.ru писал(а):
Ошибка файла
Ну-ну.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 704
Рейтинг: 44
#4: 2013-03-06 23:02:04 ЛС | профиль | цитата
Tad писал(а):
Tad
Вот скрин
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#5: 2013-03-06 23:06:54 ЛС | профиль | цитата
По желанию - или правая, или нижняя.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#6: 2013-03-06 23:26:24 ЛС | профиль | цитата
Tad писал(а):
Для работающих с БД

И чем это отличается от MST_Virtual
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#7: 2013-03-06 23:41:55 ЛС | профиль | цитата
nesco писал(а):
И чем это отличается от MST_Virtual ?
А Вы попробуйте (с)
Отличается тем, что ты работаешь с MTStrTbl (в которую нужно загрузить, в моём случае, все 800 тысяч строк, а это 3-4 минуты ), а предлагаемый блок работает с таблицей БД мгновенно, т.к. загружает только то, что влезает в окно (обычно от 20 до 50 строк).
И грех не воспользоваться точкой MTStrTbl.PerPage
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#8: 2013-03-07 00:20:30 ЛС | профиль | цитата
Tad писал(а):
Отличается тем, что ты работаешь с MTStrTbl (в которую нужно загрузить, в моём случае, все 800 тысяч строк, а это 3-4 минуты ), а предлагаемый блок работает с таблицей БД мгновенно, т.к. загружает только то, что влезает в окно (обычно от 20 до 50 строк)

Гы. А ты хоть читал, что такое MST_Virtual и смотрел пример
Получилось из серии -- не читал, но осуждаю... (с)

Для особо умных

MST_Virtual писал(а):
Клиентский модуль MTStrTbl для работы с таблицой в виртуальном режиме

Сама таблица начинает работать с параметром

KOL писал(а):
lvoOwnerData- список является виртуальным, т.е. изначально не хранит сам никакие данные, а в обработчике события OnLVData получает их пользовательского кода;
...
OnLVData и OnLVDataW - особое событие для виртуального списка (с опцией lvoOwnerData). Обработчик этого события вызывается каждый раз, когда при рисовании окна списка системе требуется получить текст и изображения для отображения (виртуальные списки тем и отличаются от обычных, что текст и изображения программа хранит у себя, и в результате появляется возможность быстро работать с огромными списками данных);


карма: 22

0
Ответов: 16884
Рейтинг: 1239
#9: 2013-03-07 00:33:55 ЛС | профиль | цитата
nesco, простейшую схемку можно ? А я подставлю свою БД.
Не надо, нашёл в Wiki
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#10: 2013-03-07 00:52:08 ЛС | профиль | цитата
Tad писал(а):
Не надо, нашёл в Wiki

Я ее только что немного подправил, найдя там лишний компонент
Я заменил вот это

Add(EventFromData,8915826,581,140)
{
link(onEvent,11190417:doValue,[])
}
Add(FormatStr,2121123,644,189)
{
Mask="SELECT %2
FROM elements
WHERE
(id = 1 + %1) AND
(id <= (Select Max(id) from elements))
LIMIT 1"
link(onFString,14158325:doQuery,[])
link(Str1,11190417:Value1,[])
link(Str2,11190417:Value3,[(657,180)(664,180)])
}
Add(DSC_QueryScalar,14158325,693,189)
{
DSManager="sqlite"
link(onQuery,8915826:doData,[(732,195)(732,125)(571,125)(571,146)])
}
Add(MT_MultiMem,11190417,644,140)
{
Count=3
link(onData,2121123:doString,[(683,146)(683,129)(631,129)(631,195)])
}

вот на это

Add(EventFromData,8915826,581,140)
{
link(onEvent,2121123:doString,[])
}
Add(FormatStr,2121123,630,140)
{
DataCount=3
Mask="SELECT %3
FROM elements
WHERE
(id = 1 + %1) AND
(id <= (Select Max(id) from elements))
LIMIT 1"
link(onFString,14158325:doQuery,[])
}
Add(DSC_QueryScalar,14158325,679,140)
{
DSManager="sqlite"
link(onQuery,8915826:doData,[(718,146)(718,132)(571,132)(571,146)])
}

карма: 22

0
Ответов: 16884
Рейтинг: 1239
#11: 2013-03-07 02:02:25 ЛС | профиль | цитата
Результаты теста таблицы на 803004 строк на схеме из Wiki:
Между запуском схемы и появлением формы на экране 2мин.35сек.
Кстати, почему у тебя после открытия БД сразу идет Select * From и вызывает 803004 раз Select Max(id) From и Math, который тоже 803004 раз отнимает 1 от Max(id).
Количество и имена колонок можно получить проще : PRAGMA table_info(table-name);
А мой
Tad писал(а):
предлагаемый блок работает с таблицей БД мгновенно

------------ Дoбавленo в 02.02:
Кстати, о птичках. В этой БД, что у меня нет ID в таблицах.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#12: 2013-03-07 02:23:07 ЛС | профиль | цитата
Tad писал(а):
Кстати, почему у тебя после открытия БД сразу идет Select * From и вызывает 803004 раз Select Max(id) From и Math, который тоже 803004 раз отнимает 1 от Max(id)

А это что бы оставалось место подумать, как улучшить. Писалось на скорую руку, давно, и не особеннов вдаваясь в подробности. Надо улучшить, я не спорю. Но возможность не грузить в таблицу всех данных, в ней все же есть.

Tad, а ты можешь улучшить пример с учетом предложений, я его добавлю тогда в справку.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2013-03-07 12:31:09 ЛС | профиль | цитата
nesco, извини, но я в 02:23 по вашему - уже спал .
Сегодня дома, поработаю над примером.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)