Tenho um agendamento de relatórios. O usuário cadastra os relatórios que ele quer agendar e recebe no email, ftp etc…
Resolvi colocar essa rotina em thread, Está funcionando até que bem, mas quando mais de um agendamento é executado no mesmo horário e como crio os componentes de conexão em runtime, está acontecendo de criar componentes com o mesmo nome. Veja a mensagem de erro: A component named dspRelat already exists. Nesse caso o sistema de agendamento tentou criar mais de um provider com o mesmo nome.
Qual a solução para resolver esse problema? O TParallel?
A solução rápida seria você fazer como o Delphi faz, adicionar um controlador para não repetir o nome, DatasetProdiver1, Dataseprovider2, etc, etc, você pode passar algo no create a da Thread para informar isso a ela e ela se baseia nisso para criar os componentes próprios.
Eu geralmente trabalho com propriedades internas na Thread, então somente ela enxerga.
Obrigado pela ajuda Régis, mas resolvi colocar esses agendamentos em fila. Logo minha aplicação não trava por estar em thread e não tenho o problema de criação de componentes com o mesmo nome. Terei um problema se aparecer um agendamento muito pesado e atrapalhar os demais, mas estou monitorando, caso isso aconteça terei que reescrever a rotina. Mesmo assim obrigado.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.Cancelar resposta
Tenho um agendamento de relatórios. O usuário cadastra os relatórios que ele quer agendar e recebe no email, ftp etc…
Resolvi colocar essa rotina em thread, Está funcionando até que bem, mas quando mais de um agendamento é executado no mesmo horário e como crio os componentes de conexão em runtime, está acontecendo de criar componentes com o mesmo nome. Veja a mensagem de erro: A component named dspRelat already exists. Nesse caso o sistema de agendamento tentou criar mais de um provider com o mesmo nome.
Qual a solução para resolver esse problema? O TParallel?
A solução rápida seria você fazer como o Delphi faz, adicionar um controlador para não repetir o nome, DatasetProdiver1, Dataseprovider2, etc, etc, você pode passar algo no create a da Thread para informar isso a ela e ela se baseia nisso para criar os componentes próprios.
Eu geralmente trabalho com propriedades internas na Thread, então somente ela enxerga.
Obrigado pela ajuda Régis, mas resolvi colocar esses agendamentos em fila. Logo minha aplicação não trava por estar em thread e não tenho o problema de criação de componentes com o mesmo nome. Terei um problema se aparecer um agendamento muito pesado e atrapalhar os demais, mas estou monitorando, caso isso aconteça terei que reescrever a rotina. Mesmo assim obrigado.