unit ProcuraBanco;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons,DB;

type
  TF_ProcuraBanco = class(TForm)
    Panel3: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Panel2: TPanel;
    edtPath: TEdit;
    btnLocalizar: TBitBtn;
    Panel1: TPanel;
    Image1: TImage;
    Label4: TLabel;
    odBancoDados: TOpenDialog;
    procedure btnLocalizarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  F_ProcuraBanco: TF_ProcuraBanco;

implementation

uses DMConexao;

{$R *.dfm}

procedure TF_ProcuraBanco.btnLocalizarClick(Sender: TObject);
Var
  Diretorio : String; // Armazenará o caminho copleto do arquivo que contém o path para a conexão
  Arq : TextFile;     // com o banco de dados
begin
With(F_ProcuraBanco)Do
  Begin
     If(odBancoDados.Execute)Then
     Begin
        edtPath.Text := odBancoDados.FileName; // Receberá o caminho do novo arquivo (Banco de dados)
        Diretorio := ExtractFilePath(Application.ExeName)+'PathBanco.txt'; // Path do Arquivo
        AssignFile(Arq,Diretorio); // Associação do arquivo no diretório
        Rewrite(Arq); // Recria um novo arquivo, existindo ou não um igual a ele (sobscreve)
        Write(Arq,edtPath.text); // Escreve no arquivo o caminho do banco de dados
        CloseFile(Arq); // Fecha o arquivo
        Try
          If(DM.SQLConexao.Connected)Then // Se o componente tiver conectado ao banco de dados então o sistema desconectará,
             DM.SQLConexao.Connected := False;// pois, para que o conteúdo do seu parâmetro [database] seja alterado,
          DM.SQLConexao.Params.Values['database'] := edtPath.Text;// o componente tem q está desconetdados do banco de dados.
          DM.SQLConexao.Connected := True; // Alimenta o componente com o novo path (acima) e
          Close;// coneta novamente. Em seguida, a janela é fechada.
        Except
           On EDatabaseError Do //Caso ocorra qualquer tipo de erro durante a conexão,
           Begin // o arquivo que contém o path do banco de dados será excluído (caso exista) e o sistema criará outro automaticante,
              If(FileExists(ExtractFilePath(Application.ExeName)+'PathBanco.txt'))Then// quando for executado novamente.
                DeleteFile(ExtractFilePath(Application.ExeName)+'PathBanco.txt');
              MessageDlg('Não foi possível localizar o arquivo informado. Entre em contato com o administrador do sistema.',mtError,[mbOK],0);
              Application.Terminate; // Encerra a aplicação
           End;
        End;
     End;
  End;

end;

procedure TF_ProcuraBanco.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 Try
    DM.SqlConexao.Connected := True;
  Except
    MessageDlg('Banco de dados não localizado. O sistema será encerrado !',mtError,[mbOk],0);
    Application.Terminate;
  End;
end;


end.
