Parametre pour SQL dans VBA

Résolu
maol Messages postés 39 Statut Membre -  
maol Messages postés 39 Statut Membre -
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 & "#));"

Configuration: Windows XP MC
Firefox
Kaspersky 7

10 réponses

  1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  2. maol Messages postés 39 Statut Membre
     
    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
  3. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  4. maol Messages postés 39 Statut Membre
     
    Désolé, mais là, j'ai une erreur 3021 = pas d'enregistrements!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. moiced59 Messages postés 1161 Statut Membre 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
  7. maol Messages postés 39 Statut Membre
     
    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
  8. moiced59 Messages postés 1161 Statut Membre 60
     
    re

    ta rquete sql en vba n'est pas bonne non !!!!
    c impossible a realiser une requete select en vba !!!!
    0
    1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      si, mais on ne la l'exécute pas avec un runsql, mais via un recordset...
      0
  9. moiced59 Messages postés 1161 Statut Membre 60
     
    dc ce nest pas une rrequete sql !!!!
    mais un recordset!!!
    0
    1. blux Messages postés 2049 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      un recordset peut avoir comme source une requête...
      0
  10. moiced59 Messages postés 1161 Statut Membre 60
     
    oui je suis d'accord pas de souci la dessus!!!!
    0
  11. maol Messages postés 39 Statut Membre
     
    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