В данной статье Вы узнаете о самом простом способе подключиться к БД на примере MySQL, а также о том как создать подключение с обработкой ошибок (во второй части статьи).
Как быстро и просто подключиться к MySQL при помощи FireDAC?
FireDAC – очень мощная и большая библиотека, одних только видов подключений в ней три – постоянное (persistent), частное (private) и временное (temporary). В данной статье, не погружаясь в детали, посмотрим как можно подключиться к FireDAC самым простым способом.
Собственно, цель добиться вот такого простого результата простым, не синхрофазотронным путём.
Начали!
Создадим VCL приложение и разместим на форме следующие компоненты.
Файлы
В папку с EXE поместим файл библиотеки MySQL libmysql.dll
Ну, или если у Вас другая база, то соответственно другой файл. В моём случае, это база MySQL.
Код реализации кнопки Connect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
procedure TMainForm.bConnectClick(Sender: TObject); var oParams:TStrings; begin //Драйвер << Можно отдельно прописать, если он не в папке с EXE // FDPhysMySQLDriverLink1.VendorLib:='C:\MySQLDriver\libmysql.dll'; // либо положить его в c:\windows\SysWow64\ oParams := TStringList.Create; // oParams.Add('DriverID='+DriverID); oParams.Add('DataBase=test_db'); oParams.Add('Password=testpassword'); oParams.Add('User_Name=testuser'); oParams.Add('Port=3306'); oParams.Add('Server=localhost'); FDConnection1.Params.Assign(oParams); FDConnection1.DriverName:='MySQL'; // Connect и проверка! FDConnection1.Connected:=true; if FDConnection1.Connected then showmessage('Connected'); //Освобождаем переменную oParams.Free; end; |
В принципе это всё, что нужно было, чтобы подключиться самым простейшим способом. Далее, развивая эту идею, можно поместить данные компоненты на датамодуль и создавать его экземпляры в потоках – тем самым упрощая подключение.
Результат
Как быстро и просто подключиться, используя обработку ошибок?
Обработка ошибок очень важна, так как помогает быстро диагностировать проблему. Сама идея обработки ошибок это не панацея, а скорее попытка сократить труд программиста, но всё же. Обрабатывать ошибки можно через значения функций, как это часто делается в WinAPI либо через возбуждение исключений и блоки try except end и try finally end. Профессиональные программисты без обработки ошибок как правило не пишут. Я сам не так давно стал интересоваться этой темой, поэтому мой вариант, который я приведу здесь ниже не конечный, и если Вы увидите как можно его улучшить – сообщите мне.
Итак вложим блок try except в try finally, чтобы и гарантированно освободить ресурсы и обработать возможные исключения.
1 2 3 4 5 6 7 8 9 10 11 12 |
try try except; end; finally end; |
Вот какой вариант получился у меня. Привожу модуль подключения полностью. Единственная разница, так как часть про обработку ошибок я дописал позже, то FDConnection1 у меня стало называться FDConnection и также FDPhysMySQLDriverLink. Вся магия происходит в функции Connect.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
unit dmDBConnection; interface uses System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait, FireDAC.Phys.MySQLDef, FireDAC.Phys.MySQL, Data.DB, FireDAC.Comp.Client,vcl.Dialogs; type TDBConnection = class(TDataModule) FDConnection: TFDConnection; FDPhysMySQLDriverLink: TFDPhysMySQLDriverLink; public function MyConnect:boolean; end; var DBConnection: TDBConnection; implementation {%CLASSGROUP 'Vcl.Controls.TControl'} {$R *.dfm} { TDBConnection } function TDBConnection.MyConnect: boolean; var oParams: TStrings; ErrorInfo: string; begin // Драйвер << Можно отдельно прописать, если он не в папке с EXE // FDPhysMySQLDriverLink1.VendorLib:='C:\MySQLDriver\libmysql.dll'; // либо положить его в c:\windows\SysWow64\ oParams:=TStringList.Create; try oParams.Add('DataBase=test_db'); oParams.Add('Password=masterkey1'); oParams.Add('User_Name=root'); oParams.Add('Port=3306'); oParams.Add('Server=localhost'); oParams.Add('CharacterSet=utf8'); FDConnection.Params.Assign(oParams); FDConnection.DriverName:='MySQL'; //Пробуем подключиться try FDConnection.Connected:=true; if FDConnection.Connected then begin Result:=true; Showmessage('Connected'); end else Result:=false; except on E: EFDDBEngineException do case E.Kind of ekUserPwdInvalid: // user name or password are incorrect raise Exception.Create('DBConnection Error. User name or password are incorrect'+ #13#10+#13#10+E.ClassName+' поднята ошибка, с сообщением : '+E.Message); ekUserPwdExpired: raise Exception.Create('DBConnection Error. User password is expired' +#13#10+#13#10+E.ClassName+' поднята ошибка, с сообщением : '+E.Message); ekServerGone: raise Exception.Create('DBConnection Error. DBMS is not accessible due to some reason' +#13#10+#13#10+E.ClassName+' поднята ошибка, с сообщением : '+E.Message); else // other issues raise Exception.Create('DBConnection Error. UnknownMistake' +#13#10+#13#10+E.ClassName+' поднята ошибка, с сообщением : '+E.Message); end; on E : Exception do raise Exception.Create( E.ClassName+' поднята ошибка, с сообщением : '+#13#10+#13#10+E.Message ); end; finally FreeAndNil(oParams); end; end; end. |