Перейти к содержанию
  • Регистрация
  • 0
Авторизация  
AndroidHalfNoob

При подключении к БД черный экран

Вопрос

Делаю все по инструкции

http://docwiki.embarcadero.com/RADStudio/XE7/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_(iOS_and_Android)

 

да диске F создал базу Baza.db через программу  SQLiteExpert

 

Добавил все нужные компоненты FDConnection,  FDQuery1, FDGUIxWaitCursor1, Grid1

 

В FDConnection1 прописал путь в базе на компьютере F:\Baza.db (рис 1)

 

Включил в проект саму базу (рис 2)

 

Задеплоил (рис 3) (надо ли нажимать деплой при добавлении файла и указания пути?синий круг)

 

Скинул на сам телефон файл базы на всякий случай.

 

Прописал событие FDConnection1BeforeConnect

 

 {$IF DEFINED(ANDROID)}
  FDConnection1.Params.Values['Database'] :=TPath.Combine(TPath.GetDocumentsPath, 'Baza.db');
  {$ENDIF}
 
Добавил 
uses
  System.IOUtils;
 
 и результат..... запускается приложение на телефоне и просто черный экран

post-1544-0-69699300-1442030013_thumb.jp

post-1544-0-51366500-1442030412_thumb.jp

post-1544-0-20257400-1442030416_thumb.jp

Изменено пользователем Andrey Efimov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

В папке <Ваше приложение>\Android\Debug\<название приложения>\bin найдите файл с расширением .apk. Это обычный архив. Откройте его с помощью WinZip или WinRar и поищите файл Baza.db.

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

 

Кстати, в корень диска F: положить БД - вообще плохая идея. Всякие UAC-и могут не дать доступ к файлу.

 

Поэтому просто под корнем Вашего приложения создаете папку (например, db) и помещаете базу туда. Должно заработать...

Изменено пользователем Alex Bozhko

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 

Кстати, в корень диска F: положить БД - вообще плохая идея. Всякие UAC-и могут не дать доступ к файлу.

 

Поэтому просто под корнем Вашего приложения создаете папку (например, db) и помещаете базу туда. Должно заработать...

Базу пробовал не только в корень класть. F:\Baza\Baza.db

результат тот же. сейчас еще гляну  то что вы рекомендовали. Посмотрим что там творится.

Изменено пользователем AndroidHalfNoob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

1. UAC

2. В Remote Path не указывается имя файла, только путь ".\assets\internal\" (имя файла указано в столбце Remote Name)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Действительно. прошерстил весь apk нет там базы.
в ручную ее можно добавить в архив? или именно деплоить надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

 

2. В Remote Path не указывается имя файла, только путь ".\assets\internal\" (имя файла указано в столбце Remote Name)

Тоже пробовал ".\assets\internal\" без ковычек. тоже не работает. в конце дописывал имя базы так как при поиске в нете встречал примеры где в удаленном пути указывалось имя базы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

хм.. странно, у меня в XE8 такой проблемы не было...

Но я обычно создаю папку "database" в папке с проектом, туда кладу файл "имя.db" и деплою его в папку ".\assets\internal\" (имя там точно писать не надо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

переместил базу в F:\a\bd\Baza.db

сделал Деплойт .\assets\internal\

все равно черный экран

В проекте добавилась папка F:\a\Android\Debug\aaa\assets\internal. там появилась baza.db

такая же структура и в АПК

но приложение по прежнему запускается с черным экраном.

Изменено пользователем AndroidHalfNoob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
ну вот, базу нашли...
Проблемы связанные с чёрным экраном могут быть вообще не связаны с базой.
FDConnection1.Connected = чему равно. Ставьте False, а в коде уже меняйте на True. Была такая проблема, тоже был чёрный экран при запуске приложения (только в xe7 вроде...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Добавьте на форму компонент FDSysSqliteDriver (под рукой нет дельфи, точно не помню как называется)

Это драйвер необходимый!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Добавьте на форму компонент FDSysSqliteDriver (под рукой нет дельфи, точно не помню как называется)

Это драйвер необходимый!

Точно, TFDPhysSQLiteDriverLink и сразу TFDGUIxWaitCursor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Andrey Efimov

 

в самом компоненте стоял ТРУ поставил False и в коде 

{$IF DEFINED(ANDROID)}
  DBPath := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'Baza.db');
{$ENDIF}
FDConnection1.ConnectionString:= 'DriverID=SQLite;Database='+DBPath+';StringFormat=Unicode;LockingMode=Normal';
FDConnection1.Connected:=True;
 
wamaco
нашел компонент
FDPhysSQLiteDriverLink
 
TFDGUIxWaitCursor уже стоит давно
Изменено пользователем AndroidHalfNoob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ОООО уже что то:) белый экран. но Grid пустой. программно активирую компоненты

FDConnection1.Connected:=True;
FDQuery1.Active:= True;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вот теперь колдуйте с путями к базе!

Коннектитесь не через коннекшстринг, а параметры прописывайте отдельно.

Database

LockingMode

И т.д.

Малейшая ошибочка в строке подключения через коннекшстринг и не будет эффекта!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Заработало!!!

FDConnection1.Connected:=True;
FDQuery1.Active:= True;
вынес отдельно событие формы OnActivate
До этого было в событии
FDConnection1BeforeConnect

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Вот что получилось. ну и настройка компонентов как указано в мануале
procedure TForm1.FDConnection1BeforeConnect(Sender: TObject);
var
   DBPath: string;
begin
 {$IF DEFINED(ANDROID)}
  DBPath := System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'Baza.db');
{$ENDIF}
FDConnection1.ConnectionString:= 'DriverID=SQLite;Database='+DBPath+';StringFormat=Unicode;LockingMode=Normal';


end;


procedure TForm1.FormActivate(Sender: TObject);
begin
FDConnection1.Connected:=True;
FDQuery1.Active:= True;
end;


end.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

С переходом на Х возникла точно такая же проблема.

База называлась ххх.db

У меня rooted устройство, поэтому зашел в директорию программы и увидел, что размер ххх.db -  0 байт.

Переименовал для андроида ххх.db  в xxx.sqlite, изменил connection и deployment settings, и все заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Авторизация  

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

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

×
×
  • Создать...