kudatsky Опубликовано 26 апреля, 2019 Поделиться Опубликовано 26 апреля, 2019 (изменено) SQLite база данных создаётся на РС и частично заполняется. Далее через USB - кабель переписывается на смартфон и там окончательно заполняется. Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть. Клиентская программа пишет : "database disk image is malformed". SQLite Studio её тоже не открывает. Где тут собака порылась ? Изменено 26 апреля, 2019 пользователем kudatsky Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 30 апреля, 2019 Поделиться Опубликовано 30 апреля, 2019 (изменено) В 26.04.2019 в 12:57, kudatsky сказал: SQLite база данных создаётся на РС и частично заполняется. Далее через USB - кабель переписывается на смартфон и там окончательно заполняется. Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть. Клиентская программа пишет : "database disk image is malformed". SQLite Studio её тоже не открывает. Где тут собака порылась ? Какие компоненты используешь? И каким это образом ты ее обратно на комп тащишь??? Изменено 30 апреля, 2019 пользователем Vitaldj Цитата Ссылка на комментарий
0 kudatsky Опубликовано 1 мая, 2019 Автор Поделиться Опубликовано 1 мая, 2019 De В 30.04.2019 в 05:42, Vitaldj сказал: Какие компоненты используешь? И каким это образом ты ее обратно на комп тащишь??? Delphi, fmx, Firedac. На комп тащу так же как и на смартфон - через USB. Я эту проблему вроде как решил, только всё как-то странно. Нужно перегрузить смартфон. Другое решение - сделать backup компонентом FDSQLiteBackup. Такое впечатление, что после завершения приложения базу данных что-то ещё удерживает. Ingalime 1 Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 1 мая, 2019 Поделиться Опубликовано 1 мая, 2019 3 часа назад, kudatsky сказал: Delphi, fmx, Firedac. На комп тащу так же как и на смартфон - через USB. Это как? Поподробнее об этом... Цитата Ссылка на комментарий
0 kudatsky Опубликовано 3 мая, 2019 Автор Поделиться Опубликовано 3 мая, 2019 (изменено) В 01.05.2019 в 11:45, Vitaldj сказал: Это как? Поподробнее об этом... Есть два приложения, работающие с одной и той же БД SQLite - десктопное и мобильное. Обмен базами данных между ними происходит через USB. Сначала десктопное приложение загружает инфу в БД, через USB БД перекачивается в смартфон, в смартфоне заполняется и передается через USB обратно на комп. БД на смартфоне помещаю в каталог Documents. Его адрес получаю функцией TPath.GetSharedDocumentsPath() из ioUtils. Изменено 3 мая, 2019 пользователем kudatsky Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 3 мая, 2019 Поделиться Опубликовано 3 мая, 2019 55 минут назад, kudatsky сказал: Есть два приложения, работающие с одной и той же БД SQLite - десктопное и мобильное. Обмен базами данных между ними происходит через USB. Сначала десктопное приложение загружает инфу в БД, через USB БД перекачивается в смартфон, в смартфоне заполняется и передается через USB обратно на комп. БД на смартфоне помещаю в каталог Documents. Его адрес получаю функцией TPath.GetSharedDocumentsPath() из ioUtils. Просто sqlite база данных не относится к клинт-серверным и значит не подразумевается такое использование. Только в монопольным режиме. Тем более, если ты использует firedac, а она вроде бы как использует для коннекта библиотеку. Так вот, не факт, что при дисКоннекте, закрываются все токены БД. Вот у тебя и ошибка. БД думает, что с ней еще работают клиент, ведь по логике БД он должен быть только один. Цитата Ссылка на комментарий
0 kudatsky Опубликовано 4 мая, 2019 Автор Поделиться Опубликовано 4 мая, 2019 (изменено) 22 часа назад, Vitaldj сказал: Просто sqlite база данных не относится к клинт-серверным и значит не подразумевается такое использование. Только в монопольным режиме. Тем более, если ты использует firedac, а она вроде бы как использует для коннекта библиотеку. Так вот, не факт, что при дисКоннекте, закрываются все токены БД. Вот у тебя и ошибка. БД думает, что с ней еще работают клиент, ведь по логике БД он должен быть только один. Все запросы к БД на смартфоне выполняются так: - создаётся соединение компонентом TFDConnection - стартует транзакция - выполняется запрос - подтверждается транзакция - разрывается соединение т.е. после каждого запроса БД освобождается. Как БД после этого может думать, что с ней ещё работают - непонятно. Я для эксперимента пробовал стартовать транзакцию и выполнить запрос не открывая БД - ничего не получается. Изменено 4 мая, 2019 пользователем kudatsky Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 4 мая, 2019 Поделиться Опубликовано 4 мая, 2019 14 минут назад, kudatsky сказал: Все запросы к БД на смартфоне выполняются так: - создаётся соединение компонентом TFDConnection - стартует транзакция - выполняется запрос - подтверждается транзакция - разрывается соединение т.е. после каждого запроса БД освобождается. Как БД после этого может думать, что с ней ещё работают - непонятно. Я для эксперимента пробовал стартовать транзакцию и выполнить запрос не открывая БД - ничего не получается. Естественно ничего не получиться)). Это как попытаться ехать в машине при этом не открыть дверь и не сидеть за рулем)). Вы до этого вообще читали, что я писал? Цитата Ссылка на комментарий
0 #WAMACO Опубликовано 4 мая, 2019 Поделиться Опубликовано 4 мая, 2019 В 26.04.2019 в 10:57, kudatsky сказал: SQLite база данных создаётся на РС и частично заполняется. Далее через USB - кабель переписывается на смартфон и там окончательно заполняется. Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть. Клиентская программа пишет : "database disk image is malformed". SQLite Studio её тоже не открывает. Где тут собака порылась ? Это все происходит из-за разницы версий SQLite, поэтому обменивайтесь бэкапами, тобишь после того, когда заполнили данные на смартфоне и собираетесь переписать на РС, сначала забэкапьте, потом копируйте бэкап и на РС разверните. Также назад. Ошибки не будет. Цитата Ссылка на комментарий
0 kudatsky Опубликовано 5 мая, 2019 Автор Поделиться Опубликовано 5 мая, 2019 В 04.05.2019 в 18:09, #WAMACO сказал: Это все происходит из-за разницы версий SQLite, поэтому обменивайтесь бэкапами, тобишь после того, когда заполнили данные на смартфоне и собираетесь переписать на РС, сначала забэкапьте, потом копируйте бэкап и на РС разверните. Также назад. Ошибки не будет. Как я понял из документации по Firedac, backup-файл SQLite -это просто копия исходной БД, полученная с 'осторожностью'. Эту фичу я сделал, но никакого развёртывания не требуется. Backup как любой SQLite-файл прекрасно читается и под андроид и под Windows. Да и компонента SQLiteRestore в Firedac нет. Цитата Ссылка на комментарий
0 #WAMACO Опубликовано 5 мая, 2019 Поделиться Опубликовано 5 мая, 2019 28 минут назад, kudatsky сказал: Как я понял из документации по Firedac, backup-файл SQLite -это просто копия исходной БД, полученная с 'осторожностью'. Эту фичу я сделал, но никакого развёртывания не требуется. Backup как любой SQLite-файл прекрасно читается и под андроид и под Windows. Да и компонента SQLiteRestore в Firedac нет. Покажите бэкап.... Цитата Ссылка на комментарий
0 kudatsky Опубликовано 9 мая, 2019 Автор Поделиться Опубликовано 9 мая, 2019 Vitaldj> Я проверил предположение о том, что причина в разности версий БД. Для этого я написал программу, которая полностью создавала БД нужной мне структуры через SQL запросы и заполняла её тестовыми данными. Эту программу я запустил на смартфоне. Всё стало работать нормально. Вы были правы. Большое спасибо. Цитата Ссылка на комментарий
Вопрос
kudatsky
SQLite база данных создаётся на РС и частично заполняется.
Далее через USB - кабель переписывается на смартфон и там окончательно заполняется.
Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть.
Клиентская программа пишет : "database disk image is malformed".
SQLite Studio её тоже не открывает.
Где тут собака порылась ?
Изменено пользователем kudatskyСсылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.