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

Requêtes et SQL. Discussion :

Requête ajout sur tables liées à partir de tables liées [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 56
    Points : 46
    Points
    46
    Par défaut Requête ajout sur tables liées à partir de tables liées
    Bonjour à tous !

    Je me tourne vers vous car je n'arrive pas à trouver de solution "solide" à mon problème. Peut être que vous pourriez m'aider ?

    Voici le cadre : je voudrais pouvoir créer une commande à partir d'un devis. J'ai une table T_devis (clé primaire ID_devis) et une table T_devis_lignes qui contient les infos sur les articles contenus dans le devis, liée à la table T_devis par le champ ID_devis. La partie "Commandes" est concue de la même facon que la partie "Devis", une table T_commande et une table liée T_commande_lignes. A partir de mon formulaire F_devis qui m'affiche les infos du devis et les lignes associées (grâce à un sous formulaire), j'ai un bouton pour créer une commande à partir de ce devis.

    J'ai crée une requête ajout (R_CDE_DP) qui crée un nouvel enregistrement dans ma table T_commande, à partir de la table T_devis, pour le devis affiché dans le formulaire, puis j'ouvre mon formulaire F_commande sur le dernier enregistrement crée. Jusqu'ici tout fonctionne bien. Voici le code VBA associé à mon bouton, qui n'est pas terminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub btn_commander_Click()
    Dim ID_CDE
    DoCmd.OpenQuery "R_CDE_DP"
    DoCmd.OpenForm "F_commande", acNormal, , , acFormEdit, acWindowNormal
    DoCmd.GoToRecord acDataForm, "F_commande", acLast
    End Sub
    une fois sur le dernier enregistrement, dans mon formulaire, je peux récupérer facilement mon ID_commande qui vient d'être crée et l'utiliser pour faire ma requête ajout sur les lignes. (faire une requête ajout dans la table T_commande_lignes avec le champ ID_commande ainsi défini). Voici comment je voyais les choses...

    Le problème c'est que je suis en multi utilisateurs, j'ai peur que le "gotorecord" envoie mon utilisateur 1 sur une commande qui vient d'être crée par mon utilisateur 2 ! C'est en cela que je dis que ma solution ne me parait pas "solide" ! Car la récupération de la clé primaire se fait sur le fomulaire, après la requête. Ainsi j'ai peur d'associer des lignes de commandes de ma commande1 à la commande2.

    La question est donc de savoir récupérer la bonne valeur de ID_commande créee par la première requête ajout pour être sur d'ajouter correctement mes lignes ? Faudrait il faire une "Grosse" requête qui ajouterait les enregistrement dans les deux tables presque "simultanément" ?

    Sinon j'ai une question subsidiaire, comment pourrais-je récupérer la valeur du ID_commande crée pour l'utiliser en VBA ? J'ai trouvé dans la FAQ ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select @@identity From maTable;
    , mais comment utiliser en VBA le résultat de ce code SQL ?

    J'espère que mon explication est assez claire, et que vous comprenez quelles sont mes craintes par rapport à cela...

    Merci d'avance pour l'aide que vous pourrez m'apporter !

    Bien cordialement,

    Pierre

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Bon vu que je devais avancer, j'ai finalement fait comme cela :
    un peu déçu d'avoir du mettre mon code SQL de la requête ajout dans lequel "j'insère" mon paramètre, mais je n'ai pas trouver le moyen d'appeller ma requête par son nom (genre docmd.openquery "R_CDE_DP_lignes") et de lui affecter le critère, du coup si je dois modifier ma requête sous access je dois aller modifier le code SQL en vba ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub btn_commander_Click()
    Dim ID_CDE
    DoCmd.SetWarnings False 'Empêche les demande de confirmation de s'afficher
    DoCmd.OpenQuery "R_CDE_DP"
    ID_CDE = DMax("ID_commande", "T_commande")
    'ci dessous : execute la requete ajout R_CDE_DP_lignes avec le paramètre ID_CDE pour remplir le champ [ID_commande]
    DoCmd.RunSQL ("INSERT INTO T_commande_lignes ( ID_commande, IDArticle, ID_ouvrage, ID_ensemble, [Quantité commandée], Unité, [Prix unitaire], [Référence article fournisseur], [Nombre d'articles], N°_ligne_dans_cde, [Commentaire sur la ligne] ) SELECT " & ID_CDE & " AS Expr1, T_dem_prix_lignes.IDArticle, T_dem_prix_lignes.ID_ouvrage, T_dem_prix_lignes.ID_ensemble, T_dem_prix_lignes.Quantité, T_dem_prix_lignes.Unité, T_dem_prix_lignes.[Prix unitaire], T_dem_prix_lignes.[Référence article fournisseur], T_dem_prix_lignes.[Nombre d'articles], T_dem_prix_lignes.N°_ligne_dans_DP, T_dem_prix_lignes.[Commentaire sur la ligne] FROM T_dem_prix_lignes WHERE (((T_dem_prix_lignes.[Prix consolidé])=True) AND ((T_dem_prix_lignes.ID_dem_prix)=[Formulaires]![F_dem_prix]![ID_dem_prix]));")
    DoCmd.SetWarnings True 'Retablit les confirmations
    DoCmd.OpenForm "F_commande", acNormal, , "[ID_commande] = " & ID_CDE, acFormEdit
    Form_F_commande.Code_commande = "C" & "-" & Form_F_commande.[Code affaire] & "-" & Form_F_commande.ID_commande 'Genèse du code de la nouvelle commande
    End Sub
    Mais bon le principal est que cela ait l'air de fonctionner ! Si vous avez des pistes pour appeller la requête et lui affecter le paramètre je suis preneur ! Merci en tout cas à ceux qui ont regardé mon problème !

    Pierre

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

Discussions similaires

  1. [AC-2010] Requête ajout sur plusieurs tables
    Par kilowkami dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/10/2019, 17h32
  2. [AC-2010] Pb :Requête ajout sur formulaire indépendant
    Par clickandgo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/01/2017, 14h01
  3. Requête Ajout sur Access
    Par francois.mv dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/05/2012, 18h02
  4. Réponses: 12
    Dernier message: 30/10/2008, 04h12
  5. Pb: Update table A à partir de table B via table C
    Par Alexandre_P dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/08/2007, 17h39

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