DBExress MySQL aumentando o número de conexões no banco.
Estou usando o Delphi 2007 com DBExpress para conectar no banco de dados MySQL 5.
TSQLConnection -> TSQLQuery -> TDataSetProvider -> TClientDataSet -> TDataSource.
Cadavez que eu executo um ´ExecSQL();´ no banco de dados vai aumentando o número de conexões. Já tentei dar um ´Free´ mas não deu certo. Só dá pra fechar as coneões quando fecho a aplicação. Gostaria de uma solução melhor que esta. Se alguem já passou por algo parecido, por favor preciso de uma luz.
Procedure TForm_Senha.GravaDados;
Var
SQL_Update : TSQLQuery;
Begin
SQL_Update := TSQLQuery.Create(Self);
Try
SQL_Update.SQLConnection := Dm_Ponto.SQLPonto;
SQL_Update.SQL.Clear;
SQL_Update.SQL.Add(´UPDATE FUNCIONA_DBF ´);
SQL_Update.SQL.Add(´ SET STATFUNC = :STATFUNC, ´);
SQL_Update.SQL.Add(´ DTPONTO = :DTPONTO, ´);
SQL_Update.SQL.Add(´ HRPONTO = :HRPONTO, ´);
SQL_Update.SQL.Add(´ TIPOSAID = :TIPOSAID ´);
SQL_Update.SQL.Add(´ WHERE CODIFUNC = :CODIFUNC ´);
SQL_Update.ParamByName(´DTPONTO´).AsDate := DATE;
SQL_Update.ParamByName(´HRPONTO´).Value := TimeToStr(Time());
SQL_Update.ParamByName(´CODIFUNC´).Value := Dm_Ponto.SQLQryFunciona.FieldByName(´CODIFUNC´).Value;
SQL_Update.ExecSQL();
Finally
SQL_Update.Close;
SQL_Update.Free;
End;
Tirei algumas coisas do código mas o principal ta ai
TSQLConnection -> TSQLQuery -> TDataSetProvider -> TClientDataSet -> TDataSource.
Cadavez que eu executo um ´ExecSQL();´ no banco de dados vai aumentando o número de conexões. Já tentei dar um ´Free´ mas não deu certo. Só dá pra fechar as coneões quando fecho a aplicação. Gostaria de uma solução melhor que esta. Se alguem já passou por algo parecido, por favor preciso de uma luz.
Procedure TForm_Senha.GravaDados;
Var
SQL_Update : TSQLQuery;
Begin
SQL_Update := TSQLQuery.Create(Self);
Try
SQL_Update.SQLConnection := Dm_Ponto.SQLPonto;
SQL_Update.SQL.Clear;
SQL_Update.SQL.Add(´UPDATE FUNCIONA_DBF ´);
SQL_Update.SQL.Add(´ SET STATFUNC = :STATFUNC, ´);
SQL_Update.SQL.Add(´ DTPONTO = :DTPONTO, ´);
SQL_Update.SQL.Add(´ HRPONTO = :HRPONTO, ´);
SQL_Update.SQL.Add(´ TIPOSAID = :TIPOSAID ´);
SQL_Update.SQL.Add(´ WHERE CODIFUNC = :CODIFUNC ´);
SQL_Update.ParamByName(´DTPONTO´).AsDate := DATE;
SQL_Update.ParamByName(´HRPONTO´).Value := TimeToStr(Time());
SQL_Update.ParamByName(´CODIFUNC´).Value := Dm_Ponto.SQLQryFunciona.FieldByName(´CODIFUNC´).Value;
SQL_Update.ExecSQL();
Finally
SQL_Update.Close;
SQL_Update.Free;
End;
Tirei algumas coisas do código mas o principal ta ai
Hayashi
Curtidas 0
Respostas
Alex Maia
26/05/2008
Estou com este mesmo problema. Participo de um grupo de n-tier e há umas duas semanas houve um debate muito grande entre os participantes falando sobre o dbx4 com mysql. Muitos falaram de vantagens e desvantagens, porém não conseguiram resolver este problema. Fiz até um exemplo mostrando como ocorre este problema.
Deste grupo participam pessoas que fizeram muita propaganda sobre o dbx4 do delphi 2007, mas nem eles responderam.
Eu tenho um sistema que funciona bem com delphi 7 e mysql 4.0.xxx e no momento estou migrando.
Qualquer coisa vc manda mensagem pra trocarmos idéias sobre estes problemas.
flw
Deste grupo participam pessoas que fizeram muita propaganda sobre o dbx4 do delphi 2007, mas nem eles responderam.
Eu tenho um sistema que funciona bem com delphi 7 e mysql 4.0.xxx e no momento estou migrando.
Qualquer coisa vc manda mensagem pra trocarmos idéias sobre estes problemas.
flw
GOSTEI 0
Hayashi
26/05/2008
Então... fiquei até emocionado agora. Ainda bem que não sou o único que tem esse problema. Vou tentar contornar esse Bug mas um pouco, migrar tudo agora vai ser complicado.
Será que alguém já fez uma ´POG´ pra tentar passar por esse problema???
Será que alguém já fez uma ´POG´ pra tentar passar por esse problema???
GOSTEI 0
Emerson Nascimento
26/05/2008
Estou usando o Delphi 2007 com DBExpress para conectar no banco de dados MySQL 5.
TSQLConnection -> TSQLQuery -> TDataSetProvider -> TClientDataSet -> TDataSource.
Cadavez que eu executo um ´ExecSQL();´ no banco de dados vai aumentando o número de conexões. Já tentei dar um ´Free´ mas não deu certo. Só dá pra fechar as coneões quando fecho a aplicação. Gostaria de uma solução melhor que esta. Se alguem já passou por algo parecido, por favor preciso de uma luz.
Procedure TForm_Senha.GravaDados;
Var
SQL_Update : TSQLQuery;
Begin
SQL_Update := TSQLQuery.Create(Self);
Try
SQL_Update.SQLConnection := Dm_Ponto.SQLPonto;
SQL_Update.SQL.Clear;
SQL_Update.SQL.Add(´UPDATE FUNCIONA_DBF ´);
SQL_Update.SQL.Add(´ SET STATFUNC = :STATFUNC, ´);
SQL_Update.SQL.Add(´ DTPONTO = :DTPONTO, ´);
SQL_Update.SQL.Add(´ HRPONTO = :HRPONTO, ´);
SQL_Update.SQL.Add(´ TIPOSAID = :TIPOSAID ´);
SQL_Update.SQL.Add(´ WHERE CODIFUNC = :CODIFUNC ´);
SQL_Update.ParamByName(´DTPONTO´).AsDate := DATE;
SQL_Update.ParamByName(´HRPONTO´).Value := TimeToStr(Time());
SQL_Update.ParamByName(´CODIFUNC´).Value := Dm_Ponto.SQLQryFunciona.FieldByName(´CODIFUNC´).Value;
SQL_Update.ExecSQL();
Finally
SQL_Update.Close;
SQL_Update.Free;
End;
Tirei algumas coisas do código mas o principal ta ai
você está dizendo que abre o sistema e, se executar esse código três vezes na mesma instância do sistema, serão abertas três conexões com o banco de dados? é isso?
não será problema no driver de conexão?
eu trabalhava com o driver dbx nativo para o sqlserver. tive que trocar pelo da CoreLab, pois o da Borland tinha vários problemas ao trabalhar com transações.
GOSTEI 0
Hayashi
26/05/2008
Era isso mesmo que o Emerson disse.
Atualizei a para os drivers da CoreLab e resolveu o problema.
Muito obrigado.
Atualizei a para os drivers da CoreLab e resolveu o problema.
Muito obrigado.
GOSTEI 0
Alex Maia
26/05/2008
Vc poderia envir para mim estes drivers?
Meu msn é tapajosc@msn.com
Desde já agradeço.
Meu msn é tapajosc@msn.com
Desde já agradeço.
GOSTEI 0