Pergunta

Primeiro, não suporto cristal! Ok, isso está fora do meu peito ...

Agora, temos um velho VB6 App que mantemos para um cliente, que usa a biblioteca de automação de cristal para alterar programaticamente as fórmulas de seleção de registros em um monte de Crystal Reports 8.5 relatórios.

Existem dois relatórios que são quase idênticos. Eu tive que mudá -los recentemente para adicionar outro campo de outra tabela. Quando adicionei a tabela aos relatórios, enquanto a adicionou no designer visual, ela não a adicionou na cláusula de instrução SQL. Então, editei manualmente a instrução SQL para adicionar a junção adicional. Ko, funciona muito bem. Se eu executar os relatórios no modo de visualização de cristal, eles funcionam exatamente como o esperado.

Agora, os usuários foram testar as alterações no aplicativo VB. Um dos relatórios funciona bem e dândy. O outro relatório, no entanto, está deixando de definir a fórmula de seleção conforme o esperado.

O código define as fórmulas de seleção usando a função PESetSelectionFormula. Verifiquei que a string que está sendo passada para a função como a nova fórmula de seleção está correta através de um exame passo a passo das variáveis. A chamada para PESetSelectionFormula Parece estar funcionando bem e está retornando um valor de 1, que o mais próximo possível, em qualquer lugar, indica sucesso. (O outro relatório, que está funcionando bem com o código também está retornando 1.)

No entanto, o relatório está falhando com um erro: Error Code: 534 - Error detected by database DLL. O código, para fins de depuração, despeja a sequência SQL atualmente usada pelo relatório. O SQL sai do relatório é:

SELECT ... FROM ... 
WHERE

ORDER BY ...

Como você pode ver, a cláusula Where está em branco, o que eu imagino é por que a DLL do banco de dados está coche nessa declaração. Não entendo por que a biblioteca de automação não está definindo a cláusula onde PESetSelectionFormula está sendo aprovado uma string válida e está retornando o sucesso. Eu pensei que talvez fosse porque eu havia editado manualmente o SQL no relatório para adicionar a tabela que não estava adicionando, mas fiz a mesma coisa no outro relatório quase idêntico e que alguém está funcionando bem.

Alguém tem alguma idéia por que PESetSelectionFormula pode relatar sucesso, mas não fazer nada?

Ps Eu já tentei fazer um Banco de dados> Verifique o banco de dados Dos menus, e isso dizia que o relatório estava atualizado e não ajudou nada.

Foi útil?

Solução 3

Ok, isso é típico de que eu apenas desprezo os relatórios de Crystal.

Meu chefe voltou das férias e olhou para isso ... não fez nada, e agora funciona. Ele me mostrou exatamente o que fez, e não mudou ou fez qualquer coisa no relatório, apenas as mesmas etapas de depuração que eu tomei, mas agora funciona magicamente.

Eu realmente não gosto de software que apenas para automaticamente e começa a funcionar assim. Obrigado pelas idéias.

Outras dicas

Eu nunca usei PesesetSelectionFormula, mas encontrei problemas para importar dados aceitáveis:

  1. Sua consulta SQL final usa alguma função incomum, ou seja, NZ ()? O cristal nem sempre reconhece as funções VB, IMHO.

  2. Você tem algum valor nulo em seus dados importados que estão criando conflitos?

  3. Depois de coletar seus dados, você pode colocá -los em uma tabela temporária e dizer a Crystal para pegar os dados dessa tabela de temperatura? Se você tiver problemas com o número 1 ou 2, isso pode ser uma boa solução alternativa.

Em algumas versões do CR, o pesetselectionFormula anexa o novo valor à fórmula de seleção de registros existente, em outras versões, pesesetselectionFormula substitui a fórmula de seleção de registros existente com o novo valor.

Não me lembro quando esse interruptor ocorreu, mas deve ser fácil para você determinar qual comportamento está ocorrendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top