Question

Tout d'abord, je ne supporte pas de cristal! D'accord, c'est ma poitrine ...

Maintenant, nous avons un vieux VB6 application, nous maintenons pour un client qui utilise la bibliothèque de Crystal Automation pour modifier programatically les formules de sélection d'enregistrements dans un tas de Crystal Reports 8.5 rapports.

Il y a deux rapports qui sont presque identiques. Je devais les changer récemment d'ajouter un autre champ d'une autre table. Quand j'ai ajouté la table dans les rapports que, alors qu'il a ajouté dans le concepteur visuel, il n'a pas ajouté dans la clause FROM de l'instruction SQL. Donc, je modifié manuellement l'instruction SQL à ajouter dans la jointure supplémentaire. KO, fonctionne très bien. Si je lance les rapports en mode Crystal aperçu, ils fonctionnent exactement comme prévu.

Maintenant, les utilisateurs sont allés tester les changements à l'intérieur de l'application VB. L'un des rapports fonctionne très bien et dandy. L'autre rapport cependant, ne parvient pas à définir la formule de sélection comme prévu.

Le code définit les formules de sélection en utilisant la fonction PESetSelectionFormula. Je vérifié que la chaîne étant passé dans la fonction que la nouvelle formule de sélection est correcte au moyen d'un examen de l'étape de passage des variables. L'appel à PESetSelectionFormula semble fonctionner bien, et renvoie une valeur de 1, autant que je peux trouver nulle part indique la réussite. (L'autre rapport, qui fonctionne très bien à partir du code revient également 1).

Cependant, le rapport ne parvient pas à une erreur: Error Code: 534 - Error detected by database DLL. Le code, à des fins de débogage dumps la chaîne SQL actuellement utilisé par le rapport. Le SQL sortant du rapport est:

SELECT ... FROM ... 
WHERE

ORDER BY ...

Comme vous pouvez le voir, la clause WHERE est vide, que j'imagine est pourquoi la DLL de base de données est upchucking sur cette déclaration. Je ne comprends pas pourquoi la bibliothèque d'automatisation ne fixe pas la clause WHERE même si l'appel à PESetSelectionFormula est passé une chaîne valide et retourne le succès. Je pensais peut-être parce que je l'avais modifié manuellement SQL dans le rapport d'ajouter la table, il n'a pas d'ajouter, mais je l'ai fait la même chose dans l'autre rapport presque identique, et que l'on fonctionne très bien.

Quelqu'un a des idées pour lesquelles PESetSelectionFormula peut signaler le succès, mais pas faire quoi que ce soit?

P.S. Je l'ai déjà essayé de faire une Base de données> garantissez Database à partir des menus, et que ledit rapport était à jour et n'a pas aidé du tout.

Était-ce utile?

La solution 3

D'accord, ce qui est typique pourquoi je déteste juste Crystal Reports.

Mon patron est revenu de vacances, et le regarda, ... n'a rien fait, et maintenant il fonctionne. Il m'a montré exactement ce qu'il a fait, et il n'a pas changé quoi que ce soit ou de faire le rapport, seulement les mêmes étapes de débogage que j'avais pris, mais maintenant cela fonctionne comme par magie.

Je n'aime pas vraiment un logiciel qui arrête juste automagiquement et commence à travailler comme ça. Merci pour les idées.

Autres conseils

Je ne l'ai jamais utilisé PESetSelectionFormula , mais j'ai rencontré des problèmes d'importation de données autrement acceptable:

  1. utilise-t votre requête SQL finale des fonctions hors du commun, à savoir nz ()? Cristal ne reconnaît pas toujours les fonctions VB, IMHO.

  2. Avez-vous des valeurs NULL dans vos données importées qui créent des conflits?

  3. Après avoir recueilli vos données, vous pouvez le mettre dans une table temporaire et dire cristal pour ramasser les données de cette table temporaire? Si vous avez des problèmes avec # 1 ou # 2, cela peut être une bonne solution.

Dans certaines versions de CR, le PESetSelectionFormula ajoute la nouvelle valeur à la formule record sélection existante, dans d'autres versions, PESetSelectionFormula remplace la formule enregistrement sélection existante avec la nouvelle valeur.

Je ne me souviens pas quand cet interrupteur est survenu, mais il devrait être facile pour vous de déterminer quel comportement se produit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top