Fórum SQLConnection run time #417659

29/05/2012

0

Boa noite,

Utilizo sqlconnection para fazer conexao como banco de dados firebird no delphi 7. Na minha aplicacao trabalho com arquivo .INI onde fica as configuracoes do componente sqlconnection.

A primeiro vez que a aplicacao é executada, verifica a existencia do arquivo .INI, caso nao exista, abre-se um form para preencher a configuracao e gerar o arquivo .INI. Beleza, isto esta funcionando perfeitamente. O que estou tentando implementar é que o usuario possa testar essa conexao com o banco de dados antes de gerar o arquivo .INI, validando as configuracoes preenchida, se estiver td certo, exibe a mensagem que conseguiu conectar com o banco e habilita o botao para gerar o arquivo .INI, caso contrario, exibe a mensagem que nao conseguiu conectar com o banco, isso pode ser por alguma configuracao digita incorretamente.

Assim sendo, no botao de testar conexao, crie um sqlconnectionTESTE em tempo de execucao e passei todos os parametros, igual ao sqlconnectionprincipal que esta no datamodule. Vendo na tela no sqlconnectionTESTE.params.text esta identico aos parametros gerados no arquivo .INI, so que nao conecta.

Segue abaixo os codigos, me ajudem

procedure TFrmConfig.PngBtnTestarClick(Sender: TObject);
var
    SQLConnPrincipalTeste : TSQLConnection;
begin
  SQLConnPrincipalTeste                 := TSQLConnection.Create(nil);
  with SQLConnPrincipalTeste do
  begin
    Connected := False;
    Params.Clear;
    Update;
    try
      ConnectionName                               := fdm_Principal.SQLConnPrincipal.ConnectionName;
      GetDriverFunc                                := fdm_Principal.SQLConnPrincipal.GetDriverFunc;
      LibraryName                                  := fdm_Principal.SQLConnPrincipal.LibraryName;
      VendorLib                                    := fdm_Principal.SQLConnPrincipal.VendorLib;
      KeepConnection                               := fdm_Principal.SQLConnPrincipal.KeepConnection;
      LoadParamsOnConnect                          := True;
      LoginPrompt                                  := false;
      Params.Add(DriverName = + fdm_Principal.SQLConnPrincipal.Params.Values[DriverName]);
      Params.Add(BlobSize = + fdm_Principal.SQLConnPrincipal.Params.Values[BlobSize]);
      Params.Add(CommitRetain = + fdm_Principal.SQLConnPrincipal.Params.Values[CommitRetain]);
      {Se a conexao for Local}
      if (RadioLocal.Checked = True ) Then
      begin
        if JvIP.Text <>  then
          Params.Add(Database = + JvIP.Text+:+EdtPatch.Text)    { Path do Banco de Dados }
        else
          Params.Add(Database = + EdtPatch.Text);    { Path do Banco de Dados }
      end;
      if (RadioRemoto.Checked = True ) Then
      begin
        {Senão a conexao Vai receber o Ip do Servidor, a porta de Comunicação e o Patch do banco}
        Params.Add(Database = + JvIP.Text+/+ EdtPorta.Text+:+EdtPatch.Text);
                  {Ip, Porta e Path do Banco de Dados }
      end;
      Params.Add(ErrorResourceFile = + fdm_Principal.SQLConnPrincipal.Params.Values[ErrorResourceFile]);
      Params.Add(LocaleCode = + fdm_Principal.SQLConnPrincipal.Params.Values[LocaleCode]);
      Params.Add(Password = + EdtPassDB.Text);
      Params.Add(RoleName = + fdm_Principal.SQLConnPrincipal.Params.Values[RoleName]);
      Params.Add(ServerCharSet = + fdm_Principal.SQLConnPrincipal.Params.Values[ServerCharSet]);
      Params.Add(SQLDialect = + fdm_Principal.SQLConnPrincipal.Params.Values[SQLDialect]);
      Params.Add(Interbase TransIsolation = + fdm_Principal.SQLConnPrincipal.Params.Values[Interbase TransIsolation]);
      Params.Add(User_name = + EdtUserDB.Text + A);
      Params.Add(WaitOnLocks = + fdm_Principal.SQLConnPrincipal.Params.Values[WaitOnLocks]);

      Connected := true;
      MessageDlg(Sucesso na conexão com Servidor, mtInformation, [mbOk], 0);
      Connected := False;
      btok.Enabled := True;
      PngBtnTestar.Enabled := False;
    except
      Connected := False;
      MessageDlg(Falha na conexão com Servidor+#13+#10+Verifique as configurações e tente novamente, mtError, [mbOk], 0);
    end;
    Update;
  end;
end;


aguardo solucao

Sds
Iramar Junior

Iramar Junior

Responder

Posts

30/05/2012

Anderson

Ajuste o código para retornar a mensagem de erro e mostrar a configuração feita no componente (não testei o código, pode necessitar de ajustes):

.
.
.
except
on E:Exception do begin
Connected := False;
MessageDlg(Falha na conexão com Servidor+#13+#10+Verifique as configurações e tente novamente.+#13+
Erro: +E.Message, mtError, [mbOk], 0);
ShowMessage(SQLConnPrincipalTeste.Params.Text);
end;
end;
.
.
.


A identificação clara do erro já será a metade do caminho para a solução.

Abraços,

Anderson:.
Responder

Gostei + 0

30/05/2012

Iramar Junior

Olha que interessante, fiz o acerto que mencionou para mostrar o erro e descobri que o erro ocorrido é:
Missing Database property

que seria a falta do caminho com o banco de dados, certo.


Porem, se analisar o codigo, vera que adiciono no parametro Database o caminho e o banco, coloquei o showmessage(Params.text) tb antes de tentar conectar com o banco e la aparece o caminho/banco certinho, ja depois que ocorre o erro o unico parametro que nao aparece é justamente o caminho e o banco de dados.

veja no codigo as linhas que modifiquei:

procedure TFrmConfig.PngBtnTestarClick(Sender: TObject);
var
   SQLConnPrincipalTeste : TSQLConnection;
begin
   SQLConnPrincipalTeste := TSQLConnection.Create(nil);
   with SQLConnPrincipalTeste do
   begin
     Connected := False;
     Params.Clear;
     Update;
     try
        ConnectionName := fdm_Principal.SQLConnPrincipal.ConnectionName;
        GetDriverFunc := fdm_Principal.SQLConnPrincipal.GetDriverFunc;
        LibraryName := fdm_Principal.SQLConnPrincipal.LibraryName;
        VendorLib := fdm_Principal.SQLConnPrincipal.VendorLib;
        KeepConnection := fdm_Principal.SQLConnPrincipal.KeepConnection;
        LoadParamsOnConnect := True;
        LoginPrompt := false;
        Params.Add(DriverName = + fdm_Principal.SQLConnPrincipal.Params.Values[DriverName]);
        Params.Add(BlobSize = + fdm_Principal.SQLConnPrincipal.Params.Values[BlobSize]);
        Params.Add(CommitRetain = + fdm_Principal.SQLConnPrincipal.Params.Values[CommitRetain]);
        {Se a conexao for Local}
        if (RadioLocal.Checked = True ) Then
        begin
          if JvIP.Text <> then
             Params.Add(Database = + JvIP.Text+:+EdtPatch.Text) { Path do Banco de Dados }
          else
             Params.Add(Database = + EdtPatch.Text); { Path do Banco de Dados }
        end;
        if (RadioRemoto.Checked = True ) Then
        begin
          {Senão a conexao Vai receber o Ip do Servidor, a porta de Comunicação e o Patch do banco}
          Params.Add(Database = + JvIP.Text+/+ EdtPorta.Text+:+EdtPatch.Text);
          {Ip, Porta e Path do Banco de Dados }
        end;
        Params.Add(ErrorResourceFile = + fdm_Principal.SQLConnPrincipal.Params.Values[ErrorResourceFile]);
        Params.Add(LocaleCode = + fdm_Principal.SQLConnPrincipal.Params.Values[LocaleCode]);
        Params.Add(Password = + EdtPassDB.Text);
        Params.Add(RoleName = + fdm_Principal.SQLConnPrincipal.Params.Values[RoleName]);
        Params.Add(ServerCharSet = + fdm_Principal.SQLConnPrincipal.Params.Values[ServerCharSet]);
        Params.Add(SQLDialect = + fdm_Principal.SQLConnPrincipal.Params.Values[SQLDialect]);
        Params.Add(Interbase TransIsolation = + fdm_Principal.SQLConnPrincipal.Params.Values[Interbase TransIsolation]);
        Params.Add(User_name = + EdtUserDB.Text + A);
        Params.Add(WaitOnLocks = + fdm_Principal.SQLConnPrincipal.Params.Values[WaitOnLocks]);

        showmessage(SQLConnPrincipalTeste.Params.Text); // aqui aparece no database o caminho do banco 
                                                        // deveria ir para a proxima linha e conectar
        Connected := true;
        MessageDlg(Sucesso na conexão com Servidor, mtInformation, [mbOk], 0);
        Connected := False;
        btok.Enabled := True;
        PngBtnTestar.Enabled := False;
     except
       on E:Exception do
       begin
         Connected := False;
         MessageDlg(Falha na conexão com Servidor+#13+#10+
                    Verifique as configurações e tente novamente+#13+#10+
                    Erro :E.message, mtError, [mbOk], 0);

         // erro Missing Database property

         showmessage(SQLConnPrincipalTeste.Params.Text); // aqui o database esta em branco, por isso gera o erro

       end;
     end;
     Update;
   end;
end;


Nao sei se deu para entender o que esta acontecendo, continuo precisando de ajuda.

Att


Responder

Gostei + 0

31/05/2012

Iramar Junior

demorei mas consegui resolver...

O SQLConnection deve ter alguma particularidade que nao aceita colocar as propriedades fora da ordem que o componente foi criado, os parametros td bem vc pode colocar desordenados, foi so colocar na ordem o SQLConnetionTeste que criei em memoria que td funcionou.

ConnectionName
DriverName
GetDriverFunc
KeepConnection
LibraryName
LoadParamsOnConnect
LoginPrompt
Parmas (DriverName, blobsize, commitretain, database, errorresourcefile, localecode, password, rolename, servercharset, sqldialect, interbase transisolation, user_name, waitonlocks)
VendorLib

Depois de passado todos as propriedades e parametros na mesma sequencia o problema foi resolvido. Talvez pode ter sido uma sorte, mas comigo so resolveu dessa forma

Obrigado pela atencao
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar