SQLConnection run time
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
aguardo solucao
Sds
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
Curtidas 0
Respostas
Anderson
29/05/2012
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:.
.
.
.
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
Iramar Junior
29/05/2012
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:
Nao sei se deu para entender o que esta acontecendo, continuo precisando de ajuda.
Att
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
Iramar Junior
29/05/2012
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
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