Bonjour à toutes et à tous.
Voila, je suis face à un problème de langues avec mon application. En effet, je dois gérer du multilinguisme au niveau de mon DataSet.
J'ai fait quelques recherches à ce sujet et j'ai vu qu'il y avait une propriété "Locale" au niveau du DataSet. Je pensais que cela aurait le même effet que la propriété Locale d'une Form (avoir dans ce cas autant de jeux SQL qu'il y a de langues) mais visiblement, cela n'a de l'effet que pour par exemple comparer des variables numériques dans la langues choisies (symbole décimale).
Donc, je me tourne actuellement vers une autre solution un peu moins élégante en voulant passer un paramètre "langue" à la méthode Fill de mon TableAdapter, mais je rencontre des problèmes à mettre cela en oeuvre.
La requête que j'utilise n'interroge pas directement une table, mais construit directement une liste de valeurs. Mais j'aurais de toute façon le même problème avec une requête sur une table.
Voici un exemple de requête (j'utilise une base de données Oracle et les langues à gérer sont le français et l'allemand) :
Lorsque je crée un TableAdapter avec cette requête, il me génère une méthode Fill sans paramètres, mais il y a pourtant bien un paramètre "lang" dans cette requête. Du coup, j'ajoute moi-même ce paramètre manuellement dans le designer du DataSet, mais à l'exécution il ne tient pas compte de mon paramètre. Ma méthode Fill a bien désormais un paramètre, mais on dirait que le mapping entre le paramètre de la fonction et le paramètre de la requête ne se fait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT 1 AS ID_TYPE, CASE WHEN :lang = 'de' THEN 'Type1_DE' ELSE 'Type1_FR' END AS LABEL FROM DUAL UNION SELECT 2 AS ID_TYPE, CASE WHEN :lang = 'de' THEN 'Type2_DE' ELSE 'Type2_FR' END AS LABEL FROM DUAL ORDER BY ID_TYPE
J'ai pensé que c'était parce que j'utilisais un même paramètre plusieurs fois dans ma requête, donc j'ai remplacé "lang" par "lang1" et "lang2" :
Mais cela ne change rien non plus, et le designer ne génère pas lui-même les paramètres. Du coup je les ajoute à la main mais là c'est pareil, on dirait que le mapping entre la fonction et la requête ne se fait pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT 1 AS ID_TYPE, CASE WHEN :lang1 = 'de' THEN 'Type1_DE' ELSE 'Type1_FR' END AS LABEL FROM DUAL UNION SELECT 2 AS ID_TYPE, CASE WHEN :lang2 = 'de' THEN 'Type2_DE' ELSE 'Type2_FR' END AS LABEL FROM DUAL ORDER BY ID_TYPE
J'obtiens l'erreur "ORA-01008: toutes les variables ne sont pas liées", et à un moment j'avais aussi ROW-00001, un problème de mémoire ? :-s
Je vais continuer à chercher de mon côté, mais si des âmes charitables pouvaient m'aider à élucider ce problème, ce serait super sympa :-)
Partager