begin process at 2012 02 09 03:51:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

[VBA Access] Fonction à intégrer dans une requête SQL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[VBA Access] Fonction à intégrer dans une requête SQL

vendredi 21 juillet 2006 à 15:52:57 | [VBA Access] Fonction à intégrer dans une requête SQL

observatoire

Bonjour,
Dans mon générateur de requête, je souhaite faire intervenir une fonction mathématique que j'ai créé dans le programme (ou plutôt que j'ai repris à partir d'un code du site : c'est le khi-deux). Pour des fonction existantes dans Access pas de problème :

MonSql = " Select ABS(Var1), Var2 From Table "

Mais là, ma fonction Chi2() de type :

Public Function Chi2(ByVal X As Double, ByVal df As Integer) As Double
...
End Function


ne fonctionne pas avec :

MonSql = " Select Chi2(Var1,1), Var2 From Table "

 ni même avec

X = Chi2(Var1,1)
MonSql = " Select " & X & ",Var2 From Table "


Auriez-vous la solution??
siou plait :-(

Observatoire 
vendredi 21 juillet 2006 à 16:01:39 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

pymaster

Bonjour, Bien le premier problème que je vois c'est que ta fonction est placé dans la partie SELECT de ton SQL et qu'elle retourne un Double ????? Je sais pas ce que tu veux faire avec cette fonction mais je ne pense pas que Access aime 2.5656 comme nom de champs. Par contre si tu veux afficher un nom de colonne avec un chiffre qui proviens d'une fonction de Math alors je ferrais plus MonSql = "SELECT '" & Chi2(Var1, 1) & "'", Var2 From Table " Comme ça ton Double va être pris comme un string ;) PY
vendredi 21 juillet 2006 à 16:06:17 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

observatoire

sauf que je ne veux pas identifier un nom de colonne avec ma formule, je pourrais très bien mettre un alias
(MonSql = " Select Chi2(Var1,1) as Alias, Var2 From Table ")
ce que je veux c'est créer une colonne qui me calcule à partir de la Var1 (comme paramètre) le Chi2()
vendredi 21 juillet 2006 à 16:34:04 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

BasicInstinct

Membre Club
ca marche sans probleme pour moi avec
MonSql = " Select Chi2(Var1,1) as Alias, Var2 From Table "

Mais il faut queVar1
soit bien defini comme un champ numérique.

++

BasicInstinct
vendredi 21 juillet 2006 à 16:51:00 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

observatoire

Et bien pour moi ça ne marche toujours pas.
On me dit "Fonction 'Chi2' non définie dans l'expression"
...?

Mon code est plus précisément sous la forme de requêtes imbriquées :

Sqltab2 = "SELECT tab1.var1 as khi2  FROM (" & Sqltab1 & ") AS tab1"

Sqltab3 = "SELECT tab2.khi2, Chi2(tab2.khi2,1) as ValeurP FROM (" & Sqltab2 & ") AS tab2 "

Public Function Chi2(ByVal X As Double, ByVal df As Integer) As Double
...
End Function

vendredi 21 juillet 2006 à 16:59:17 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

observatoire

par contre quand je fais :
Sqltab3 = "SELECT tab2.khi2, " & Chi2(tab2.khi2,1) & " as ValeurP FROM (" & Sqltab2 & ") AS tab2 "
il reconnaît bien ma fonction chi2, mais plus tab2.khi2
vendredi 21 juillet 2006 à 18:29:20 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

pymaster

Réponse acceptée !
reBonjour ! Je pense que j'ai peut-être trouvé une piste pour toi ou se situ ta fonction Chi2 ? De la manière dont tu en parle on dirait que ta fonction est public mais dans un form, car ton fonction est valide quand tu affecte ton sql dans tes variables mais pas quand Access roule la query de son bord. Si ce n'est pas le cas il faudrais que tu place ton fonction dans un module, alors Access pourrait y accédé sans faire d'erreur J'espère que j'ai trouvé une bonne piste PY
dimanche 23 juillet 2006 à 21:56:54 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

rvblog

Membre Club
Salut observatoire, salut à tous,

beaucoup d'énergie dans l'coin, je viens de trouver la source de la canicule, je crois :)

- d'abord, pymaster n'a pas forcément tort (même si je trouve que tu as fais pas mal de progrès, et que je doute que n'aies pas fait attention à la portée de ta fonction), donc vérifies ce qu'il dit, ce n'est pas bête du tout (utilises le générateur de requête d'Access, il possède un assistant pour écrire les expressions, et si c'est assistant voit ta fonction, le moteur SQL la verra aussi).

- essaies aussi d'ajouter un niveau d'imbrication, car il est possible qu'il soit trop tôt pour passer tab2.khi2 en argument à une fonction (d'ailleurs, essaies simplement de mettre "SELECT tab2.khi2, tab2.khi2 + 1) as ..." pour vérifier cette hypothèse).

- en ce qui concerne le MP que tu m'as envoyé, je crois que je n'ai pas bien compris la question.

à+

PS: pardon, je ne suis pas en grande forme, je suis très pris, sur un gros projet (avec plein de robots qui n'ont pas un sens de la conversation très aiguisé), et très fatigué, tiens, je ne sais même pas en quelle page on est :).
PS2: je répondrais quand même, bien sûr, mais pas promptement.

rvblogn
Je veux ton bien....et je l'aurais....mais jamais avant la page 4 des derniers échanges

lundi 24 juillet 2006 à 16:15:00 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

observatoire

j'avoue que je maîtrise assez mal tout ce qui sort des objets form ou tout ce qui concerne les "public" et "private". si vous pouviez m'expliquer un peu...
ça a l'air d'être en bonne voie, mais le programme bute sur un morceau du calcul, et j'ai peur de ne être à la hauteur!
lundi 24 juillet 2006 à 21:25:45 | Re : [VBA Access] Fonction à intégrer dans une requête SQL

rvblog

Membre Club

Salut observatoire,

pas à la hauteur, pas à la hauteur... qui est à la hauteur?
Ensuite, la peur dure plus longtemps que la douleur, donc pas de panique, fais-toi mal!

Allez, au boulot maintenant,
je ne suis plus sûr du contexte, mais il me semble que tu travailles sous Access.

Un formulaire est une classe, et peut exposer (publier) des propriétés ou des méthodes. Ces dernières peuvent être intégrées (car héritées de la classe formulaire, par exemple la propriété BackColor [que tu n'as pas déclarée toi-même, mais qui existe pourtant] ou la méthode Print [même combat]), et d'autres peuvent être déclarées par l'utilisateur (trice).

Un module est un ensemble conceptuel (parfois physique) de fonctions ou de variables, qui n'existe que pour répondre à un critère de qualité que l'on nomme la modularité, et qui sert donc (le plus souvent) à regrouper les fonctions et declarations d'un même domaine conceptuel (les entrées/sorties fichier, le dessin sur l'écran, la gestion des appels à l'API...).

Tous 2 font partie intégrante de l'application, mais certaines différences les condamnent à être différents :

-Tant que le formulaire n'est pas chargé, l'appel d'une de ses propriétés échoue. Ex : si tu exécutes l'instruction :
   BackColor = vbGreen
l'application ne sait pas de quel objet on parle, et ne peut pas exécuter l'instruction (enfin si, mais on ne sait pas où, on peut guetter, pour voir si quelque chose devient vert, mais à part mes commentaires, je ne vois pas :)).
Il en va de même pour ses méthodes. (la portée de ses propriétés/méthodes est dépendante du type de leur déclaration [Public lngMaCouleurDeFond As Long est visible de l'extérieur du formulaire (on dit de l'instance de l'objet, d'où "exposé" ou "publié"), Private m_lngMaCouleurDeFond As Long n'est visible que de l'intérieur du formulaire (on l'appelle un "membre", par opposition à un "attribut")], et leur durée de vie est celle du formulaire (en gros au début le formulaire est une classe [une description qui ne fait rien], ensuite on le charge et il devient une instance de classe [ou un objet], et on le décharge [on détruit l'instance de classe ou l'objet])).

- Dès que l'application s'exécute, toutes les variables déclarées dans un module standard occupent la mémoire et sont accessibles (leur portée est dépendante du type de déclaration [Public strMaVar As String est visible en dehors du module, et Private strMaVar2 As String n'est visible que dans le module], et leur durée de vie est celle de l'application).

Ton problème réside peut-être dans "l'endroit" où tu as déclaré ta fonction Chi2 (dans un formulaire, ou dans un module standard). Elle doit être publique, et dans un module standard pour pouvoir être utilisée à partir du moteur d'exécution SQL d'Access.

Simple, non?

dis nous,
à+

rvblogn
Je veux ton bien....et je l'aurais....mais jamais avant la page 4 des derniers échanges


1 2

Cette discussion est classée dans : access, fonction, requête, chi2, monsql


Répondre à ce message

Sujets en rapport avec ce message

ACCESS > Execution d'une fonction automatiquement [ par vbtom ] Bonjour, Est-il possible d'éxéxcuter automatiquement une fonction lorsqu'un nouvel enregistrement est cré?Si oui comment?Merci d'avance.@++ vbtom. Requêtes imbriquées [ par Luke ] Je désire faire avec VB6 une requête imbriquée qui ira dans Access 97 me chercher les infos demandées et les afficher. J'ai fait la requête facilement Requête, liste et bd Access [ par Nathalie ] Bonjour, Je fais une requête reliée à une base de données Access 2000. Je voudrais que lorsqu'un champ (dans mon cas c'est une liste déroulante à séle Ajouter une requête à ma base de donnée access depuis mon programme en VB [ par Jayjay ] J'aimerai ajouter une requête dans ma base de donnée access depuis mon programme en Visual basic (6)Comment faire ... avec create query ?help me! merc Besoin d'aide VB 6.0 et BD Access 97 [ par DaGreat ] Bonjour j'ai une base de données faite en Acces (suite office 97) et j'aimerais bien y effectuer des requête SQL venant de mon logiciel Visual Basic 6 Access 2000 Critère requête [ par Léon ] Comment utiliser une variable Public comme critère de requête dans Access 2000 ?Merci de votre aide ADO et requête access avec parameteres [ par wels02 ] Comment on peut ouvrir une requete access qui porte un parametre avec visual basic en utilisant ADOMerci! Access et requête [ par jpp ] Dans acces, j'aimerais savoir comment, dans une requête dirigée sur une autre requête,extraire les 18 premiers enregistrements ou les 18 enregistremen Requête Sous Access [ par pollux ] Quelles sont les commandes pour executer des requêtes sous access en les écrivans à partie de VB.Du StyleSELECT UtilisateurFROM TableUtilWHERE N°Util Liens Access Exel [ par caro ] Bonjour,Je voudrais automatiquement en lancant une requête sous Access que le résultat de cette requête soit directement transféré sous Excel et trans


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,354 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales