#WAMACO Опубликовано 15 января, 2016 Поделиться Опубликовано 15 января, 2016 Подскажите как можно обновить целиком файл БД (SQLite) без закрытия приложения, например, по нажатию кнопки <Обновить БД>. Интересуют особенности реализации для Android и iOS. Принимаются любые идеи, реализации и т.д. Delphi Seattle 10 Олег Киреев 1 Цитата Ссылка на комментарий
0 bigjorj Опубликовано 15 января, 2016 Поделиться Опубликовано 15 января, 2016 Закрываешь все соединения (FDConnection.Close) и спокойно перезаписываешь файл базы данных. Главное - это не деплоить файл базы данных в apk, а создавать его при первом открытии. иначе андроид не даст его удалить или перезаписать. Олег Киреев и Константин Паньков 2 Цитата Ссылка на комментарий
0 masmat Опубликовано 4 февраля, 2016 Поделиться Опубликовано 4 февраля, 2016 (изменено) Под Android я делаю так. Вставляю изначально файл БД в Deploy. Потом вызываю при необходимости процедуру procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var PackageName: JString; zip: TZipFile; begin // Отключаемся от базы FDConnection1.Connected := False; // Получаем имя apk файла PackageName := SharedActivityContext.getPackageResourcePath; if TFile.Exists(JStringToString(PackageName)) then begin // Удаляем старый файл базы TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db'); // Извлекаем новый файл базы zip := TZipFile.Create; zip.Open(JStringToString(PackageName), TZipMode.zmRead); zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False); zip.Close; zip.free; end; // Подключаемся к базе FDConnection1.Connected := True; end; Под iOS вставляю в ресурсы, потом вот так procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin // Отключаемся от базы FDConnection1.Connected := False; if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA)); if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then begin TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); end else begin rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); end; FDConnection1.Connected := True; end; Изменено 4 февраля, 2016 пользователем masmat #WAMACO, Вадим Шавров, ENERGY и 2 других 5 Цитата Ссылка на комментарий
0 masmat Опубликовано 4 февраля, 2016 Поделиться Опубликовано 4 февраля, 2016 Закрываешь все соединения (FDConnection.Close) и спокойно перезаписываешь файл базы данных. Главное - это не деплоить файл базы данных в apk, а создавать его при первом открытии. иначе андроид не даст его удалить или перезаписать. При указанном мной способе, файл перезаписывается на УРА Олег Киреев, Константин Паньков и Владимир 3 Цитата Ссылка на комментарий
0 dervish00 Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 Подниму темку. Все описанное выше хорошо для БД, в которые пользователь ничего не сохраняет, а как сделать то же (апгрейдить БД) в которую пользователь уже чего-то занес. Просится решение, что-то вроде выгрузки из текущей базы, например, в xml, удаление текущей, создание новой и загрузки в новую данных из xml. Отсюда вопрос: есть ли какие-либо готовые решения выгрузки SQLite БД в XML? Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 9 минут назад, dervish00 сказал: Подниму темку. Все описанное выше хорошо для БД, в которые пользователь ничего не сохраняет, а как сделать то же (апгрейдить БД) в которую пользователь уже чего-то занес. Просится решение, что-то вроде выгрузки из текущей базы, например, в xml, удаление текущей, создание новой и загрузки в новую данных из xml. Отсюда вопрос: есть ли какие-либо готовые решения выгрузки SQLite БД в XML? Вы как то странно, на мой взгляд ставите вопрос. Зачем тогда создавать новую, если уже есть старая? Так и делайте обновления старой))) update, alter и тд и тп. dervish00 1 Цитата Ссылка на комментарий
0 dervish00 Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 дааа, что-то я погорячился... все гораздо проще. но, вопрос в любом случае не снимается - SQLite -> XML, например для бакапа. правда, это другая тема... Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 3 часа назад, dervish00 сказал: дааа, что-то я погорячился... все гораздо проще. но, вопрос в любом случае не снимается - SQLite -> XML, например для бакапа. правда, это другая тема... Опять же, зачем xml!???? (Или я просто его ненавижу). Есть стандартные свойства для бекапа;)). Да хоть напямую в sql файл! dervish00 1 Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 Здравствуйте MASMAT не знаю Вашего имени. Ещё подскажите пожалуйста где в этом коде видно что из удалённого сервера скачивается файл базы? // Извлекаем новый файл базы zip := TZipFile.Create; zip.Open(JStringToString(PackageName), TZipMode.zmRead); zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False); zip.Close; zip.free; Олег. Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 3 минуты назад, gelo1 сказал: Здравствуйте MASMAT не знаю Вашего имени. Ещё подскажите пожалуйста где в этом коде видно что из удалённого сервера скачивается файл базы? // Извлекаем новый файл базы zip := TZipFile.Create; zip.Open(JStringToString(PackageName), TZipMode.zmRead); zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False); zip.Close; zip.free; Олег. Я отвечу, нигде. Потому что речь идет об извлечении из архива zip Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 А как же сначала скачать на устройство а потом на устройстве обновить? Олег. Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 1 минуту назад, gelo1 сказал: А как же сначала скачать на устройство а потом на устройстве обновить? Олег. Читайте мой ответ выше (по закачке). Если вы закачиваете файл БД, то он меняет ВСЮ базу! И то что было у клиента затирается! Если вы обновляете через insert update через файл sql - то ничего не затирается! Олег Киреев 1 Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 Мне надо чтобы просто файл полностью заменился. С новыми данными. С Уважением. Олег. Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 Ну тогда действуйте, как написано выше. Цитата Ссылка на комментарий
Вопрос
#WAMACO
Подскажите как можно обновить целиком файл БД (SQLite) без закрытия приложения, например, по нажатию кнопки <Обновить БД>.
Интересуют особенности реализации для Android и iOS.
Принимаются любые идеи, реализации и т.д.
Delphi Seattle 10
Ссылка на комментарий
13 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.