cancel
Showing results for 
Search instead for 
Did you mean: 

Lentidão no relatório

former_member541463
Participant
0 Kudos

Prezados,

Estou com um problema num relatório feito no Crystal Reports 2008, estou usando a seguinte consulta diretamente no Crystal(é onde está o erro, segundo amigo aqui da comunidade), pois deveria criar uma view diretamente no SQL Server, porém não sei como fazê-lo, pois sou iniciante no mundo SQL.

Meu relatório demora de 1 a 2 minutos para trazer as informações, gostaria muito da ajuda de vocês, pois já faz um bom tempo que estou empacado nesse problema. Segue abaixo consulta utilizada:

DECLARE @contador int

DECLARE @grupo varchar(max)

DECLARE @campo varchar(max)

SET @grupo = ''

SET @contador = 0

WHILE @contador < 64 BEGIN

     

    SET @contador = @contador + 1

    SET @campo = 'T0.QryGroup' + ltrim(str(@contador))

      

    SET @grupo = @grupo + ', ' + @campo +

        ', CASE WHEN ' + @campo + ' = ''Y''' + ' THEN (SELECT T1.GroupName FROM OCQG T1 WHERE T1.GroupCode = ' + ltrim(str(@contador)) + ') ELSE ' + '''OUTROS''' + ' END AS NomeGrupo' +  ltrim(str(@contador))

END

EXEC

(

'SELECT

    T0.CardCode,

    T0.CardName' + @grupo +

    ' FROM OCRD T0'

)

Mais detalhes bem como todo o histórico do problema podem ser encontrados no seguinte post:

Obrigado!

Accepted Solutions (0)

Answers (7)

Answers (7)

former_member541463
Participant
0 Kudos

Alguém poderia me ajudar?

former_member541463
Participant
0 Kudos

???

former_member541463
Participant
0 Kudos

Bom dia amigos,

Alguém teria nova sugestão para o caso?

Obrigado!

former_member186712
Active Contributor
0 Kudos

Boas,

Eu não gosto de utilizar commandos e tabelas nos relatórios.

Se preciso de utilizar um comando, crio o comando com tudo o que eu preciso.

Ex. O teu procedimento devolve informação do OCRD e tambem tens a tabela do OCRD. Poderias devolver todos os campos que precisas no procedimento e retirar a tabela OCRD.

Fica a sugestão.

Augusto

Former Member
0 Kudos

Paulo, boa tarde.

Primeiro você deve criar a procedure no SQL Management:


Create Procedure GrupoClientes As

DECLARE @contador int

DECLARE @grupo varchar(max)

DECLARE @campo varchar(max)

SET @grupo = ''

SET @contador = 0

WHILE @contador < 64 BEGIN

   

    SET @contador = @contador + 1

    SET @campo = 'T0.QryGroup' + ltrim(str(@contador))

    SET @grupo = @grupo + ', ' + @campo +

        ', CASE WHEN ' + @campo + ' = ''Y''' + ' THEN (SELECT T1.GroupName FROM OCQG T1 WHERE T1.GroupCode = ' + ltrim(str(@contador)) + ') ELSE ' + '''OUTROS''' + ' END AS NomeGrupo' +  ltrim(str(@contador))

END

EXEC

(

'SELECT

    T0.CardCode,

    T0.CardName' + @grupo +

    ' FROM OCRD T0'

)

Depois você vai no Crystal, seguindo os prints abaixo:

Na figura 3, você vai digitar o comando "Exec GrupoClientes" (sem as aspas)

Qualquer dúvida me avise.

Att,

Lucas

former_member541463
Participant
0 Kudos

Bom dia Lucas,

Primeiramente obrigado pela resposta... Fiz como vc sugeriu, criei a procedure no SQL Server 2008 R2, depois fui no Crystal Reports 2008 e tb fiz como vc disse... Porém o relatório continua com lentidão, como a acreditar que o problema seja outro, talvez o nº de testes (IF/ELSE) que tenho que fazer... Vou colocar alguns prints abaixo para explicar o que exatamente estou fazendo:

Primeiramente como estou fazendo no projeto do relatório:

Agora quais as fórmulas estou utilizando:

Como estou linkando as tabelas:

E por fim, uma mensagem que sempre aparece e não sei o que significa:

Mais uma vez agradeço a atenção e espero que possa continuar me ajudando...

Abraço!

Former Member
0 Kudos

Boa Tarde Paulo

    Meus relatórios demoravam muito para emitir também, depois de varias pesquisas descobrir que a demora se dava pela minha conexão que eu usava a do crystal SAP  quando comecei a usar a conexão OLE DB (ADO) do sql server,  a velocidade aumentou 1.000.000. não sei se é esse o seu problema espero ter ajudado. 

ednelson_vieira
Explorer
0 Kudos

Ok,

Vou montar este step by step e postarei.

former_member186712
Active Contributor
0 Kudos

Boa tarde Paulo

Aqui do outro lado do Atlantico.

Eu executei no SQL o teu query, só tenho 800 clientes e foi rápido.

Quantos clientes tens?

Já executas-te o query no SQL? Se foi rápido o problema é do Crystal...

Não sei se ajudei, mas tentei.

Saudações

former_member541463
Participant
0 Kudos

Olá! Augusto,

Tenho por volta de 5.000 clientes, sim no SQL a resposta é rápida... Sei que o problema está em utilizar a consulta diretamente no Crystal, porém não sei como contornar o problema(é aí que preciso de ajuda)... Se puder dar uma olhadinha, neste post, talvez entenda melhor o caso:

Obrigado pelo interesse em ajudar-me.

Abraço!

ednelson_vieira
Explorer
0 Kudos

Bom dia Paulo,

A ideia de rodar isso em procedure sql realmente te melhora em muito

a performance,  vc pode executar esta procedure diretamente no seu Crystal Report.

Como:

Vc pode dentro do Sql criar esta procedure , quando vc abrir a conexão no Crystal

lá na seleção das bases vc informa que vai usar uma Stored Procedures, neste momento vai aparecer uma lista de procedures já existente no bando de dados e só escolher a que vc criou.


Espero que esta sugestão te ajude

former_member541463
Participant
0 Kudos

Boa tarde! Ednelson,

Poderia fazer um step-by-step desse procedimento? Não sei quase nada de SQL, e não faço idéia de como salvar essa consulta como uma procedure no meu BD.

Grato!