Перейти к содержанию
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
  • Модераторы
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
  • Модераторы
Только что, Kitty сказал:

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

:D

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

Нашлось и то, о чем Арефев говорил:

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Path_Variables_(FireDAC)

Только это не поможет. Помогает только перенос кода в конструктор формы...

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

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

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

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

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

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

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

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

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

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

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

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

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

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