|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MS Access Многопоточная запись в базу данных access25.10.2019, 22:06. Показов 5473. Ответов 32
друзья столкнулся с такой ситуацией пишу в потоках данные в таблицу через adoquery. В итоге данные в таблице перемешаны, есть ли способ писать данные по порядку?
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 25.10.2019, 22:06 | |
|
Ответы с готовыми решениями:
32
Нужно создать электронную запись на приём к врачу в Access базу данных, и сделать саму программу в delphi Запись в базу данных Access Запись в базу данных Access |
|
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|||||||||||
| 26.10.2019, 01:17 | |||||||||||
|
Сразу возникает вопрос, а что вы вкладываете в понятие порядок? В таблице данные могут быть как угодно перемешаны, это не важно, а вот порядок вы уже сами задаете при выводе результатов, для чего принято использовать запросы с сортировкой.
Ну а многопоточность как-бы предполагает под собой отсутствие порядка и потом вы в потоке вот такое написали:
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
||
| 26.10.2019, 12:36 [ТС] | ||
|
Можно подробнее о запросе с сортировкой. Дело в том что в реальной программе могут записываться десятки и сотни тысяч записей (регистрационные данные с телеметрии пишутся каждую секунду) выгрузка в таблицу занимает много времени, вот и хочу ускорить как то данный процесс. и еще при загрузке в одном потоке основная форма зависает на время загрузки. приведенный выше мной пример тестовый. как правильно написать подскажите?
Добавлено через 6 минут
0
|
||
| 26.10.2019, 13:06 | ||||
|
купите ссд и положите файлы на ссд хранимка вставляет данные в таблицу в случае некорректных данных, исключение пишет эту строку в таблицу с ошибками
0
|
||||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
|||||||||||||||||||||||||||||||
| 26.10.2019, 13:09 [ТС] | |||||||||||||||||||||||||||||||
|
Часть кода из реальной программы
Тут я свой диалог создаю:
дальше загружаю данные в дочернее окно
0
|
|||||||||||||||||||||||||||||||
|
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 26.10.2019, 13:30 | |
|
Можно существенно ускорить загрузку в базу, если использовать механизм транзакций для пачки записей, а не для одной как это происходит у вас по умолчанию. Какой версией Delphi вы пользуетесь? Если XE, то настоятельно рекомендую перейти на SQLite вместо Access, если нужна именно локальная база. Дело в том, что даже самый новый Акцесс использует очень старую версию SQL, где отсутствует масса крайне удобных SQL-конструкций.
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
||
| 26.10.2019, 13:46 [ТС] | ||
|
смотрел в сторону mysql но во первых я с ней не знаком, во вторых нужно сервер устанавливать на локальном ПК, забил на нее у меня дедлайны закончились уже месяц назад, голова уже кругом. Хотел бы все таки использовать Access, но не знаю как оптимально написать код для правильной загрузки выгрузки то что я использую медленно, догадываюсь можно ускорить. у меня данные парсятся с файлов в базу или выгружаются из прибора в базу. далее эти данные выводятся в DBChart.
0
|
||
|
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 26.10.2019, 13:52 | |
|
MySQL и SQLite это разные вещи. MySQL - клиент/серверная БД, а вот SQLite - это чисто клиентская база, как и Акцес она использует один файл.
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
|||||||
| 26.10.2019, 14:06 [ТС] | |||||||
|
Приму к сведению.
на данный момент нет времени новую базу изучать у меня сдача проекта исчисляется днями и уже за..д дымит, поэтому прошу помощи. Подскажите как написать хотя бы ПРАВИЛЬНО загрузку выгрузку (быстрое удаление всей таблицы) так как потеря данных критична, если можно пример кода запись/чтение для моего случая. Добавлено через 3 минуты это
0
|
|||||||
|
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 26.10.2019, 15:38 | |
|
Да D1973, к сожалению вы правы, но я же Пытливый и проверил сам.
В качестве теста пишу в базу 5 раз по 10000 случайных строк. Транзакция настроена на пачку в 50 записей и вот такой печальный результат получается: Transaction Off, Elapsed time: 9235 Transaction On, Elapsed time: 9047 Transaction Off, Elapsed time: 9062 Transaction On, Elapsed time: 9000 Transaction Off, Elapsed time: 8859 Transaction Off, Elapsed time: 8875 Transaction On, Elapsed time: 8984 Transaction On, Elapsed time: 9078
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
|
| 26.10.2019, 16:35 [ТС] | |
|
Вопрос на засыпку на сколько быстро можно переписать с Access на SQLite и что для этого нужно, с чем его едят? или для этого нужно засесть в гугл на неделю, осваивая новый метод?
0
|
|
| 26.10.2019, 18:42 | ||
|
Не по теме:
0
|
||
| 26.10.2019, 19:07 | ||||||||
|
если у вас не реальная задача, то и беспокоится не о чем 5 минут у вас будут файлы загружаться или 10, значения не имеет, миллион строк вы нагенерируете, а больше для учебной задачи и не нужно
0
|
||||||||
|
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 26.10.2019, 19:18 | |
|
Нет, все не настолько печально. Для доступа к SQLite из XE у вас уже есть инструментарий - FireDac. Подключится к базе SQLite элементарно, единственная хитрость, надо выставить в настройках подключения флаг LockingMode = lmNormal
Не знаю зачем этот флаг выставлен по умолчанию в lmExclusive, но если его оставить в этом состоянии, нормально работать с базой SQLite - задачка не для слабонервных. А вот нормальный менеджер для создания,изменения баз SQLite вам придется скачать. Очень хорош для первичного ознакомления SQLite Studio, к сожалению сейчас не поддерживается, но есть весьма неплохая альтернатива DBeaver который позволяет подключаться не только к SQLite, но и к другим популярным базам.
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
|
| 26.10.2019, 20:38 [ТС] | |
|
0
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
|||||||||||||||||||
| 27.10.2019, 14:03 [ТС] | |||||||||||||||||||
|
Друзья вопрос актуален, на sqlite пока не буду переводить, не хочу переписывать процедуры. В будущих разработках сделаю на нем.
Добавлено через 1 минуту Задача реальная не учебный проект Добавлено через 3 минуты
Добавлено через 8 минут /questions/828576/the-fastest-way-to-load-an-array-dml-in-delphi-firedac Добавлено через 8 минут ссылку не дает вставить полностью qaruточкаsite... Добавлено через 38 минут
Я использую Delphi XE8 с FireDAC для загрузки большой базы данных SQLite. Для этого я использую технику выполнения Array DML для эффективной вставки большого количества записей одновременно, например:
Это было время: Arraysize: 1, Executes: 33,790, Timing: 1530 ms (pbByName), 1449 ms (pbByNumber) Arraysize: 10, Executes: 3,379, Timing: 1034 ms (pbByName), 782 ms (pbByNumber) Arraysize: 100, Executes: 338, Timing: 946 ms (pbByName), 499 ms (pbByNumber) Arraysize: 1000, Executes: 34, Timing: 890 ms (pbByName), 259 ms (pbByNumber) Arraysize: 10000, Executes: 4, Timing: 849 ms (pbByName), 227 ms (pbByNumber) Arraysize: 20000, Executes: 2, Timing: 594 ms (pbByName), 172 ms (pbByNumber) Arraysize: 50000, Executes: 1, Timing: 94 ms (pbByName), 94 ms (pbByNumber) Теперь интересная вещь об этих временах заключается в том, что загрузка этих 33 790 записей в TCollection занимает полные 93 мс при каждом запуске теста. Неважно, добавляются ли они по одному за раз или 10000 за раз, эти накладные расходы на заполнение TCollection of Params всегда присутствуют. Для сравнения я сделал больший тест с 198 522 вставками только для pbByNumber: Arraysize: 100, Executes: 1986, Timing: 2774 ms (pbByNumber) Arraysize: 1000, Executes: 199, Timing: 1371 ms (pbByNumber) Arraysize: 10000, Executes: 20, Timing: 1292 ms (pbByNumber) Arraysize: 100000, Executes: 2, Timing: 894 ms (pbByNumber) Arraysize: 1000000, Executes: 1, Timing: 506 ms (pbByNumber) Для всех случаев этого теста накладные расходы на загрузку TCollection Params занимают около 503 мс. Таким образом, загрузка TCollection составляет около 400 000 записей в секунду. Это значительная часть времени вставки, и как только я начну работать с большими базами данных миллионами, это добавленное время будет весьма заметно для пользователя моей программы. Я хотел бы улучшить это, но я еще не нашел способ ускорить загрузку параметров. Обновление 2: я смог добиться улучшения примерно в 10% времени, поместив весь свой код между StartTransaction и Commit, так что все блоки будут обрабатываться одновременно. Но я все еще ищу способ загрузить TCollection of Params намного быстрее. Еще одна идея: То, что могло бы работать хорошо и могло бы быть в 16 раз быстрее, если бы это было возможно, было бы чем-то вроде метода ParamValues. Это назначает несколько параметров одновременно и имеет дополнительное преимущество, заключающееся в прямой подаче варианта массива, и устраняет необходимость в приведении значений. Это будет работать так:
0
|
|||||||||||||||||||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 133
|
||||||||||||||||
| 13.11.2019, 01:23 [ТС] | ||||||||||||||||
|
Доброго времени суток
столкнулся с такой проблемой, создал тестовый проект для быстрой загрузки данных в sqlite. таблица заполняется верно и быстро, но не отображается в dbgrid. при попытке включить
если программу перезагрузить с уже ранее заполненной таблицей, данные в dbgrid отображаются корректно.
0
|
||||||||||||||||
| 13.11.2019, 01:23 | |
|
Помогаю со студенческими работами здесь
20
Запись в базу данных access запись из txt файла в базу данных Access Как программно добавить запись в базу данных access через datagridview? Запись в базу access ADO Как заполнить базу данных Access с помощью vba в том же access и считать из нее инфу? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|