Перейти к содержанию
Fire Monkey от А до Я
  • 0

База данных портится на смартфоне


kudatsky

Вопрос

SQLite база данных создаётся на РС и частично заполняется.

Далее через USB - кабель переписывается на смартфон и там окончательно заполняется.

Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть.

Клиентская программа пишет : "database disk image is malformed". 

SQLite Studio её тоже не открывает.

Где тут собака порылась ?

Изменено пользователем kudatsky
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
В 26.04.2019 в 12:57, kudatsky сказал:

SQLite база данных создаётся на РС и частично заполняется.

Далее через USB - кабель переписывается на смартфон и там окончательно заполняется.

Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть.

Клиентская программа пишет : "database disk image is malformed". 

SQLite Studio её тоже не открывает.

Где тут собака порылась ?

Какие компоненты используешь? И каким это образом ты ее обратно на комп тащишь??? 

Изменено пользователем Vitaldj
Ссылка на комментарий
  • 0

De

В 30.04.2019 в 05:42, Vitaldj сказал:

Какие компоненты используешь? И каким это образом ты ее обратно на комп тащишь??? 

Delphi, fmx, Firedac. На комп тащу так же как и на смартфон - через USB.

Я эту проблему вроде как решил, только всё как-то странно. Нужно перегрузить смартфон.

Другое решение - сделать backup компонентом FDSQLiteBackup. Такое впечатление,

что после завершения приложения базу данных что-то ещё удерживает.

Ссылка на комментарий
  • 0
В 01.05.2019 в 11:45, Vitaldj сказал:

Это как? Поподробнее об этом...

Есть два приложения, работающие с одной и той же БД SQLite - десктопное и мобильное.

Обмен базами данных между ними происходит через USB. Сначала  десктопное приложение

загружает инфу в БД, через USB БД перекачивается в смартфон, в смартфоне заполняется

и передается через USB обратно на комп.

БД на смартфоне помещаю в каталог Documents. Его адрес получаю функцией

TPath.GetSharedDocumentsPath() из ioUtils.

Изменено пользователем kudatsky
Ссылка на комментарий
  • 0
55 минут назад, kudatsky сказал:

Есть два приложения, работающие с одной и той же БД SQLite - десктопное и мобильное.

Обмен базами данных между ними происходит через USB. Сначала  десктопное приложение

загружает инфу в БД, через USB БД перекачивается в смартфон, в смартфоне заполняется

и передается через USB обратно на комп.

БД на смартфоне помещаю в каталог Documents. Его адрес получаю функцией

TPath.GetSharedDocumentsPath() из ioUtils.

Просто sqlite база данных не относится к клинт-серверным и значит не подразумевается такое использование. Только в монопольным режиме. Тем более, если ты использует firedac, а она вроде бы как использует для коннекта библиотеку. Так вот, не факт, что при дисКоннекте, закрываются все токены БД. Вот у тебя и ошибка. БД думает, что с ней еще работают клиент, ведь по логике БД он должен быть только один. 

Ссылка на комментарий
  • 0
22 часа назад, Vitaldj сказал:

Просто sqlite база данных не относится к клинт-серверным и значит не подразумевается такое использование. Только в монопольным режиме. Тем более, если ты использует firedac, а она вроде бы как использует для коннекта библиотеку. Так вот, не факт, что при дисКоннекте, закрываются все токены БД. Вот у тебя и ошибка. БД думает, что с ней еще работают клиент, ведь по логике БД он должен быть только один. 

Все запросы к БД на смартфоне выполняются так:

- создаётся соединение компонентом TFDConnection

- стартует транзакция

- выполняется запрос

- подтверждается транзакция

- разрывается соединение

т.е. после каждого запроса БД освобождается.

Как БД после этого может думать, что с ней ещё работают - непонятно.

Я для эксперимента пробовал стартовать транзакцию и выполнить запрос

не открывая БД - ничего не получается.

Изменено пользователем kudatsky
Ссылка на комментарий
  • 0
14 минут назад, kudatsky сказал:

Все запросы к БД на смартфоне выполняются так:

- создаётся соединение компонентом TFDConnection

- стартует транзакция

- выполняется запрос

- подтверждается транзакция

- разрывается соединение

т.е. после каждого запроса БД освобождается.

Как БД после этого может думать, что с ней ещё работают - непонятно.

Я для эксперимента пробовал стартовать транзакцию и выполнить запрос

не открывая БД - ничего не получается.

Естественно ничего не получиться)). Это как попытаться ехать в машине при этом не открыть дверь и не сидеть за рулем)). Вы до этого вообще читали, что я писал?

Ссылка на комментарий
  • 0
В 26.04.2019 в 10:57, kudatsky сказал:

SQLite база данных создаётся на РС и частично заполняется.

Далее через USB - кабель переписывается на смартфон и там окончательно заполняется.

Всё работает замечательно. Заполненную БД переписываю обратно на РС и пытаюсь открыть.

Клиентская программа пишет : "database disk image is malformed". 

SQLite Studio её тоже не открывает.

Где тут собака порылась ?

Это все происходит из-за разницы версий SQLite, поэтому обменивайтесь бэкапами, тобишь после того, когда заполнили данные на смартфоне и собираетесь переписать на РС, сначала забэкапьте, потом копируйте бэкап и на РС разверните. Также назад.

Ошибки не будет. 

Ссылка на комментарий
  • 0
В 04.05.2019 в 18:09, #WAMACO сказал:

Это все происходит из-за разницы версий SQLite, поэтому обменивайтесь бэкапами, тобишь после того, когда заполнили данные на смартфоне и собираетесь переписать на РС, сначала забэкапьте, потом копируйте бэкап и на РС разверните. Также назад.

Ошибки не будет. 

Как я понял из документации по Firedac, backup-файл SQLite -это просто копия исходной БД,

полученная с 'осторожностью'. Эту фичу я сделал,  но никакого развёртывания не требуется.

Backup как любой SQLite-файл прекрасно читается и под андроид и под Windows.  Да и

компонента SQLiteRestore в Firedac нет.

Ссылка на комментарий
  • 0
28 минут назад, kudatsky сказал:

Как я понял из документации по Firedac, backup-файл SQLite -это просто копия исходной БД,

полученная с 'осторожностью'. Эту фичу я сделал,  но никакого развёртывания не требуется.

Backup как любой SQLite-файл прекрасно читается и под андроид и под Windows.  Да и

компонента SQLiteRestore в Firedac нет.

Покажите бэкап....

Ссылка на комментарий
  • 0

Vitaldj>

Я проверил предположение о том, что причина в разности версий БД. Для этого я написал

программу, которая полностью создавала БД нужной мне структуры  через SQL запросы

и заполняла её тестовыми данными. Эту программу я запустил на смартфоне.

Всё стало работать нормально. Вы были правы. Большое спасибо.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...