Подключение к удаленному экземпляру Interbase на Android с помощью IBLite не работает

#delphi #interbase #delphi-10.4-sydney #iblite

#delphi #interbase #delphi-10.4-Сидней #iblite

Вопрос:

В Delphi 10.4.1 я пытаюсь создать приложение для Android, которое подключается к экземпляру Interbase, запущенному на моем ноутбуке (к которому я могу подключиться удаленно со своего рабочего стола). Я получаю исключение:

Проект Project6.apk вызвал исключение класса EIBNativeException с сообщением "[FireDAC] [Phys] [IBLite] Не удалось выполнить сетевой запрос на хост "192.168.1.58".
Не удалось найти хост-машину.
Неопределенный сервис gds_db / tcp.'.

Параметры подключения:

Database=192.168.1.58:C:Users PublicDocuments Embarcadero  Studio  21.0Samples  dataemployee.gdb
Имя_пользователя= sysdba
Пароль = мастер-ключ
DriverID=IB

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

Я видел, как это демонстрировалось в XE7 (https://youtu.be/XAZQfYzvxHc?t=1384 ), но не могу заставить его работать в 10.4.1.

Что я делаю не так?

Комментарии:

1. Я предполагаю, что это потому, что Android не понимает C: . Возможно, вы сможете заставить его работать с именем файла UNC.

Ответ №1:

Если InterBase на вашем компьютере с Windows работает на экземпляре по умолчанию ‘gds_db’, то, вероятно, он использует сокет TCP на порту 3050. Попробуйте изменить URL-адрес базы данных вашего приложения для Android на следующий, чтобы он включал номер целевого порта 3050. Я предполагаю, что он не может автоматически разрешить имя ‘gds_db’ на Android, поскольку имя службы TCP-сокета не определено на Android. На настольных платформах, таких как Windows, Linux, macOS, установщик InterBase обновляет файл системных служб, чтобы обеспечить перевод имени ‘gds_db’ в 3050. Простое указание номера порта сокета TCP — это надежный способ нацеливания на конечную точку без необходимости разрешения имен.

Database=192.168.1.58/3050:C:UsersPublicDocumentsEmbarcaderoStudio21.0Samplesdataemployee.gdb

Комментарии:

1. Я не думал, что это сработает, но это действительно так.