Parametre pour SQL dans VBA

Résolu
maol Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
maol Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
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 27131 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
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   Statut Membre Dernière intervention  
 
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 27131 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   60
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   60
 
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 27131 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
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   Statut Membre Dernière intervention   60
 
dc ce nest pas une rrequete sql !!!!
mais un recordset!!!
0
blux Messages postés 27131 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
un recordset peut avoir comme source une requête...
0
moiced59 Messages postés 1145 Date d'inscription   Statut Membre Dernière intervention   60
 
oui je suis d'accord pas de souci la dessus!!!!
0
maol Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
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