MUDAR NOME TABELA EM RUNTIME CRYSTAL 8.5
Senhores,
Estou mudando um projeto meu, de DataReport para Crystal Reports.
Primeiro usei a versao 10 e estava funcionando muito bem, porém alguns clientes usam windows 98 e nao estava funcionando os relatorios para eles. Entao passei a usar a versao 8.5 do Crystal. Tenho alguns relatorios que as tabelas sao temporárias, resultado de processamentos para exibir o relatorio. Sendo assim, tive que criar uma rotina que atualizasse as tabelas dentro do rpt crystal em execuçao. Acontece que a mesma rotina funcionava muito bem com a versao 10, mas com a versao 8.5 nao funciona. Nem erro dá, processa normal, executa todos os comandos para trocar o nome da tabela sem erro algum, mas os dados sempre aparecem da tabela fixa que tem dados de teste do relatorio.
A parte da rotina que troca as tabelas é:
Alguém já fez algo parecido e teve problemas com Crystal 8.5???
PS: Já olhei no site do Crytal, já olhei no manual, tá tudo do jeito que deve ser mesmo. Como disse, não dá erro, apenas nao exibe os dados corretamente.
Estou mudando um projeto meu, de DataReport para Crystal Reports.
Primeiro usei a versao 10 e estava funcionando muito bem, porém alguns clientes usam windows 98 e nao estava funcionando os relatorios para eles. Entao passei a usar a versao 8.5 do Crystal. Tenho alguns relatorios que as tabelas sao temporárias, resultado de processamentos para exibir o relatorio. Sendo assim, tive que criar uma rotina que atualizasse as tabelas dentro do rpt crystal em execuçao. Acontece que a mesma rotina funcionava muito bem com a versao 10, mas com a versao 8.5 nao funciona. Nem erro dá, processa normal, executa todos os comandos para trocar o nome da tabela sem erro algum, mas os dados sempre aparecem da tabela fixa que tem dados de teste do relatorio.
A parte da rotina que troca as tabelas é:
For Each Table In Report.Database.Tables
If Report.Database.Tables(nAux).Name = NomeReplaceTable Then
Report.Database.Tables(nAux).SetTableLocation cNomeBanco & "." & NomeTempTable, jetProvider, ""
Report.Database.Tables(nAux).SetLogOnInfo jetProvider, cNomeBanco, Report.Database.Tables(nAux).LogOnUserID
Else
Report.Database.Tables(nAux).SetTableLocation cNomeBanco & "." & Report.Database.Tables(nAux).Name, jetProvider, ""
Report.Database.Tables(nAux).SetLogOnInfo jetProvider, cNomeBanco, Report.Database.Tables(nAux).LogOnUserID
End If
nAux = nAux + 1
Next
Alguém já fez algo parecido e teve problemas com Crystal 8.5???
PS: Já olhei no site do Crytal, já olhei no manual, tá tudo do jeito que deve ser mesmo. Como disse, não dá erro, apenas nao exibe os dados corretamente.
FGSANTOS, já tive um problema parecido (Usando o Crystal 8) onde relatórios com valores não apareciam as casas decimais (ficavam zeradas) e justamente dava este problema nos micros com windows98, daàpercebi que o problema era no Windows98 (já que o mesmo não gerencia a memória) verifiquei isto pq quando os usuarios usavam outros softwares e a memória ficava cheia dava o problema nos relatorios...daàbastava reiniciar o windows98 que o relatório voltava ao normal...A solução que encontrei foi passar as estações(micros) para Windows 2000 e/ou XP...e colocar + memória...
Mas meu problema não é este FRAU. Meu problema é: tenho relatórios que são exibidos de tabelas criadas via um processamento. O rpt foi criado sobre uma tabela com os mesmos campos. No Crystal 10 e 11 a rotina acima conseguia trocar a tabela, por exemplo tablog (que foi utilizada para fazer o relatorio) por tablog1100 (criada pelo processamento). Nas versoes 10 e 11 funcionaram muito bem, a mesma rotina na versao 8.5 não dá erro nenhum na execução, porém também nao exibe os dados da tabela criada e sim os dados da tabela de criaçao do relatorio. E isto acontece na meu note, com win xp.
Só para registro se alguem um dia tiver o mesmo problema:
Mantive as linhas de códigos que informei no primeiro tópico, e adcionei o seguinte código:
Percebi quando capturei a SQL do rpt que mesmo eu tendo mandado logar em outras tabelas e/ou banco, continuavam os mesmos da construção do rpt. Entao substituo diretamente na SQL e retorno para o rpt.
PS: Pena que nao posso "me pontuar"... rsrsrsrs
Mantive as linhas de códigos que informei no primeiro tópico, e adcionei o seguinte código:
cAux = Report.SQLQueryString
cAux = Replace(cAux, "sglinx", cNomeBanco)
If NomeReplaceTable <> "" And NomeTempTable <> "" Then
cAux = Replace(cAux, NomeReplaceTable, NomeTempTable)
cAux = Replace(cAux, NomeTempTable & "1", NomeReplaceTable & "1")
End If
Report.SQLQueryString = cAux
Report.Database.Verify
Percebi quando capturei a SQL do rpt que mesmo eu tendo mandado logar em outras tabelas e/ou banco, continuavam os mesmos da construção do rpt. Entao substituo diretamente na SQL e retorno para o rpt.
PS: Pena que nao posso "me pontuar"... rsrsrsrs
Tópico encerrado , respostas não são mais permitidas