IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

lancer une requête sur plusieurs enregistrement [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut lancer une requête sur plusieurs enregistrement
    Salut à vous,

    j'ai besoin en appuyant sur un bouton pour cloturer une vente de copier un champ dans un autre champ de l'enregistrement.

    j'ai donc une table "sortie" avec des articles vendues que je place dans une table "détail sortie" qui est jointe à la première.

    Pour le moment dans mon formulaire quand je clique sur le bouton il exécute bien la requete mais uniquement sur la dernière ligne, hors j'aimerais qu'il le fasse pour toutes les lignes de mon sous-formulaire de ma table "détail sortie"

    vous avez une idée ?

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Une requête traite un ou plusieurs tuples, encore faut-il pouvoir les identifier.

    Par exemple ici on met à jour le champ Nom avec le contenu de Nom et Prenom mais uniquement pour les enregistrements ayant l'Id égal à 10 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Contacts SET Contacts.Nom = [Nom] & " " & [Prénom]
    WHERE (((Contacts.ID)=10));

    Il est donc primordial d'utiliser des Id dans les tables, ça facilite ainsi le filtrage.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    j'ai une clé primaire pour mes sorties mais pas pour mes détails sortie.

    voici comment ça se présente :

    table "sortie" avec :

    N°Sortie : clé primaire
    Date

    table "détail sortie" avec :

    #Sortie : lien avec clé primaire de table "sortie"
    Article
    Quantité
    Prix

    Prix de vente : c'est dans ce champ que la valeur de "prix" doit être copiée lors qu'un clic.

    Et sur mon formulaire : un box "temp" qui reçoit le numéro de sortie "N°Sortie".

    Peux-tu m'aider a adapter ton code, c'est un peu confus.

    merci

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Tu peux créer du code VBA contenant cette requête et ainsi compléter les variables (valeur, idcourant) avec les valeurs requises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim valeur as currency
    dim idcourant as long
     
    valeur = me.prix
    idcourant = me.idsortie
     
    currentdb.execute "UPDATE TableAmettreAjour SET TableAmettreAjour.champAmettreAJour = " & Valeur & " WHERE (((TableAmettreAjour.IDsortie)=" & idcourant &"));"
    me indique que les valeurs viennent du formulaire contenant les controles prix et idsortie. Si tu exécutes d'un endroit différent (sous-formulaire) il faut modifier le me en conséquence.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    j'ai droit à une erreur 3144 : Erreur de syntaxe dans l'instruction UPDATE.

    J'ai pourtant l'impression d'avoir bien compléter le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim valeur As Currency
    Dim idcourant As Long
     
    valeur = Form![SF_Détail_Vente]![PTVAC]
    idcourant = Me.Test_N°Sortie
     
    CurrentDb.Execute "UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = " & valeur & " WHERE (((T_Détail_Sortie.#Sortie)=" & idcourant & "));"

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Il faut déboguer la requête au moment de son exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim vlsql as string
    vlsql="UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = " & valeur & " WHERE (((T_Détail_Sortie.#Sortie)=" & idcourant & "));"
    debug.print vlsql
    currentdb.execute vlsql
    à voir dans la fenêtre d'exécution le résultat du debug.print.
    Il y a un tuto sur le débogage des requêtes dans VBA.
    Personnellement j'évite de mettre des caractères cabalistiques (# et espace) dans les noms de champs. ça évite les grosses surprises.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    voici le résultat

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = 2,42 WHERE (((T_Détail_Sortie.#Sortie)=437));
    UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = 4,84 WHERE (((T_Détail_Sortie.#Sortie)=437));
    UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = 4,84 WHERE (((T_Détail_Sortie.#Sortie)=437));
    UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = 4,84 WHERE (((T_Détail_Sortie.#Sortie)=437));
    UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = 4,84 WHERE (((T_Détail_Sortie.#Sortie)=437));

  8. #8
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut Pb de décimal
    Bonsoir,

    Le problème de la clause SQL est du en partie au séparateur décimal.
    En SQL c'est le .
    La virgule sert à séparé la liste des champs soit a afficher soit à mettre à jour.
    Dans ton cas, il faut que tu utilise la fonction replace() qui va te permettre de remplacer la virgule par le "."

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim vlsql as string
    vlsql="UPDATE T_Détail_Sortie SET T_Détail_Sortie.[Prix de sortie TVAC] = " & replace(valeur,",",".") & " WHERE (((T_Détail_Sortie.#Sortie)=" & idcourant & "));"
    debug.print vlsql
    @+


    Pensez au tag

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2013
    Messages : 136
    Points : 63
    Points
    63
    Par défaut
    c'est tout bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "UPDATE R_Détail_Vente SET R_Détail_Vente.[Prix de sortie TVAC] = R_Détail_Vente.[PTVAC] WHERE R_Détail_Vente.[#Sortie] = " & (Me.Test_N°Sortie)


    merci de m'avoir éclairé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/02/2013, 14h24
  2. Réponses: 5
    Dernier message: 10/02/2008, 20h33
  3. [MySQL] Affichage des résultats d'une requête sur plusieurs pages
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/10/2006, 13h24
  4. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20
  5. faire une requête sur plusieurs tables
    Par julien.63 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 16/08/2006, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo