Подключение к MySQL с помощью FireDAC

Подключение к MySQL с помощью FireDAC

Подключение к MySQL с помощью FireDAC вроде бы простой вопрос, но с подводными камнями...

Что такое FireDac

Это современная технология доступа к данным из приложений Delphi. Если говорить о библиотеке VCL, то кроме FireDac разработчику доступны еще несколько технологий, среди которых моя любимая библиотека ADO от Microsoft. Подключение с помощью этой библиотеки я описывал в статье.

Вообще FireDAC пришел на смену устаревшей BDE (BDE, кстати и сейчас можно использовать, если ее драйвер позволит взаимодействовать с современной версией той или иной СУБД). Просто, поскольку механизм доступа к данным считается устаревшим, то и драйверы под BDE к различным СУБД уже давно не обновляются. Но можно использовать старый и добрый ODBC.

Если же говорить о библиотеке FMX, то FireDac — это единственная доступная библиотека для доступа к базам данных.

Подключение к MySQL с помощью ODBC

Библиотека FireDAC очень мощная, развитая. И даже пишут, что по возможностям она превосходит ADO. Но вот по подключению не все так просто. Когда я начал пробовать подключаться к MySQL (а я использую версию 8.0.28), то столкнулся с кучей проблем. Один из способов подключения требует установить на форму компонент TFDPhysMySQLDriverLink и указать для него в свойстве VendorLib путь к файлу libmysql.dll, который может лежать чуть ли не в разных местах. Я привык размещать такие вещи в каталоге с приложением, но не в этом суть. Суть в том, что нужно соблюсти разрядность и бла-бла-бла. Не буду это описывать, так как этому посвящено много блогов других авторов. Собственно проблема в том оказалась, что подключаться все это дело не хочет к MySQL версии 8.0.28. Просят понизить версию.

А на сайте Oracle доступна уже 8.0.41. Получается, что библиотека libmysql.dll не обновлена для работы с более новыми версиями. Даже предложили поменять эту библиотеку на libmariadb.dll.

Мне кажется, что это все не серьезно. Если технология зрелая, то она должна работать как часы, а не пользоваться костылями. И в общем я решил подключиться с помощью старого верного драйвера ODBC и все получилось здорово. И вот хочу написать несколько строк для тех, у кого возникнут проблемы при подключении к новым версиям СУБД. вы всегда можете использовать ODBC.

Итак, кидаем на форму (я буду рассказывать на примере FMX, но в VCL это работает в точности также как часы) TFDConnection. На форму конечно — это для простоты. В идеале следует создать отдельный модуль для не визуальных компонентов. Это грамотный подход современного программирования. Просто это удобно для масштабирования приложений. Ну да ладно — это отступление. Итак, разместили. Рассмотрим два варианта подключения: во время разработки и во время выполнения:

Подключение во время разработки

Щелкните двойным щелчком по FDConnection1, откроется окно «FireDAC Connection Editor». Из списка Driver ID выберите ODBC и задайте параметры подключения. У меня следующие:

FireDac Connection Editor
FireDac Connection Editor

ODBCDriver следует выбрать как на картинке, если вы подключаетесь к MySQL. Ну или любой другой, если вы подключаетесь к другой СУБД. Попробуйте нажать Test. Появится небольшое окошко FireDAC Login. Нажмите в нем ok.

Если вы увидите надпись Connection established successfully, значит подключение состоялось. Ура. Теперь вы можете добавлять в приложение разные датасеты, эдиты, гриды и прочие элементы, делать выборку из базы данных и видеть результат своей деятельности на форме в режиме проектирования.

Подключение во время выполнения

Предыдущий способ нам подходит во время разработки, чтобы были сразу видны данные. Но для работы программы во время выполнения нам нужен программный метод подключения, потому что у нас много переменной информации, такой как «Имя пользователя», «Пароль», «Адрес сервера». Мы бы могли все это сразу указать в окне «FireDAC Connection Editor», но как в понимаете, это не гибкий подход. Итак:

Способ 1

procedure TfrmMDI.FormCreate(Sender: TObject);
var
    iniF: TIniFile;
    sServer, sPort, sUser, sPassword: string;
begin
    sTekPapka:=getcurrentdir;
    //Считываем данные из файла Конфиг. Для этого создаем объект файла Конфиг
    iniF:=TiniFile.Create(sTekPapka+'\Config.ini');
    //Считываем содержимое файла Конфиг и заносим значения в форму
    sServer:=iniF.ReadString('DB', 'Server','');
    sPort:=iniF.ReadString('DB', 'Port','');
    sUser:=iniF.ReadString('DB', 'User','');
    sPassword:=iniF.ReadString('DB', 'Password','');
    iniF.free;
    FDConnection1.Close;//Закрываем соединение с БД
    with FDConnection1.Params do
    begin
         Clear;
         Add('DriverID=' + 'ODBC');
         Add('ODBCDriver=' + 'MySQL ODBC 8.0 Unicode Driver');
         Add('Host=' + sServer);
         Add('Port=' + sPort);
         Add('User_Name=' + sUser);
         Add('Password=' + sPassword);
         Add('Database=' + 'signs');
    end;
    try
       FDConnection1.Connected:=true;// Открываем соединение
    except
       Application.CreateForm(TfrmConnection,frmConnection);
       lfrmCreate:=true;
       frmConnection.Show;
    end;
end;

Способ 2

При втором способе все тоже самое, только меняется способ присвоения параметров соединения, поэтому всю процедуру повторно не размещаю, а только кусочек.

with FDConnection1.Params do
begin
   Clear;
   Values['DriverID']:='ODBC';
   Values['ODBCDriver']:='MySQL ODBC 8.0 Unicode Driver';
   Values['Host']:=sServer;
   Values['Port']:=sPort;
   Values['User_Name']:=sUser;
   Values['Password']:=sPassword;
   Values['Database']:='signs';
end;

Ну вот и все! У кого возникнут проблемы с подключением через драйвер MySQL, можете использовать этот метод — через ODBC. Кстати, через него можно подключаться и в Linux. Просто в этой операционной системе свой драйвер ODBC.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: