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

Подключение к БД Firebird из Android

Вопрос

Пытаюсь соединиться с удалённой БД Firebird из приложения под Android. Прошу помочь мне с одним неясным моментом. А именно: где, по какому пути в приложении должна быть размещена клиентская библиотека?  Что прописать в deployment? Что прописать в свойстве ClientLibrary компонента UniConnection? Почему UniConnection не видит библиотеку libfbclient.so.3.0.3 когда я размещаю её в папке приложения?

Пытаюсь указывать путь к файлу для приложения:

procedure TForm2.FormCreate(Sender: TObject);
var
begin
UniConnection1.SpecificOptions.Values['ClientLibrary']:= TPath.Combine(TPath.GetDocumentsPath, 'libfbclient.so.3.0.3');
end;

В итоге получаю:

Screenshot_20180820-132427.png

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


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

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

  • 1

Библиотеку нужно не забыть добавить в Deployment (release и debug).

У меня рядом с папкой проекта есть, т.е. на одном уровне, папка media, где лежат иконки, картинки, so-библиотеки и прочий мусор для деплоя.

В столбце Remote path указываем ".\assets\internal\db". Открываем "Project/Deployment", выбираем конфигурацию над таблицей,  жмякаем слева + и выбираем файл. Только обрати внимание ,что галочка слева должна быть отключена.

В проекте, в процедуре подключения к базе есть строка:

ClientLibrary := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'db' + PathDelim + 'libfbclient.so.3.0.2';

ну или "'libfbclient.so.2'", в зависимости от версии Firebird сервера: 2.5 или 3.0.

Не забудь добавить в USES модуль System.IOUtils.

 

Сразу напишу, что Андроид, как и Линукс туповаты, поэтому подключиться к хост-машине с Firebird по имени компьютера не получится.

По крайне мере у меня не получилось.

Поэтому в качестве адреса (параметр "Data Source") выступает IP адрес.

 

Собираем строку подключения:

 

    UniConnectionFB.ConnectString := 'Provider Name=InterBase;' +
                                     'Data Source=' +     server +';' +
                                     'Database=' +        Database + ';' +
                                     'Port=' +            port +';' +
                                     'User ID=' +         Username +';' +
                                     'Password=' +        Password + ';'+
                                     'Client Library=' +  ClientLibrary + ';' +
                                     'Character Set='+    CharacterSet + ';' +
                                     'Use Unicode=True;Login Prompt=False';

 

Screenshot_40.png

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

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


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

Получается, что ".\assets\internal" соответствует "TPath.GetDocumentsPath"

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 20.08.2018 в 21:06, drbond сказал:

А вот когда я поставил "галочки" слева, то всё заработало! Спасибо!

странно, у меня наоборот

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


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

Добрый день!

У меня вот не получается установить подключение к серверу Firebird через приложение Android.

Я разместил файл libfbclient.so.2.5.8 в папке assets\internal, в меню Project - Deployment указал путь сначала так:

image.thumb.png.848424ed726058dc833ef615c3ca6fa1.png

Потом сделал через кнопку image.png.a39efb033b982ece3911ccffd6d19ef3.png так:

image.thumb.png.d370f0717ae10737ac1d12f8cbb604f6.png

В самом проекте у меня есть DataModule, в котором есть IBConnection из библиотеки IBDac от Devart.

Путь к библиотеке я прописал в FormCreate этого модуля так:

image.png.a58730139ff667ba9710b6b235076d61.png

Когда пробую подключиться к моему удаленному серверу по IP адресу, то получаю ошибку:

Cannot load client library: /data/user/0/com.embarcadero.msccMobile/files/libfbclient.so.2.5.8.

 

Что я делаю не так? Как мне сделать, чтобы подключалось нормально?

Прошу помочь, только второй день работаю с этим направлением.

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


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

просто не нужно так делать

мобильное подключение не предполагает непрерывной связи с сервером, поэтому обычный клиент-сервер работает из рук вон плохо

мобильные приложения чаще всего используют HTTP для связи с промежуточным сервером, а уж он подключается к базе

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
21 минуту назад, krapotkin сказал:

просто не нужно так делать

мобильное подключение не предполагает непрерывной связи с сервером, поэтому обычный клиент-сервер работает из рук вон плохо

мобильные приложения чаще всего используют HTTP для связи с промежуточным сервером, а уж он подключается к базе

А можно пример как такое реализовать?

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


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

примеров полно, но нужно бы ТЗ иметь.

обращение из программы к серверу - через THttpClient

сервер - в зависимости от умений и знаний, на любом языке. традиционно у нас в ходу PHP

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, krapotkin сказал:

примеров полно, но нужно бы ТЗ иметь.

обращение из программы к серверу - через THttpClient

сервер - в зависимости от умений и знаний, на любом языке. традиционно у нас в ходу PHP

 

Да ну какое ТЗ, это мой личный проект)

А вот у меня сайт на Wordpress есть, пойдет в качестве сервера для работы мобильного приложения через http?

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


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

wordpress думаю не совсем та платформа))

тут на сайте полно примеров THttpClient

а по поводу сервера вам нужно читать что-то типа PHP REST API tutorial, например

https://klisl.com/php-api-rest.html

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
51 минуту назад, krapotkin сказал:

мобильное подключение не предполагает непрерывной связи с сервером, поэтому обычный клиент-сервер работает из рук вон плохо

Прямо совсем совсем все плохо работает? Зачем-то же тогда созданы эти компоненты.

Ведь через них возможно же сделать прямое подключение? Если да, то я и прошу сказать, что я не так донастроил. С тем, что это плохо работает возможно, я разберусь позже.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, msccenter сказал:

Добрый день!

У меня вот не получается установить подключение к серверу Firebird через приложение Android.

Я разместил файл libfbclient.so.2.5.8 в папке assets\internal, в меню Project - Deployment указал путь сначала так:

image.thumb.png.848424ed726058dc833ef615c3ca6fa1.png

Потом сделал через кнопку image.png.a39efb033b982ece3911ccffd6d19ef3.png так:

image.thumb.png.d370f0717ae10737ac1d12f8cbb604f6.png

В самом проекте у меня есть DataModule, в котором есть IBConnection из библиотеки IBDac от Devart.

Путь к библиотеке я прописал в FormCreate этого модуля так:

image.png.a58730139ff667ba9710b6b235076d61.png

Когда пробую подключиться к моему удаленному серверу по IP адресу, то получаю ошибку:

Cannot load client library: /data/user/0/com.embarcadero.msccMobile/files/libfbclient.so.2.5.8.

 

Что я делаю не так? Как мне сделать, чтобы подключалось нормально?

Прошу помочь, только второй день работаю с этим направлением.

Скорее всего, файл не деплоится.

Уберите библиотеку из \Android\Release\.... и поместите ее в другое место, к примеру, в корень проекта.

Заново добавьте в Deployment

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 минут назад, mazayhin сказал:

Скорее всего, файл не деплоится.

Уберите библиотеку из \Android\Release\.... и поместите ее в другое место, к примеру, в корень проекта.

Заново добавьте в Deployment

Вот это убрать?

image.thumb.png.4606a17d51d9514296f0325ea136e16a.png

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
30 минут назад, msccenter сказал:

Вот это убрать?

image.thumb.png.4606a17d51d9514296f0325ea136e16a.png

Да. Сам файл перенести в другое место, и затем добавить заново. Remote Path оставить как на скрине

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, mazayhin сказал:

Да. Сам файл перенести в другое место, и затем добавить заново. Remote Path оставить как на скрине

Можно ли его сюда положить?

image.png.4845d3b9a3352151cab57f8916204af8.png

И что считается "корнем" в контексте проекта приложения на Android?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
30 минут назад, msccenter сказал:

Можно ли его сюда положить?

image.png.4845d3b9a3352151cab57f8916204af8.png

И что считается "корнем" в контексте проекта приложения на Android?

К примеру, положи в C:\msccMobile\

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
11 минут назад, mazayhin сказал:

К примеру, положи в C:\msccMobile\

Положил сюда:

image.png.a2966d21939e4e736915a67341efc9c7.png

Затем выполнил Deploy через кнопочку и получил такой список:

image.thumb.png.759a2e3ee680e5b6fcba8dc8a350c5df.png

И получается та же ошибка в приложении про то, что не может загрузить библиотеку libfbclient.so.2.5.8.

В самом коде надо менять что-то?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
14 минут назад, msccenter сказал:

Положил сюда:

image.png.a2966d21939e4e736915a67341efc9c7.png

Затем выполнил Deploy через кнопочку и получил такой список:

image.thumb.png.759a2e3ee680e5b6fcba8dc8a350c5df.png

И получается та же ошибка в приложении про то, что не может загрузить библиотеку libfbclient.so.2.5.8.

В самом коде надо менять что-то?

А если до подключения проверить, существует ли файл на устройстве?
 

if TFile.Exists(TPath.Combine(TPath.GetDocumentsPath, 'libfbclient.so.2.5.8)) then
	showmessage('Exists')

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 минут назад, mazayhin сказал:

А если до подключения проверить, существует ли файл на устройстве?
 


if TFile.Exists(TPath.Combine(TPath.GetDocumentsPath, 'libfbclient.so.2.5.8)) then
	showmessage('Exists')

Да, такой код говорит о том, что файл существует на устройстве.

Вот код кнопки подключения к серверу:

  if TFile.Exists(TPath.Combine(TPath.GetDocumentsPath,'libfbclient.so.2.5.8')) then
  begin
    ShowMessage('существует');
    Mobile_DM.IBCConnection1.Connected:=False;
    Mobile_DM.IBCConnection1.Connected:=True;
    if Mobile_DM.IBCConnection1.Connected then
    begin
      ShowMessage('+');
    end
    else
    begin
      ShowMessage('-');
    end;
  end
  else
  begin
    ShowMessage('не существует');
  end;

Но, что интересное, то выдается сначала сообщения, что Cannot load client library: /data/user/0/com.embarcadero.msccMobile/files/libfbclient.so.2.5.8

А потом уже выдается мое проверочное сообщение с текстом "существует". Хотя код говорит, что сначала должно быть оно выходить...

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


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

а so бинари под правельный cpu?
so - это нативная либа собранная под конкретный cpu, а не байткод докомпилируемый на месте

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
13 минут назад, Slym сказал:

а so бинари под правельный cpu?
so - это нативная либа собранная под конкретный cpu, а не байткод докомпилируемый на месте

Ну, у меня ОС на компе, где проект мобильного приложения, является Windows 10. 

Удаленный сервер развернут на Windows Server 2012.

В этом дело? Если да, то я не нашел нужной версии для Windows библиотеки libfbclient...

Но сам-то код правильный же?

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


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

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

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

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

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

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

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

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

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


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

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

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