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

Пример создания Android приложения в RAD Studio 10 Seattle для работы c сервером MySQL. Работа с компонентами UniDAC от Devart.


Pax Beach

Вопрос

Столкнулся с проблемой взаимодействия своего приложения Android с сервером MySQL в локальной сети.

Задача простая: скачать на планшет таблицу с данными с сервера MYSQL в локальной сети, выполнить на планшете действия с данными, выгрузить обратно на MySQL уже в другую таблицу результат действий.

Начал разбираться, пересмотрел и перечитал множество примеров других разработчиков. Оказалось, что в RAD Studio 10 Seattle нет компонентов, способных заставить работать Android устройство напрямую с сервером MySQL.

Конечно есть FireDAC, dbExpress.

По факту, хоть разработчики dbExpress и заявляют, что компонент TSQLConnection работает с Android platform, но при попытке открыть соединение с MySQL сервером на Android устройстве сообщает об ошибке. На Windows компонент отрабатывает соединение нормально.

 

post-1437-0-08690500-1451243114.png

 

Разработчики FireDAC честно заявили, что их соединение с MySQL на Android работать не будет.

post-1437-0-59239200-1451243114.png

 

 

Какие есть выходы:

1.    Создать DataSnap сервер, который будет установлен на сервере и взаимодействовать с Android клиентом и сервером MySQL. DataSnap будет являться прослойкой между Android и MySQL, через него можно осуществлять обмен данными, обернутыми в JSON.

Для меня этот вариант не подходит, потому что по различным причинам устанавливать на сервер (или даже рабочую станцию) дополнительный сервер приложений не представляется возможным.

2.    Использовать дополнительные компоненты, позволяющие работать с MySQL из-под Android и iOS.

 

Поиск нужных компонентов для RAD Studio показал, что все они платные. И уж если бесплатных не найти, покупать нужно хороший продукт, которые поддерживает как минимум MySQL, SQLite, SQLServer.

post-1437-0-10460300-1451243115.png

 

 

Не буду начинать холивар, скажу только, что для меня наиболее подходящим оказался компонент UniDAC от Харьковской компании Devart. Решающими факторами стали: удобнная политика лицензирования, приемлемая для задач цена, быстрая скорость ответа технической поддержки, конечно, поддержка всех распространенных серверов баз данных и нужных мне платформ, работа с большими объемами данных (более 100 тыс. записей), возможность 2 месяца тестировать компоненты, получить существенную скидку при покупке, рекомендации разработчиков с форума www.fire-monkey.ru .

 

post-1437-0-09485400-1451243424_thumb.pn

 

 

На сайте www.devart.com выбрал свою версию RAD Studio и скачал инсталяторы компонентов UniDAC и MyDAC. Установил и запустил RAD Studio. В главном меню RAD Studio появились соответствующие пункты меню, а в палитру компонентов добавились три закладки.

 

post-1437-0-57794800-1451243112.png

 

 

Вы самостоятельно может скачать и попробовать компоненты можно по этой ссылке https://www.devart.com/unidac/

 

Реализация кода:

                Итак, я собрал тестовый стенд. На котором разместил 3 соединения, 3 набора данных, три кнопки для соединения и разъединения с сервером MySQL, и две метки, в которые при успешном соединении записываю случайную запись «Название компании» из таблицы «Покупатели», в одну Ansi формат, в другую UTF8. В качестве демонстрационной базы данных использую Northwind, поставляемую с RAD Studio.

                Как видно на рисунке, тестировалась работа компонентов dbExpress, MyDAC, UniDAC.

 

post-1437-0-08856900-1451243113_thumb.pn

 

 

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

post-1437-0-61938100-1451243111_thumb.pn

 

 

                Я прилагаю пример приложения, который вы самостоятельно сможете запустить на своей RAD Studio.

                В результате, как и ожидалось, компоненты dbExpress не смогли соединиться с базой данных и вывалился с ошибкой “TDBXError: Unable to find procedure DBXLoader_GetDriver”. Которую было не просто отловить из-за отсутствия в компоненте обработчика Connection Timeout.

post-1437-0-07702600-1451243111_thumb.jp

 

 

                Компоненты MyDAC и UniDAC мгновенно соединялись с MySQL и считывали записи.

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

 

post-1437-0-59299300-1451243115_thumb.pn

MyDACvsDbExpressDemo.zip

Изменено пользователем Pax Beach
Ссылка на комментарий

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

  • 0

{$IFDEF offtop}по ряду причин стараюсь использовать именно прослойку между БД и приложением. Стойкое убеждение (не для холивара) - не должна СУБД быть открытой для доступа "снаружи", даже если это локалка. Сегодня так, а завтра потребуется доступ через интернет... Я считаю, что правильный админ никогда не откроет порт для доступа к БД наружу. В данном случае не понимаю, что мешает установить свой сервис не на машину с СУБД, а "рядом".{$ENDIF}

 

А так - да, рекламный пост :)

Pax Beach

  , все нормально, очень многие знают про UniDac :)

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

...что мешает установить свой сервис не на машину с СУБД, а "рядом"

порой так и делаю, ставлю второй СУБД MSSQL и по линку он общается с боевой БД, таким образом

боевой сервак не смотрит наружу...в кривых руках и без знаний грантов и с чем его едят...не трогайте святое - "клиент-сервер",

т.к. это и есть эталон - RAPID...

 

НО, второй сервак делаю крайне еще раз крайне редко, это когда заказчик мнит, что его базу данных уже завтра будут доттить

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

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

конечно, все просто, покупаем за 350 зеленых и подключаем, это же намного проще и дешевле чем замутить сервер-клиент или доступ к данным через web, для чего обычно MySQL и используют :)

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

Согласен с вами со всеми. Инф. безопасность — наше все.
Но есть своя специфика в задаче: нет Windows-машин рядом, в силу распределения полномочий разных служб компании нет доступного веб-сервера в сети, чтобы подвесить прослойку, есть MySQL сервер, который отдали для транзита данных и задача работать с ним напрямую.

Поставленная задача решается, как я описал в топике. Сам бы я проектировал обмен по-другому, но проектирование опишем в другой ветке форума =)

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

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

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

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

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

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

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

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

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

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