unit uDBConnection;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, 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;

type
  TDBConnection = class(TFrame)
    FDConnection: TFDConnection;
    FDPhysMySQLDriverLink: TFDPhysMySQLDriverLink;
  private

    { Private declarations }


    procedure AddConnectionDefinition();

  public
    { Public declarations }

     function Connect: boolean;

  end;

implementation

{$R *.dfm}


procedure TDBConnection.AddConnectionDefinition;

var myDef:IFDStanConnectionDef; i:integer;

begin

//Проверяем нет ли уже ConnDef с таким же именем
   for i := 0 to FDManager.ConnectionDefs.Count-1 do
   begin
     if FDManager.ConnectionDefs[i].Name='MySQL_PS_Gringo_def'
     then exit;
   end;


   myDef:=FDManager.ConnectionDefs.AddConnectionDef;
   myDef.Name:='MySQL_PS_Gringo_def';
   myDef.Params.DriverID:='MySQL';
   myDef.Params.Database:='coffeetest_db';
   myDef.Params.UserName:='root';
   myDef.Params.Password:='masterkey';
   myDef.Params.Add('Port=3306');
   myDef.Params.Add('Server=localhost');
   myDef.Params.Add('CharacterSet=utf8');


   myDef.Apply;

end;

function TDBConnection.Connect: boolean;

var oParams:TStrings;  ErrorInfo:string;

begin

  //Драйвер << Можно отдельно прописать, если он не в папке с EXE
//  FDPhysMySQLDriverLink1.VendorLib:='C:\MySQLDriver\libmysql.dll';
// либо положить его в c:\windows\SysWow64\

 oParams:=TStringList.Create;


 try


  oParams.Add('DataBase=coffeetest_db');
  oParams.Add('Password=masterkey');
  oParams.Add('User_Name=root');
  oParams.Add('Port=3306');
  oParams.Add('Server=localhost');
  oParams.Add('CharacterSet=utf8');



  FDConnection.Params.Assign(oParams);

  FDConnection.DriverName:='MySQL';



 // AddConnectionDefinition;


   //Пробуем подключиться

   try

   //FDConnection.ConnectionDefName:='MySQL_PS_Gringo_def';
   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.
