Fórum StoredProcedure / ClientDataSet #379837

19/06/2010

0

Olá pessoal.
Estou com um problema de performance no meu sistema.
Fiz uma precedure de gera dados de um funcionário. Ela retorna as horas trabalhas dia a dia. (passo o idFuncionario, dataInicio e dataFim) e ela retorna todos os dias do periodo.
Mas preciso gerar um relatório com varios funcionarios(todos ativos).
Como a procedure so retorna 1 funcionario por vez, tive que clonar o ClientDataSet, fazer selects e transportar cada select para o ClientDataSet clonado.
Funcionou blz. mas ficou mto lento. Alguem tem alguma sugestao para melhorar a performance desta rotina.

Obrigado.
Daniel Oliveira

Daniel Oliveira

Responder

Posts

19/06/2010

Marco Salles

idéia rapida (Sql não é meu forte) é que vc retire o  idFuncionario da Istruçao Where e coloque-o na Instrução Group By .. Ou seje Agrupar pelo Id .. Assim vc terá vsrios Registros Agrupados pelo  idFuncionario dos Funcionarios
Responder

Gostei + 0

20/06/2010

Daniel Oliveira

Obrigado Marco.

Tem uma situação em que eu preciso selecionar quais serão os funcionários inclusos no relatório. Assim se não tiver o id na cláusula where, não funcionará. Ate pensei em passar uma lista de ids como parametro, mas tem casos de precisar selecionar 200 funcionarios ou mais... Assim nao consegui resolver.

Responder

Gostei + 0

20/06/2010

Marco Salles

Obrigado Marco.

Tem uma situação em que eu preciso selecionar quais serão os funcionários inclusos no relatório. Assim se não tiver o id na cláusula where, não funcionará. Ate pensei em passar uma lista de ids como parametro, mas tem casos de precisar selecionar 200 funcionarios ou mais... Assim nao consegui resolver.

Uma coisa é uma Coisa outra Coisa é Outra Coisa ("Vanderlei Luxemburgo") . Vc Tira o Id da Clausula Where mas qnd Precisar de Algum Id especifico , Vc Filtra os Resultados que estão em Memória ...O Importante é Vc ter esta Range de Dados para Vc Usa-los
Responder

Gostei + 0

21/06/2010

Daniel Mourao

Olá!
Só trocando uma idéia...quando você diz que uma procedure só retorna um funcionário isso é porque você deseja que seja assim?
Porque você poderia alterar essa procedure ou fazer uma outra que retornasse todos os funcionários daquele período solicitado. Não precisaria passar o idFuncionario, somente o período e a procedure retornaria todos os funcionários do período.
Outra sugestão é que você faça uma marcação para os registros que quer imprimir. Tipo, colocar um campo na tabela que marque o registro ou então encontrar um outro campo que diferencie os registros que você quer imprimir dos demais.
Espero ter ajudado.
Responder

Gostei + 0

21/06/2010

Emerson Nascimento

se você estiver trabalhando com uma stored procedure do firebird, altere-a de modo a receber somente a data inicial e a data final e filtre o funcionário com where. assim:

select * from sp_ponto(dataini, datafim)  -> retorna a marcação de todos os funcionários no período indicado
select * from sp_ponto(dataini, datafim) where id_funcionario = funcionario -> retorna a marcação de daquele funcionário no período indicado


Responder

Gostei + 0

21/06/2010

Daniel Oliveira

Acho q vou ter q fazer isso mesmo (alterar a procedure). Mas isso vai dar uma grande mao de obra aki. Pq existem outras procedures legadas a esta q retornam totalizadores baseados no mes. Por isso nao queria mexer nela.
Se alguem souber alguma forma de popular o ClientDataSet mais rapido, poste aki por favor.

Obrigado pela ajuda Marco, Daniel e Emerson.

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar