{=======================================}
{             RSC SISTEMAS              }
{        SOLUÇÕES TECNOLÓGICAS          }
{         rscsistemas.com.br            }
{          +55 92 4141-2737             }
{      contato@rscsistemas.com.br       }
{                                       }
{ Desenvolvidor por:                    }
{   Roniery Santos Cardoso              }
{     ronierys2@hotmail.com             }
{     +55 92 984391279                  }
{                                       }
{                                       }
{ Versão Original RSC SISTEMAS          }
{ Versão: 3.0.0                         }
{                                       }
{                                       }
{=======================================}

unit uConexao;

interface

  uses
    System.IniFiles
    ,System.SysUtils
    ,System.UITypes

    ,Vcl.Forms

    ,Vcl.Dialogs

    ,uVariaveisGlobais
    ,uConstGlobais;



  function GetIniExiste: Boolean;


  procedure GetLerIniDB;
  procedure SetGravarIniDB;

  procedure SetConfigConexaoDB;
  function SetActiveConexaoDB: Boolean;
  function GetConexaoDBConnected: Boolean;

  function ValidaDadosConDB(const DbPath, DbNome, DbDriveId, DbUser, DbSenha, DbHost: string; DbPorta: Integer): Boolean;




implementation

  uses
    uDmMain;


function GetIniExiste: Boolean;
begin
  Result  :=  FileExists(ExtractFilePath(Application.ExeName) + NomeArqIni)
end;


procedure GetLerIniDB;
var
  ArquivoINI: TIniFile;
begin
  ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)  + NomeArqIni);
  //ArquivoINI := TIniFile.Create('..\'+NomeArqIni);
  try
    try
      //sDBPath_     :=  ArquivoINI.ReadString(SessConexao, DBPath, EmptyStr);
      sDBName_     :=  ArquivoINI.ReadString(SessConexao, DBName, EmptyStr);
      sDBDriverID_ :=  ArquivoINI.ReadString(SessConexao, DriverID, EmptyStr);
      sDBUser_     :=  ArquivoINI.ReadString(SessConexao, DBUser, EmptyStr);
      sDBPssword_  :=  ArquivoINI.ReadString(SessConexao, DBPssword, EmptyStr);
      sDBHost_     :=  ArquivoINI.ReadString(SessConexao, DBHost, EmptyStr);
      iDBPort_     :=  ArquivoINI.ReadInteger(SessConexao, DBPort, 0);

//      ShowMessageRsc('Configurações carregadas com sucesso!');
    except on E: Exception do
      begin
        MessageDlg('Erro ao carregar configurações de conexão do arquivo .ini', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
      end;
    end;

  finally
    ArquivoINI.Free;
  end;
end;

procedure SetGravarIniDB;
var
  ArquivoINI: TIniFile;
begin
  ArquivoINI  :=  nil;
  try
    try
      ArquivoINI := TIniFile.Create(ExtractFilePath(Application.ExeName)  + NomeArqIni);

      //ArquivoINI.WriteString(SessConexao, DBPath, sDBPath_);
      ArquivoINI.WriteString(SessConexao, DBName, sDBName_);
      ArquivoINI.WriteString(SessConexao, DriverID, sDBDriverID_);
      ArquivoINI.WriteString(SessConexao, DBUser, sDBUser_);
      ArquivoINI.WriteString(SessConexao, DBPssword, sDBPssword_);
      ArquivoINI.WriteString(SessConexao, DBHost, sDBHost_);
      ArquivoINI.WriteInteger(SessConexao, DBPort, iDBPort_);

//      ShowMessageRsc('Configurações salvas com sucesso!');
    except on E: Exception do
      begin
        MessageDlg('Erro ao salvar configurações de conexão no arquivo .ini', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
      end;
    end;
  finally
    ArquivoINI.Free;
  end;

end;



procedure SetConfigConexaoDB;
begin
  with  DmMain.FDCon do
    begin
      Close;
      Params.Clear;
      LoginPrompt       :=  False;
      DriverName        :=  sDBDriverID_;
      Params.DriverID   :=  sDBDriverID_;
      //Params.Database   :=  sDBPath_  + sDBName_;
      Params.Database   :=  sDBName_;
      Params.UserName   :=  sDBUser_;
      Params.Password   :=  sDBPssword_;
      Params.Add('CharacterSet=UTF8');//Params.Add('CharacterSet=UTF8'); ASCII     WIN1252
      Params.Add('OpenMode=omOpen');
      Params.Add('server='  + sDBHost_);
      Params.Add('Port=' + IntToStr(iDBPort_));
      Params.Add('Protocol=ipTCPIP');
      Params.Add('SQLDialect=3');
    end;
end;

function SetActiveConexaoDB: Boolean;
begin
  try
    DmMain.FDCon.Open;
    Result  :=  DmMain.FDCon.Connected;
  except on E: Exception do
    Result  :=  False;
  end;

end;

function GetConexaoDBConnected: Boolean;
begin
  Result  :=  DmMain.FDCon.Connected;
end;

function ValidaDadosConDB(const DbPath, DbNome, DbDriveId,
  DbUser, DbSenha, DbHost: string; DbPorta: Integer): Boolean;
var
  Erros: String;
begin
  Erros :=  EmptyStr;

//  if not DirectoryExists(DbPath) then
//    begin
//      Erros :=  Erros + 'Diretório não encontrado!' + #13;
//    end;
//
//  if (Length(DbNome)  <= 4) or  (DbNome = EmptyStr) then
//    begin
//      Erros :=  Erros + 'Informe um nome válido!' + #13;
//    end;
//
//  if (Length(DbDriveId)  > 2) or  (DbDriveId = EmptyStr) then
//    begin
//      Erros :=  Erros + 'Informe um driver válido!' + #13;
//    end;
//
  if DbUser = EmptyStr then
    begin
      Erros :=  Erros + 'Informe o usuário!' + #13;
    end;

  if DbSenha = EmptyStr then
    begin
      Erros :=  Erros + 'Informe a senha!' + #13;
    end;

  if DbHost = EmptyStr then
    begin
      Erros :=  Erros + 'Informe o host do servidor!' + #13;
    end;

  if DbPorta <= 0 then
    begin
      Erros :=  Erros + 'Informe uma porta válida!' + #13;
    end;

  if Erros <> EmptyStr then
    begin
      Result  :=  False;
      MessageDlg('As seguintes violações foram encontradas:'  + #13 + Erros, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
    end
  else
    begin
      Result  :=  True;
    end;
end;

end.
