Bonjour à tous,
Dans mon application, j'ai à charger des états Cystal Reports de façon dynamique. Ces derniers sont déjà créé et stocké dans un répertoire avec la mise en page, la connexion aux données, etc...
Le problème est que les contraintes de sécurité de mon application font que je ne peux pas laisser l'état se connecter à sa source de données comme un grand, et que je dois savoir ce dont il a besoin (sa requête définie), récupérer ces données et les lui fournir.
J'ai trouvé une solution lorsque la requête SQL de l'état est sous forme d'un select :
Ainsi je récupère bien ma requête SQL de type SELECT, et je peux l'exécuter dans mon code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //on récupère la requête SQL définie dans le fichier de Report string selectQuery = "SELECT "; string fromQuery = "FROM "; foreach (Table table in report.Database.Tables) { foreach (DatabaseFieldDefinition field in table.Fields) { selectQuery += string.Format("{0}.{1}, ", table.Name, field.Name); } fromQuery += string.Format("{0}, ", table.Name); } selectQuery = selectQuery.Remove(selectQuery.Length - 2); fromQuery = fromQuery.Remove(fromQuery.Length - 2); string sqlQuery = string.Format("{0} {1}", selectQuery, fromQuery);
Le problème se pose quand la requête de l'état se base non plus sur un SELECT sur une table/vue, mais sur l'éxecution sur une procédure stockée. Car le nom de la procédure se retrouve, dans mon bout de code ci-dessus, en nom de table, et je n'arrive pas à dissocier le fait qu'il s'agisse d'une requête de type SELECT table/vue ou EXEC procédure stockée.
Existe t'il un moyen de récupérer directement via les classes et méthodes des assemblys CrystalDecisions.xxx la requête SQL telle qu'elle est définie dans le report.
Merci
Partager