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 -
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 & "#));"
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:
- Parametre pour SQL dans VBA
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Parametre windows - Guide
- Netflix paramètre compte - Guide
- Parametre usine chromecast - Guide
10 réponses
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...)
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...)
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.
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.
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...
fais un R_SHI.movelast avant et ensuite tu pourras tester le nombre d'enreg...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
re
ta rquete sql en vba n'est pas bonne non !!!!
c impossible a realiser une requete select en vba !!!!
ta rquete sql en vba n'est pas bonne non !!!!
c impossible a realiser une requete select en vba !!!!
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.
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.