|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
Bonjour,
j'ai parcouru pas mal de discussions et l'aide Access, y compris l'aide en ligne, mais je ne trouve pas de réponse à ma question : y a-t-il moyen d'écrire des fonctions d'agrégation personnalisées pour l'utiliser dans des requêtes écrites en SQL et interprétées par Access ? Je ne sais pas si j'ai bien formulé ma question... Je ne sais pas si écrire une fonction en VBA dans un module est possible, si écrire une fonction en SQL est possible, ou autre chose. Si je travaillais sous MS SQL Server 2005, la solution des agrégats CLR user-defined serait visiblement bonne pour moi. Existe-t-il des technologies qui s'appliquent à ACCESS ? http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx J'ai trouvé dans un post datant de 2006 où on disait que SQL Server 2005 était le seul SGBD qui proposait cette fonctionnalité... Si vous avez la réponse / une partie de la réponse, merci d'avance !! Je continue les recherches de mon côté... |
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Salut,
si tu souhaites savoir si on peut appliquer une fonction développée en VBA à un champ dans une requete Access, la réponse est oui Typiquement en déclarant une fonction de portée Public comme Code :
Code SQL :
SELECT ChampA, Piou(ChampA) AS Pioupi FROM MaTable GROUP BY ChampA;
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
||
|
10
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
Bonjour, merci pour ta réponse JPCheck.
ok merci pour l'éclaircissement. Ta fonction Piou prend un string en argument. Quand on lance ta requête, on GROUP BY ChampA, on se retrouve avec un argument unique par enregistrement pour ChampA et utiliser Piou a un sens. Mais je pensais plutôt au cas où on fait un GROUP BY ChampA et on souhaite, par exemple, calculer SUM(ChampB), où ChampB serait du bon type. Ca marcherait aussi pour Piou si ChampB est un champ de type string ? Code :
SELECT ChampA, Piou(ChampB) AS Pioupi FROM MaTable GROUP BY ChampA; |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
Bonjour,
je peux donner une précision supplémentaire : à l'édition d'une requête, lorsqu'on utilise le générateur d'expression Access, on peut 'browser' les expressions toutes prêtes à l'usage par les trois fenêtres "éléments d'expression", "catégories d'expressions" et "valeurs d'expression". Or c'est dans 'Fonctions > fonctions intégrées' puis 'Regroupement SQL' qu'on trouve des fonctions qui peuvent être utilisées comme au-dessus. Qu'on-t-elles de spécial ? Peut-on voir comment elles sont codées ? ... J'ai comme la sensation que la réponse à ma question est 'non, pas en VBA' mais je continue de chercher les infos. A plus tard ! |
|
|
00
|
|
|
#5 | ||||
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
En imaginant que je sache que je veuille faire une opération sur la population de [ChampB] de la table [MaTable] après un regroupement sur [ChampA], je peux écrire une fonction, sorte de sous-requête, qui fait ce qu'il faut. Je me suis largement inspiré d'un morceau de code trouvé sur la FAQ pour écrire :
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | |
![]() ![]() |
salut,
Citation:
)Il faut savoir quelle question tu nous poses exactement vis à vis de groupe by
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
Ok désolé, mon vocabulaire n'est peut-être pas adapté... quand tu dis qu'elle est fonctionnelle, tu joues sur les mots ? Parce qu'Access refuse de la faire fonctionner : "Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifique Piou([ChampB]) comme une partie de la fonction d'agrégat"
Je reformule ma question : dans Access il y a une petite dizaine de fonctions intégrées qui peuvent faire qu'une requête comme ça rende un résultat : Code :
SELECT ChampA, CALCUL(ChampB) AS ChampB_CALCUL FROM MaTable GROUP BY ChampA; |
|
|
00
|
|
|
#8 |
![]() ![]() |
Dans une base test, ca marche très bien
Donc oui la fonction est possible
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
tiens tiens
, je vais refaire des essais de mon côté alors...juste pour être sûr, tu proposais Code :
SELECT ChampA, Piou(ChampA) ... GROUP BY ChampA Code :
SELECT ChampA, Piou(ChampB) ... GROUP BY ChampA |
|
|
00
|
|
|
#10 |
![]() ![]() |
auquel cas il faut effectivement faire un GROUP BY aussi sur ton second champs
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
|
00
|
|
|
#11 |
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
je crois que dans ce cas; le résultat n'est pas le même ; je pense que ça va renvoyer possiblement plusieurs lignes...
Si MaTable est, par exemple ChampA (integer) | ChampB (string) : 1 | a 1 | ab 1 | ad 2 | a 2 | a 2 | a Si je fais ce que tu dis, la requête renvoie 1 | 1 1 | 2 2 | 1 Mais je souhaite obtenir quelque chose 'du genre' : 1 | Piou(a,ab,ad) 2 | Piou(a,a,a) en tout cas un tableau de données à deux lignes. |
|
|
00
|
|
|
#12 |
![]() ![]() |
Ah, mais s'il s'agit de concaténer les lignes, on passe directement par une solution proposée dans la
![]() http://access.developpez.com/sources...QLLigneColonne
__________________
Pas de question technique par MP, je ne réponds pas ![]() Mon perso ? Une vraie brute Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access |
|
00
|
|
|
#13 | ||||||
|
Nouveau Membre du Club
![]() Inscription : mars 2010 Messages : 40 ![]() |
merci pour le lien, je m'en suis servi ; j'ai ajouté en arguments
* le nom de la source de données * les champs (la clé de regroupement, le champ à concaténer) l'idéal serait qu'on puisse 'lire' la donnée FROM de la requête depuis laquelle la fonction est appelée : Code :
Code :
1 | a ab ad 2 | a a a il manque la gestion des erreurs etc. et les pbs liés au types. Mon rêve ce serait de pouvoir écrire, pour le même résultat, un truc comme ça : Code :
|
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com