Fórum SQLConnection run time #417659
29/05/2012
0
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
Curtir tópico
+ 0Posts
30/05/2012
Anderson
.
.
.
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:.
Gostei + 0
30/05/2012
Iramar Junior
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
Gostei + 0
31/05/2012
Iramar Junior
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)