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

[Андроид] доступ к базе данных


Kitty

Вопрос

Опубликовано

Когда развертывала приложение на телефоне с использованием базы sqllite, получила ошибку, что невозможно открыть файл базы данных. Тогда добавила код ниже, и все на телефоне заработало как надо:

void __fastcall TForm1::FDConnection1BeforeConnect(TObject *Sender)
{
 #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
 FDConnection1->Params->Values["Database"] =
 System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath
 (), "mikros.s3db");
 #endif
}

Потом вместо телефона подсоединила планшет и снова начала получать эту же ошибку. Почему на телефоне работает, а на планшете путь к базе не отрабатывается?

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

  • 0
Опубликовано (изменено)

А вы точно складываете файл базы данных в нужное место? Это как вариант ошибки. 

Второй вариант, после компиляции, посмотрите в устройстве, где лежит ваш файл БД. 

Изменено пользователем Vitaldj
  • 0
Опубликовано

У меня в деплойменте база по пути .\assets\internal\ и на телефоне все без проблем работает...

Честно говоря на телефоне и на планшете я не могу найти эту папку internal. Вроде все просмотрела...

  • 0
  • Модераторы
Опубликовано
9 часов назад, Kitty сказал:

У меня в деплойменте база по пути .\assets\internal\ и на телефоне все без проблем работает...

Честно говоря на телефоне и на планшете я не могу найти эту папку internal. Вроде все просмотрела...

этой папки нету, это символическая ссылка.

находится она /data/data/<имя пакета>/files для просмотра нужен root

  • 0
Опубликовано

Спасибо.

Нашлись такие пути:

На телефоне: SD-карта\Android\data\имя моего пакета\files и в папке пусто

На планшете (через ES проводник): Домашняя папка\Android\data\имя моего пакета\files и в папке пусто

Ни там ни там я не нашла свою базу mikros.s3db  Не понимаю. :(

На телефоне приложение работает, на планшете не видит файл базы данных.

Приложение устанавливала на телефон и планшет из студии через шнурок.

 

  • 0
  • Модераторы
Опубликовано
1 минуту назад, Kitty сказал:

Спасибо.

Нашлись такие пути:

На телефоне: SD-карта\Android\data\имя моего пакета\files и в папке пусто

На планшете (через ES проводник): Домашняя папка\Android\data\имя моего пакета\files и в папке пусто

Ни там ни там я не нашла свою базу mikros.s3db  Не понимаю. :(

На телефоне приложение работает, на планшете не видит файл базы данных.

Приложение устанавливала на телефон и планшет из студии через шнурок.

 

не там смотрите, не зря нужен root:)

нужно не на карте смотреть, а в корне файловой системы /

  • 0
Опубликовано

Планшет рутирован там есть такой путь: Устройство\data\data и тут совсем пусто.

Видимо на планшет мое приложение не корректно установилось?

  • 0
  • Модераторы
Опубликовано
4 минуты назад, Kitty сказал:

Планшет рутирован там есть такой путь: Устройство\data\data и тут совсем пусто.

Видимо на планшет мое приложение не корректно установилось?

странно, а другие файлы из деплоймента правильно распологаются?

  • 0
Опубликовано
Только что, ZuBy сказал:

странно, а другие файлы из деплоймента правильно распологаются?

Согласен. Проверяйте деплоймент. У меня как то такое же было на iOs. Мучился, мучился, удалил все из диплаймента и заново сделал. Обязательно учтите, для для дебага и релиза разные диплойменты.

  • 0
Опубликовано (изменено)

Тщательно все проверила, файл базы данных на рутированом планшете находиться там где и надо /data/data/<имя пакета>/files  (просто в ES проводнике надо было дополнительно включить просмотр рута). Однако при старте FireDAC пишет, что не может открыть этот файл базы данных.

Для тестирования установила свое приложение на два не рутированных разных телефона - все нормально, никаких проблем, а вот с планшетом не хочет. :)

Куда копать?

 

Изменено пользователем Kitty
  • 0
Опубликовано

Попробовла разные планшеты. Везде получаю:

[FireDAC][Phys][SQLite]ERROR: unable to open database file

При установке на телефоны все работает как часы.

Кому нибудь удалось на планшете достучаться до FireDAC SQLite базе данных?

  • 0
Опубликовано (изменено)
23 минуты назад, Kitty сказал:

Попробовла разные планшеты. Везде получаю:

[FireDAC][Phys][SQLite]ERROR: unable to open database file

При установке на телефоны все работает как часы.

Кому нибудь удалось на планшете достучаться до FireDAC SQLite базе данных?

Что то здесь не то! К счастью сожалению не имею девайнас на андроид, но проверить бы хотелось. А в дебаге трассировали? Проверяли на наличие файла базы данных? Ну типа 

if FileExists()then

И как прописываете путь?

Изменено пользователем Vitaldj
  • 0
Опубликовано
void __fastcall TForm1::Beacon1BeaconProximity(TObject * const Sender, IBeacon * const ABeacon,
		  TBeaconProximity Proximity)
{
   //тестовій фрагмент кода для планшета
   String path = FDConnection1->Params->Values["Database"];
   ShowMessage(path);
   return;
//ниже идет код записи в базу даннных и ошибка

Вот этот фрагмент кода показал, что база на планшете тут:

C:\Users\Lena\Documents\Embarcadero\Studio\Projects\mikros\mikros.s3db (бред)

Это, то что написано в соединении конектор едитора. Следовательно, если я правильно понимаю, на планшетах не отрабатывает этот код:

void __fastcall TForm1::FDConnection1BeforeConnect(TObject *Sender)
{
 #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
 FDConnection1->Params->Values["Database"] =
 System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath
 (), "mikros.s3db");
 #endif
}

А на телефонах все гуд...

 

  • 0
Опубликовано (изменено)

После дублирования кода в конструктор формы:

__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
#if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(__ANDROID__)

	FDConnection1->Params->Values["Database"] =
	System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "mikros.s3db");
//***

Вижу правильный путь.Спасибо за подсказку! Экспериментирую дальше. :)

Изменено пользователем Kitty
  • 0
Опубликовано

Итак все работает теперь и на планшете. Какой вывод можно сделать с профессором Преображенским из Собачьего сердца?

1. Не читаете газет и документацию эмбаркадеро.

2. Используйте вместо TForm1::FDConnection1BeforeConnect конструктор TForm1::TForm1

3. Спасибо ZuBy за наводку. Самой воображалки не хватило. :)

  • 0
Опубликовано

Создать FireDAC Аревьев написал:

Я не знаю, почему пишут так:

void __fastcall TForm1::FDConnection1BeforeConnect(TObject *Sender)
{
 #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
	FDConnection1->Params->Values["Database"] =
	System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "mikros.s3db");
 #endif
}

когда проще писать эдак:

void __fastcall TForm1::FDConnection1BeforeConnect(TObject *Sender)
{
 #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
	FDConnection1->Params->Values["Database"] = "$(DOC)/mikros.s3db";
 #endif
}

Даже не хочу проверять его теории, о которых не слова не сказано в документации!!!

  • 0
Опубликовано
4 часа назад, Kitty сказал:

ZuBy решил все мои вопросы с планшетами. А справочная система эмбаркадеро г...но. Полное.

Не любите кошек? Может просто вы не умеете их готовить???

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

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

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