ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Delphi x Mysql Urgente
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
VDL
Aprendiz
Aprendiz


Registrado: Sábado, 7 de Mai de 2005
Mensagens: 170

MensagemEnviada: Qua Abr 03, 2013 10:34 pm    Assunto: Delphi x Mysql Urgente Responder com Citação

Pessoal,
Sempre que os clientes abrem o meu sistema, dependendo do número de clientes abertos, o mysql me retorna a seguinte mensagem: "Too many connections".
Sei que quer dizer que há muitas conexões acessando a base ao mesmo tempo, por padrão, o Mysql configura o máximo de conexões para 100.
O problema que essa mensagem as vezes ocorre com até 2 clientes abertos.
Tenho acompanha atraves do adm do mysql e verifiquei que o número de conexões vai aumentando a cada consulta etc.
Já aumentei número de conexão, mas acho que isto não é correto.

O que eu posso fazer para resolver esse problema? Alguém já teve essa experiência?

Rolling Eyes

Estou usando DBX4 do D2007.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcelo_tux
Aprendiz
Aprendiz


Registrado: Terça-Feira, 2 de Abril de 2013
Mensagens: 230
Localização: São José do Rio Preto - SP

MensagemEnviada: Qui Abr 04, 2013 8:24 am    Assunto: Re: Delphi x Mysql Urgente Responder com Citação

Bom dia.

Olha nunca tive essa mensagem, tenho um sistema em delphi com mysql, onde 50 usuarios acessam o banco de dados ao mesmo tempo, e nunca recebi essa mensagem.

Descreva sua situação, como qual maquina roda seu banco, que versão do mysql voce usa, como voce faz a conexão com o banco etc.....
_________________
Porgramador Delphi - Mobile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qui Abr 04, 2013 8:35 am    Assunto: Responder com Citação

tb nao tenho esse problema. meu sistema abre 2 conexoes ao banco ao mesmo tempo (ZConnection (Seoz), e um SQLConnection (DBX) pra comunicacao com FastReport - ainda tiro ele - o DBX)

e sao mais de 20 usuarios ao mesmo tempo (por enqto, mais esse numero tende a crescer pra 50 mais ou menos)
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
CesarRocha
Mestre
Mestre


Registrado: Segunda-Feira, 30 de Mai de 2011
Mensagens: 794
Localização: São Paulo - SP

MensagemEnviada: Qui Abr 04, 2013 8:55 am    Assunto: Re: Delphi x Mysql Urgente Responder com Citação

VDL escreveu:
Pessoal,
Tenho acompanha atraves do adm do mysql e verifiquei que o número de conexões vai aumentando a cada consulta etc.
Já aumentei número de conexão, mas acho que isto não é correto.


Achei curiosa essa afirmação... será que você não está abrindo/criando conexões com o banco de dados e esquecendo de fecha/liberar elas?

~Bye
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qui Abr 04, 2013 8:59 am    Assunto: Re: Delphi x Mysql Urgente Responder com Citação

CesarRocha escreveu:
VDL escreveu:
Pessoal,
Tenho acompanha atraves do adm do mysql e verifiquei que o número de conexões vai aumentando a cada consulta etc.
Já aumentei número de conexão, mas acho que isto não é correto.


Achei curiosa essa afirmação... será que você não está abrindo/criando conexões com o banco de dados e esquecendo de fecha/liberar elas?

~Bye


tb acho isso
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
VDL
Aprendiz
Aprendiz


Registrado: Sábado, 7 de Mai de 2005
Mensagens: 170

MensagemEnviada: Qui Abr 04, 2013 9:52 pm    Assunto: Responder com Citação

Pessoal, obrigado pela atenção e desculpe pela demora em responder.

Estou usando DBExpress com ClientDataSet e o servidor é Linux, para monitorar as tabelas uso Mysql Adminitrator.

E através do administrator do Mysql no Server Connections verifico que ao abrir o sistema já me aparece cerca de sete conexões, se abro um form é estabelecido mais uma ou duas conexões depende do número de tabela usada no form, porém quando fecho o mesmo, a conexão não é encerrada.

Qual pode ser o problema, se toda vez que fecho o form fecho as tabelas também, tem alguma configuração a ser feita nos componentes do Delphi ou no próprio Mysql.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Sex Abr 05, 2013 9:02 am    Assunto: Responder com Citação

posta o codigo q vc usa pra abrir as tabelas.

pra cada form, vc ta criando um novo sqlConnection? é ele quem faz a conexao ao banco.

aqui uso so um sqlConnection (no meu caso, ZConnection) no datamodule principal, e todas as querys sao ligadas a ele
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
VDL
Aprendiz
Aprendiz


Registrado: Sábado, 7 de Mai de 2005
Mensagens: 170

MensagemEnviada: Sex Abr 05, 2013 1:30 pm    Assunto: Responder com Citação

Joemil, obrigado pela atenção.

Uso um damodule também com um únicos SQLConnection e para acesso as tabelas os seguintes componentes : SqlDatasete, DataSetProvider, ClientDataSet e um DataSource em cada form ligado ao ClientDataSet.
No DataModule tenho as seguintes procedures e function
Código:
procedure TDmBase.DataModuleCreate(Sender: TObject);
var
  I: Integer;
begin
    for I := 0 to ComponentCount - 1 do
    if Components[I] is TClientDataSet then
    begin
       TClientDataSet(Components[I]).BeforePost := SetID;
       TClientDataSet(Components[I]).OnReconcileError := GetError;
    end;
 end;

procedure TDmBase.GetError(DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  showmessage('Um Erro Ocorreu ao tentar gravar o registro '+#13+
             'Mensagem Original '+E.Message);
end;

function TDmBase.GetID(Table: String): Integer;
var
  SqlQuery : TSQLQuery;
begin
   SqlQuery := TSQLQuery.Create(Self);
   SqlQuery.SQLConnection := DmBase.MYConnect;
   SqlQuery.SQL.Add('SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_NAME = ' + QuotedStr(Table));
   SqlQuery.Open;
   Result := SqlQuery.Fields[0].Value;
end;

procedure TDmBase.SetID(DataSet: TDataSet);
begin
  if DataSet.State in [dsInsert] then
    DataSet.Fields[0].Value := GetID(''+ copy(DataSet.Name, 4));
end;


No Create dos form abra as tabelas desta forma

TClientDataSet(DS.DataSet).Close;
TClientDataSet(DS.DataSet).CommandText := ('SELECT * FROM clientespht Order By nome');
TClientDataSet(DS.DataSet).Open;

E no Close dos fecho as tabels desta forma.
TClientDataSet(DS.DataSet).Close;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosbaixista
Profissional
Profissional


Registrado: Quinta-Feira, 18 de Março de 2010
Mensagens: 594
Localização: Maringá/PR

MensagemEnviada: Dom Abr 07, 2013 1:32 pm    Assunto: Responder com Citação

Oi amigo.

Pelo que notei, você só ta fechando os ClientDataSet, isso só tira as informações da memória, porém as tabelas estão abertas. Tenta abrir e depois fechar as conexões com as tabelas através do componente que você acessa tabela.

No caso de Query -> Query. Close
No caso de Table -> Table.Close.

Me parece que você está estabelecendo uma conexão a cada vez que acessa as tabelas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
VDL
Aprendiz
Aprendiz


Registrado: Sábado, 7 de Mai de 2005
Mensagens: 170

MensagemEnviada: Seg Abr 08, 2013 3:14 pm    Assunto: Responder com Citação

Amigo,

Coloquei no Close do form o seguinte:

DM.SqlDataset.Close;

Porém continua do memso jeito.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Seg Abr 08, 2013 3:58 pm    Assunto: Responder com Citação

procure no seu projeto por:

TSqlconnection.Create

ou se vc esta recriando o datamodule cada vez q estabelece a conexão

provavelmente vc deve ter mais de um sqlConnection, ou esta criando algum form q contenha ele

deixe somente um sqlconnection em todo projeto
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
VDL
Aprendiz
Aprendiz


Registrado: Sábado, 7 de Mai de 2005
Mensagens: 170

MensagemEnviada: Ter Abr 09, 2013 1:09 pm    Assunto: Responder com Citação

Joemil,

Uso apenas um TSqlconnection, porém em alguns form uso esse comando para se conectar ao BD para fazer consulta:
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection

Isto pode ser o problema ?? Tem como encerrar a conexão após a consulta.

Estou colocando DBCon.Free e recebendo mensagem de access violation
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
CesarRocha
Mestre
Mestre


Registrado: Segunda-Feira, 30 de Mai de 2011
Mensagens: 794
Localização: São Paulo - SP

MensagemEnviada: Ter Abr 09, 2013 2:05 pm    Assunto: Responder com Citação

Fazendo dessa forma você está criando objetos de conexão toda vez. Por isso o problema, você terá que libera-la da memória.

Veja alguns exemplos...

http://marcosalles.wordpress.com/2010/03/21/executando-comando-consulta-sem-dataset-delphi2007-delphi-2010/
http://docwiki.embarcadero.com/RADStudio/XE3/en/Connecting_to_a_Database_using_the_dbExpress_Driver_Framework

Outra coisa...

Por que você precisa fazer isso? "DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection "
Você não consegue passar o objeto de conexão, com ela criada, para esse DBCon?

~
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
claudiomiro
Novato
Novato


Registrado: Quarta-Feira, 9 de Fevereiro de 2011
Mensagens: 7

MensagemEnviada: Qui Out 27, 2016 7:12 pm    Assunto: Responder com Citação

Também estou com esse problema, alguem sabe a solução ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Sex Out 28, 2016 7:44 am    Assunto: Responder com Citação

joemil escreveu:
procure no seu projeto por:

TSqlconnection.Create

ou se vc esta recriando o datamodule cada vez q estabelece a conexão

provavelmente vc deve ter mais de um sqlConnection, ou esta criando algum form q contenha ele

deixe somente um sqlconnection em todo projeto


Verifique se isso que o amigo joemil postou não está ocorrendo com você
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB