Parametre pour SQL dans VBA

Résolu/Fermé
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016 - 23 déc. 2009 à 14:50
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016 - 14 janv. 2010 à 11:42
Bonjour,
Cela fait deux jours que je me casse la tête sur un problème.

Afin de remplir une table, j'effectue deux requêtes différentes.
La première me fournis l'ensemble des infos nécessaires et surtout un couple (produit, date) qui doit me servir de paramètre de recherche dans la seconde (requête).
Lorsque je fait la recherche en manuel, j'obtiens mon résultat = OK.

Afin de l'automatisé, j'ai inclue ma seconde requête dans mon code VBA. Là, plus de réponse, c'est systématique. Je pense que cela viens de la traduction SQL directe en SQL VBA, avec l'insertion des & et " qui me bugg. Seulement, a force d'avoir le nez dans le guidon...on ne voie plus la route!

Je pense qu'un œil neuf verra de suite là où ca fait mal ;)

D'avance, merci de votre aide.

Ci après, les deux requêtes:
SQL =>
SELECT Shippement.Qte FROM shippement WHERE ((Shippement.Unites =Product) And (Shippement.Date = MoisEnCours));
VBA=>
SQL = "SELECT Shippement.Qte FROM shippement WHERE ((Shippement.Unites = " & R_GAR.Product & ") And (Shippement.Date = #" & MoisEnCours & "#));"

A voir également:

10 réponses

blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
23 déc. 2009 à 15:15
Salut,

comment passes-tu ta commande SQL en VBA ?

As-tu un message d'erreur ?

Parce qu'une requête de type 'selection' ne passe pas en docmd.runsql... Seules les requêtes de type 'action' passent (UPDATE, DELETE, INSERT...)
0
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016
23 déc. 2009 à 15:27
Je fais un currentdb().openrecordset(SQL) avec SQL qui est ma variable de type string et qui intègre directement les valeur des paramètres.
Je l'ai déjà utiliser dans d'autres bases et cela fonctionne. Je n'ai pas de message d'erreur.
Je te donne la suite du code:

Set R_SHI = CurrentDb().OpenRecordset(SQL)

If R_SHI.RecordCount <> 0 Then
R_SHI.MoveFirst
T_SQL.Exp = R_SHI.Qte
R_SHI.Close
End If

Et mon chargement de T_SQL.Exp est toujours vide car le if est toujours faux.
Je sais que certain cas je n'ai pas de réponse (c'est normal, nous ne nous chargeons pas de tout les produits sur le site de Montpellier). Donc dans certain cas, après des test manuel, j'obtiens une réponse qui n'apparait plus depuis que je le fais en VBA.
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
23 déc. 2009 à 15:34
Le recordcount n'est renseigné qu'après un movelast...

fais un R_SHI.movelast avant et ensuite tu pourras tester le nombre d'enreg...
0
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016
23 déc. 2009 à 15:54
Désolé, mais là, j'ai une erreur 3021 = pas d'enregistrements!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
23 déc. 2009 à 21:09
oulala !!!

alorss je serais toi je ferais une requete count pour :R_SHI.RecordCount

select count(...... as comptede_R_SHI) from .....

ensuite:

dim db as database
dim rs as recordset
set db = currentdb

set rs= db.openrecordset" requete count"
with rs
if not .EOF then
ta_variable = !comptede_R_SHI
end if
end with
puis:
If ta_variable <> 0 Then
R_SHI.MoveFirst
T_SQL.Exp = R_SHI.Qte
R_SHI.Close
End If


voila si besooin hesite pas
0
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016
24 déc. 2009 à 07:32
En relisant tout cela, je viens de me rendre compte que je n'étais pas super clair hier, après-midi.

L'erreur 3021 apparait sur la ligne contenant le movelast. Ce qui ce comprend puisque nous devions être dans un cas où il n'y a pas de réponse.

Concernant la réponse de MOICED59 je comprend la manip. Mais cela me fait exécuter une requête, sur une requête. Je trouve cela un peu lourd, d'autant plus que mes infos d'origine vont grossir de plus en plus. Alors l'exécution de cette fonction va prendre de plus en plus de temps, pour les utilisateurs, c'est moyen.

Vous êtes sur que mon SQL pour le VBA est juste! Je ne sais pas pourquoi mais je reste persuadé que mon erreur est dans cette ligne, mais je ne la vois pas.

En tout cas merci pour vos interventions à tous. Je continue mes recherches.
Si quelqu'un trouve la faille, faite le moi savoir.

Bonnes fêtes à tous
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
24 déc. 2009 à 13:00
re

ta rquete sql en vba n'est pas bonne non !!!!
c impossible a realiser une requete select en vba !!!!
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
26 déc. 2009 à 16:38
si, mais on ne la l'exécute pas avec un runsql, mais via un recordset...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
26 déc. 2009 à 17:18
dc ce nest pas une rrequete sql !!!!
mais un recordset!!!
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
26 déc. 2009 à 18:41
un recordset peut avoir comme source une requête...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
26 déc. 2009 à 18:58
oui je suis d'accord pas de souci la dessus!!!!
0
maol Messages postés 34 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 28 mars 2016
14 janv. 2010 à 11:42
Salut à tous et Bonne année...

Après une petite interruption du travail, je suis revenu sur mon problème.

Voici la solution que j'ai trouvé: Les résultat du recordset sont toujours vide car le trie sur la date n'est pas au même format!
Un date est traitée jj/mm/aaaa et l'autre au format US. Grâce au changement d'année, j'ai eu un résultat car Janvier (mois 01) = le premier (01 aussi !).

Ainsi, pour ceux qui sont confronté au même problème, dans l'instruction SQL, j'ai utilisé ceci:

... (Shippement.Date = #" & Format(MoisEnCours, "mm/dd/yyyy") & "#) ...

Parce que ma date de la table Shippement a ce format là.

Merci à tous ceux qui ont participé,
C'est toujours rassurant de ce savoir écouter quand on a un problème.
0