2010-01-28 9 views
0

La société pour laquelle je travaille utilise MacolaES pour un système ERP. La base de données SQL Server est structurée de sorte que lorsque les éléments ne sont plus considérés comme actifs, ils sont déplacés d'un ensemble de tables "actives" vers un ensemble de tables "historiques". Cela permet de garder les tables "actives" suffisamment petites pour que les requêtes reviennent rapidement. D'un autre côté, les tables d'histoire sont énormes. Les colonnes appropriées sont indexées dans ces tables, et si vous recherchez quelque chose de spécifique, elles retournent rapidement.Requêtes paramétrées par Crystal Reports

Le problème est lorsque vous créez un rapport Crystal, qui invite l'utilisateur à entrer un paramètre. Pour des raisons que je ne connais pas, les paramètres Crystal ne sont pas traduits en paramètres SQL, donc vous finissez avec des requêtes en sélectionnant tout depuis la table d'historique des en-têtes de commande jointe à tout dans la table d'historique des lignes de commande.

Existe-t-il un moyen d'obtenir que Crystal Reports utilise les paramètres dans la requête SQL au lieu de charger tous les enregistrements et de filtrer après le fait? J'ai lu quelque part qu'une procédure stockée devrait fonctionner, mais je suis curieux de savoir si une requête paramétrée ordinaire est possible dans le but de gagner du temps.

Voici la formule de sélection:

(
    trim({Orderheader.ord_no}) = {?Order No} 
) 
and 
(
    {Orderheader.ord_type} = 'O' 
) 
and 
(
    {orderlines.ord_type} = 'O' 
)
+0

Cela dépend du type de formule de sélection d'enregistrement et s'il peut être converti en sql where clause. Utilisez-vous des opérateurs spéciaux qui ne traduisent pas en sql comme 'if' ou une fonction crystal? – dotjoe

+0

Non, il suffit d'utiliser boolean AND. – Scott

+0

Avez-vous essayé d'enlever la garniture de votre formule? –

Répondre

3

Dans Crystal Reports Menu principal Aller au Rapport/Formules de sélection/Enregistrer ... Vous pouvez y ajouter une formule similaire à:

{table.field1} = {?Parameter1} and {table.field2} = {?Parameter2} 

Ce ajoutera la condition à l'instruction where de la requête SQL que le rapport utilisera pour extraire les lignes.

Pour vérifier quelle est la condition dans l'instruction where utilisée par le rapport pour extraire les données, vous pouvez accéder à la base de données du menu/Afficher l'instruction SQL. De cette façon, vous pouvez vérifier que le rapport utilise les paramètres du filtre.

Crystal Reports 8.5 Guide de l'utilisateur mentionner les conseils suivants:

Pour pousser la sélection d'enregistrements, vous devez sélectionner « Utiliser les index ou le serveur pour Speed ​​» dans la boîte dialogue Options du rapport (disponible sur le Menu Fichier).

Dans les formules de sélection d'enregistrements, évitez les données conversions de type sur les champs sans champs de paramètre. Par exemple, évitez d'utiliser ToText() pour convertir un champ de base de données numérique en champ de base de données de chaîne .

Vous pouvez appliquer certaines formules de sélection d'enregistrements qui utilisent des expressions constantes.

Votre formule a une fonction TRIM sur un champ. La fonction par rapport au champ ne permet pas à Crystal de pousser la formule dans la base de données car elle n'est pas une expression constante.

Si vous avez vraiment besoin de découper le champ du numéro de commande, vous devez le faire en utilisant SQL Expressions.

Références: Consultez ce article.

+0

J'ai un paramètre, mais il n'apparaît pas dans l'instruction SQL. – Scott

+0

J'ai effectué un test dans mes Crystal Reports et j'ai mis les conditions dans l'instruction where. J'utilise Crystal 9. Quelle version de Crystal utilisez-vous? Je suis allé aux options de fichier/rapport et ceci est vérifié dans mon rapport: Le serveur de base de données est insensible à la casse, aux index d'utilisateur ou au serveur pour la vitesse, à l'arbre de groupe de création. Lesquels avez-vous vérifié? –

+0

Nous utilisons la version 8.5. Les éléments suivants sont cochés dans l'écran Options du rapport: Convertir NULL en valeur par défaut, traduire les chaînes DOS, traduire les mémos DOS, utiliser les index ou le serveur pour la vitesse, plus de messages d'erreur du moteur de rapport, données SQL insensibles à la casse, créer l'arborescence du groupe et afficher les alertes lors de l'actualisation. – Scott