Advertisement
alexsystem

Classe de Conexão MSSQL

Aug 18th, 2017
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.58 KB | None | 0 0
  1. unit uConnection;
  2.  
  3. interface
  4.  
  5. uses
  6.   FireDAC.Stan.Intf, FireDAC.Stan.Option,
  7.   FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
  8.   FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,
  9.   Data.DB, FireDAC.Comp.Client, FMX.Dialogs, uXMLData.Model,
  10.   Xml.XMLIntf, Xml.XMLDoc,
  11.   FireDAC.VCLUI.Wait, FireDAC.Comp.UI, SysUtils, Encryp,
  12.   System.Classes, FireDAC.Comp.DataSet,
  13.   FireDAC.Phys.MSSQL, uFuncoes;
  14.  
  15. type
  16.   TConnection = class
  17.   strict private
  18.     class var FInstance: TConnection;
  19.     constructor CreatePrivate;
  20.   private
  21.     TiCrypto: TTicrypto;
  22.     FConexao: TFDConnection;
  23.     FDGWCur: TFDGUIxWaitCursor;
  24.     FDPMSSQLdriver: TFDPhysMSSQLDriverLink;
  25.     Trans: TFDTransaction;
  26.     protected
  27.     function Criptografar(AValue: String): String;
  28.     function Descriptografar(AValue: String): String;
  29.  
  30.   public
  31.     constructor Create;
  32.     class function GetInstance: TConnection;
  33.     property Conexao: TFDConnection read FConexao write FConexao;
  34.     function Execute(const ACmd: String; var Error: String): Boolean;
  35.     function ExecuteQuery(const ACmd: String): TFDQuery;
  36.     procedure BeginTrans;
  37.     procedure Rollback;
  38.     procedure Commit;
  39.     function Conectar(var Error: String): Boolean;
  40.     function LerTagXml(AValue: String): string;
  41.  
  42.   var
  43.     Con: TConnection;
  44.     ObjCrypto: TTiCrypto;
  45.  
  46.   end;
  47.  
  48. implementation
  49.  
  50. { TConnection }
  51.  
  52. procedure TConnection.BeginTrans;
  53. begin
  54.   FConexao.StartTransaction;
  55. end;
  56.  
  57. procedure TConnection.Commit;
  58. begin
  59.   FConexao.Commit;
  60. end;
  61.  
  62. function TConnection.Conectar(var Error: String): Boolean;
  63. begin
  64.   Result := False;
  65.   FConexao.Connected := False;
  66.   try
  67.     FConexao.Connected := True;
  68.     Result := FConexao.Connected;
  69.   except
  70.     on E:Exception do
  71.         begin
  72.     Result := False;
  73.      Error := 'Houve um problema durante a conexão ao MSSQL: ' + E.Message + sLineBreak
  74.         + 'Ajuste a conexão na próxima tela...' ; //Tratar um redirecionamento para o form de ajuste
  75.         end;
  76.   end;
  77. end;
  78.  
  79. constructor TConnection.Create;
  80. begin
  81.   raise Exception.Create('Object Singleton');
  82. end;
  83.  
  84. constructor TConnection.CreatePrivate;
  85. var
  86.   Error: String;
  87.   Teste: String;
  88. begin
  89.   inherited Create;
  90.     FConexao := TFDConnection.Create(nil);
  91.     FConexao.Params.Clear;
  92.     Trans := TFDTransaction.Create(nil);
  93.     FConexao.DriverName := 'MSSQL';
  94.     FConexao.Transaction := Trans;
  95.     FDPMSSQLdriver := TFDPhysMSSQLDriverLink.Create(nil);
  96.     FConexao.Params.BeginUpdate;
  97.     FConexao.Params.Add('DriverID=' + Trim('MSSQL'));
  98.     FConexao.Params.Add('Server=' + Trim(LerTagXml('Servidor')+ '\' + Trim(LerTagXml('Instancia'))));
  99.     FConexao.Params.Add('Database=' + Trim(LerTagXml('Base')));
  100.     FConexao.Params.Add('User_name=' + Trim(LerTagXml('Usuario')));
  101.     FConexao.Params.Add('Password=' + Trim(LerTagXml('Senha')));
  102.     FConexao.Params.Add('Port='+ Trim(LerTagXml('Porta')));
  103.     FConexao.Params.Add('ApplicationName=Architect');
  104.     FConexao.Params.Add('Workstation='+ Trim(LerTagXml('Servidor')));
  105.     FConexao.Params.Add('LoginTimeout=10');
  106.     FConexao.Params.Add('MARS=Yes');
  107.     FConexao.Params.Add('Encrypt=No');
  108.     FConexao.Params.Add('MetaDefSchema=dbo');
  109.     FConexao.Params.Add('MetaDefCatalog=' + Trim(LerTagXml('Base')));
  110.     FConexao.Params.EndUpdate;
  111.     if not (Conectar(Error)) then
  112.       raise Exception.Create(Error);
  113. end;
  114.  
  115. function TConnection.Criptografar(AValue: String): String;
  116. var
  117.   TextoCifrado: String;
  118. begin
  119.   ObjCrypto := TTiCrypto.Create(nil);
  120.   ObjCrypto.Chave := 'suachavesecreta';
  121.   Result := '';
  122.   try
  123.     begin
  124.       ObjCrypto.Entrada := AValue;
  125.       ObjCrypto.Acao := acCifrar;
  126.       ObjCrypto.Execute;
  127.       TextoCifrado := (ObjCrypto.Saida);
  128.       Result := TextoCifrado;
  129.     end;
  130.   finally
  131.     FreeAndNil(ObjCrypto);
  132.   end;
  133.  
  134. end;
  135.  
  136. function TConnection.Descriptografar(AValue: String): String;
  137. var
  138.   TextoDecifrado: String;
  139. begin
  140.   ObjCrypto := TTiCrypto.Create(nil);
  141.   ObjCrypto.Chave := 'suachavesecreta';
  142.   Result := '';
  143.   try
  144.     begin
  145.       ObjCrypto.Entrada := AValue;
  146.       ObjCrypto.Acao := acDecifrar;
  147.       ObjCrypto.Execute;
  148.       TextoDecifrado := (ObjCrypto.Saida);
  149.       Result := TextoDecifrado;
  150.     end;
  151.   finally
  152.     FreeAndNil(ObjCrypto);
  153.   end;
  154.  
  155. end;
  156.  
  157. function TConnection.Execute(const ACmd: String; var Error: String): Boolean;
  158. begin
  159.   Result := True;
  160.   try
  161.     FConexao.ExecSQL(ACmd);
  162.   except
  163.     on E: Exception do
  164.     begin
  165.       Error := E.Message;
  166.       Result := False;
  167.     end;
  168.   end;
  169. end;
  170.  
  171. {Caso precise pode-se executar uma query diretamente pela classe TConnection}
  172. function TConnection.ExecuteQuery(const ACmd: String): TFDQuery;
  173. begin
  174.   Result := TFDQuery.Create(nil);
  175.   try
  176.     Result.Connection := FInstance.Conexao;
  177.       Result.ExecSQL(ACmd);
  178.   except
  179.     Result := nil;
  180.   end;
  181. end;
  182.  
  183. class function TConnection.GetInstance: TConnection;
  184. begin
  185.   if not Assigned(FInstance) then
  186.     begin
  187.     FInstance := TConnection.CreatePrivate;
  188.     end;
  189.     Result := FInstance;
  190. end;
  191.  
  192. function TConnection.LerTagXml(AValue: String): string;
  193. var
  194.   vXmlDoc: IXMLDocument;
  195.   vNoXML:  IXMLNode;
  196.   Resultado: String;
  197. begin
  198.   vXmlDoc := TXMLDocument.Create(nil);
  199.   try
  200.     vXmlDoc.LoadFromFile('C:\meusistema\conexao.xml');
  201.     vXmlDoc.Active := True;
  202.     vNoXML := vXmlDoc.DocumentElement.ChildNodes.FindNode('Parametro');
  203.     Resultado := Descriptografar(vNoXML.ChildNodes[(AValue)].Text);// Descriptografar(ObjXMLNode.ChildNodes[(AValue)].Text);
  204.     Result := Resultado;
  205.   finally
  206.     vXmlDoc := nil;
  207.   end;
  208. end;
  209.  
  210. procedure TConnection.Rollback;
  211. begin
  212.   FConexao.Rollback;
  213. end;
  214.  
  215. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement