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 :

Message d'erreur lors de l'execution d'une requête ajout en VBA


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut Message d'erreur lors de l'execution d'une requête ajout en VBA
    Bonjour à toutes et à tous,

    Encore une fois j'ai cherché un peu sur tous les forums, qui m'ont bien aidée jusqu'à maintenant, mais là je sèche un peu... Je fais dc appel aux experts, pour un petit coup de pouce!!

    Voilà mon Problème:
    J'ai une table avec une liste de produit du style:

    ID Nom_Produit
    1 Test
    2 Test1

    Cette table est relié à 5 autres tables, dont en voici une en exemple:
    ID Nom_Produit Process Poids Unité
    1 Test usinage 3 g
    2 Test Fraisage 4 g
    3 Test1 Tournage 3 g
    4 Test1 Usinage 4 g
    5 Test1 Fraisage 5 g

    Ce que je cherche à faire c'est copier coller par exemple les données de mon produit Test pour l'enregistrer sous un autre nom. Le but est de faire des comparaison par exemple pr le produit Test1 avec seulement une donnée (ou plusieurs) qui change(nt).
    Au final je voudrais obtenir ça:
    ID Nom_Produit
    1 Test
    2 Test1
    3 Test2 (basé sur Test par ex)

    Cette table est relié à 5 autres tables, dont en voici une en exemple:
    ID Nom_Produit Process Poids Unité
    1 Test usinage 3 g
    2 Test Fraisage 4 g
    3 Test1 Tournage 3 g
    4 Test1 Usinage 4 g
    5 Test1 Fraisage 5 g
    6 Test2 usinage 3 g
    7 Test2 Fraisage 4 g


    J'aimerai donc que lorsque je copie/colle le nouveau produit basé sur un produit existant, que toutes les tables copient et collent également tous les enregistrements du produit existant sous un autre nom, afin de conserver l'enregistrement original.

    Suite à plusieurs recherchent, je me suis dis qu'il fallait faire le copier/coller manuellement pour toutes les tables. Je ne pense pas qu'il soit possible de faire un copier/Coller général, même si mes tables sont liées... J'ai donc cherché dans cette voie là, mais je n'arrive toujours pas à mes fins!

    Sur internet j'ai trouvé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO gamme 
    SELECT T1.Compteur AS Compteur, "y" AS Référence, 
           T1.[N° Phase] AS "N° Phase", 
           T1.Opération AS Opération, T1.Description AS Description, 
           T1.Illustration AS Illustration 
    FROM gamme T1 
    WHERE T1.Référence="x";
    que j'ai essayé d'adapter à ma base, mais je ne dois pas comprendre le principe, car ça me créer une autre colonne, et ne me rajoute rien dans ma table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Table_test ( Nom )
    SELECT "cc" AS Expr1, *
    FROM Table_test
    WHERE (((Table_test.Nom)="aa"));
    Ensuite j'ai vu dans les FAQque l'on pouvait utiliser une méthode DAO.J'utilise le DAO déjàpour faire des enregistrements ds mes tables lorsque je suis sur un formulaire. Je pensais donc que je pouvais m'en sortir, mais là encore Access n'a pas plié devant moi!!!

    Je voudrais donc savoir si je suis sur la bonne voie et si vous pouviez me donner des conseils ou un coup de pouce, s'il vous plaît! Car je me dis qu'il me manque peut-être déjà la bonne logique pr faire ce que je souhaite.

    Merci d'avance pour vos conseils!

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut "Trop peu de paramètre. 2 attendu" lorsque je lance la requête action
    Bonjour à tous,

    Finalement j'ai réussi à réaliser ma requete de copier/coller

    Voilà ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO Tbl_Material ( [Product Name], [Material Category], [Material Group], Weight, Recycling, [Percentage recycling], [Weight recycling], Landfill, [Percentage Landfill], [Weight Landfill], Inciniration, [Percentage inciniration], [Weight inciniration], Comments, Stage, Stage2 )
    SELECT Forms!First_Choice!Product_Based AS [Product Name], T2.[Material Category] AS [Material Category], T2.[Material Group], T2.Weight AS Weight, T2.Recycling AS Recycling, T2.[Percentage recycling] AS [Percentage recycling], T2.[weight recycling] AS [weight recycling], T2.Landfill AS Landfill, T2.[Percentage Landfill] AS [Percentage Landfill], T2.[Weight Landfill] AS [Weight Landfill], T2.Inciniration AS Inciniration, T2.[Percentage inciniration] AS [Percentage inciniration], T2.[Weight inciniration] AS [Weight inciniration], T2.Comments AS Comments, T2.Stage AS Stage, T2.Stage2 AS Stage2
    FROM Tbl_Material AS T2
    WHERE (((T2.[Product Name])=Forms!First_Choice!OldProduct));
    Surement un peu barbare, mais ça marche qd je l'execute directement, cad lorsque dans les requêtes je double clique dessus.

    Mais ce que je voudrais faire c'est l'executer depuis un bouton, en VBA.
    Là encore j'ai trouvé comment faire, mais j'ai un message d'erreur et je ne sais pas d'où il provient:
    Trop peu de paramètres. 2 attendu


    Voici le code que j'ai en VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Private Sub NewProductBasedOnOther_Click()
    On Error GoTo Err_NewProductBasedOnOther_Click
    Dim rs As DAO.Recordset
     
    Set rs = CurrentDb.OpenRecordset("Product_List", dbOpenTable)
    rs.AddNew
    rs.Fields("Product_Name") = Forms!First_Choice!Product_Based
    rs.Update
    rs.Close
    Set rs = Nothing
     
      Me.Lst_Consult.Requery
      Me.Lst_compare.Requery
      Me.Lst_Delete_Product.Requery
      Me.Lst_Product_based.Requery
     
      Me!OldProduct = Me!Lst_Product_based.Column(1)
     
      DoCmd.SetWarnings False
      Dim qdf As DAO.QueryDef
      Dim rcs As DAO.Recordset
      Dim stDocName As String
      stDocName = "Duplicate_Material"
      DoCmd.OpenQuery stDocName, acNormal, acEdit
     
    Set qdf = CurrentDb.QueryDefs("Duplicate_Material")
     
    qdf.Execute
    Debug.Print qdf.sql
     
     
    'Set rcs = qdf.OpenRecordset
     
    Set qdf = Nothing
    DoCmd.SetWarnings True
     
       ' Dim stDocName1 As String
       ' Dim stLinkCriteria As String
        'stDocName1 = "Product_Input_Data"
        'DoCmd.OpenForm stDocName1, , , stLinkCriteria
        'Forms!Product_Input_Data!Product_Name = Forms!First_Choice!Product_Based
     
    Exit_NewProductBasedOnOther_Click:
        Exit Sub
     
    Err_NewProductBasedOnOther_Click:
        MsgBox Err.Description
        Resume Exit_NewProductBasedOnOther_Click
     
    End Sub
    Ce qui est étrange, c'est que ça m'execute malgré tt la requete!? Alors je ne comprends pas d'où peut provenir ce message. Je fais donc appel à votre expérience, s'il vous plaît!lol

    Merci pour votre aide!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    je vous réécris car je n'ai toujours pas trouver la solution pour résoudre mon pb
    Je pense que ce qui ne va pas vient du fait que dans ma requête ajout, je fais appel à des références du Type Foms!First_Choice!product_name par exemple. Et vu que je fais appel à deux choses de ce type là, cela expliquerait le "trop peu de paramètres. 2 attendu".
    Mais je ne comprends toujours pas pourquoi en fait, donc je n'arrive pas à résoudre le problème.
    Je ne comprends pas pourquoi lorsque je double clique directement sur ma requête ajout ça marche, et pourquoi en VBA, ça effectue malgré tout l'ajout mais que ca bug?

    Personne ne pourrait me donner une piste svp?

    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il faut que tu passes les paramètres de ta requêtes.

    Un peu de lecture dans la Comment utiliser en VBA une requête existante ?

    Starec

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour Starec,

    Merci pour ta réponse, mais pour faire cette portion de code je me suis justement inspirée de la FAQ Comment utiliser en VBA une requête existante ?.
    Mais le problème viendrait plutôt du fait que je n'ai pas de paramètres dans ma requête ajout. Je n'ai pas fait une requête paramétrée.
    Mon problème viendrait-il de là?
    Il est possble de paramétrée une requête Ajout?
    Je vais continuer de chercher par là. En fait je m'étais focalisée sur le code, mais le problème vient peut-être de la requête. Vu qu'elle marchait en double cliquant, je ne me suis pas pencher sur la question. Surement ai-je eu tort :S

    A bientôt

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Re,

    Je suis en train d'ssayer en mettant des paramètres, mais le problème c'est que ça me fait apparaître des boîtes de dialogue. Alors autant pour un des paramètres ce n'est pas gênant, mais pour l'autre c'est embêtant, car je veux sélectionner un nom dans une zone de liste.
    Le but étant tjs de faire un copier coller d'un produit existant pour l'enregistrer sous un autre nom.
    Alors est-ce possible de faire ça avec des paramètres, dans une requête ajout?

    Pour info voici la requête que j'ai tenté de modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PARAMETERS OldProduct Value, Product_Based Value;
    INSERT INTO Tbl_Material ( [Product Name], [Material Category], [Material Group], Weight, Recycling, [Percentage recycling], [Weight recycling], Landfill, [Percentage Landfill], [Weight Landfill], Inciniration, [Percentage inciniration], [Weight inciniration], Comments, Stage, Stage2 )
    SELECT Product_Based AS [Product Name], T2.[Material Category] AS [Material Category], T2.[Material Group], T2.Weight AS Weight, T2.Recycling AS Recycling, T2.[Percentage recycling] AS [Percentage recycling], T2.[Weight recycling] AS [weight recycling], T2.Landfill AS Landfill, T2.[Percentage Landfill] AS [Percentage Landfill], T2.[Weight Landfill] AS [Weight Landfill], T2.Inciniration AS Inciniration, T2.[Percentage inciniration] AS [Percentage inciniration], T2.[Weight inciniration] AS [Weight inciniration], T2.Comments AS Comments, T2.Stage AS Stage, T2.Stage2 AS Stage2
    FROM Tbl_Material AS T2
    WHERE (((T2.[Product Name])=[OldProduct]));
    et voici mon code en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Private Sub NewProductBasedOnOther_Click()
    On Error GoTo Err_NewProductBasedOnOther_Click
    Dim rs As DAO.Recordset
     
    Set rs = CurrentDb.OpenRecordset("Product_List", dbOpenTable)
    rs.AddNew
    rs.Fields("Product_Name") = Forms!First_Choice!Product_Based
    rs.Update
    rs.Close
    Set rs = Nothing
     
      Me.Lst_Consult.Requery
      Me.Lst_compare.Requery
      Me.Lst_Delete_Product.Requery
      Me.Lst_Product_based.Requery
     
      Me!OldProduct = Me!Lst_Product_based.Column(1)
     
      'DoCmd.SetWarnings True
     
      Dim qdf As DAO.QueryDef
    Dim rcs As DAO.Recordset
     
      'référence à la requête
    Set qdf = CurrentDb.QueryDefs("Duplicate_Material")
     
      'code qui utilise qdf
      'par exemple
    qdf.Parameters("OldProduct") = [Forms]!First_Choice![OldProduct]     '<== si requête paramétrée
    qdf.Parameters("Product_Based") = [Forms]!First_Choice![Product_Based]
    qdf.Execute                                 '<== si requête action
    Set rcs = qdf.OpenRecordset                 '<== pour travailler sur les données
     
     
      'libération de la référence
    Set qdf = Nothing
     
     
        Dim stDocName1 As String
        Dim stLinkCriteria As String
       stDocName1 = "Product_Input_Data"
       DoCmd.OpenForm stDocName1, , , stLinkCriteria
       Forms!Product_Input_Data!Product_Name = Forms!First_Choice!Product_Based
     
    Exit_NewProductBasedOnOther_Click:
        Exit Sub
     
    Err_NewProductBasedOnOther_Click:
        MsgBox Err.Description
        Resume Exit_NewProductBasedOnOther_Click
     
    End Sub
    Le message que j'obtiens maintenant est "opération non valide"

    Je continue encore mes recherches ms si vous avez des idées je suis preneuse!!

    merci!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 46
    Points : 15
    Points
    15
    Par défaut
    Bonjour!

    Il fallait bien ajouter des paramètres. Mais vu que je n'y arrivai pas j'ai effacé tout le code en rapport avec cette fonction et recommencé depuis le début. Maintenant ça marche, je ne sais pas trop quelle est la différence entre ce que j'avais fait avant et pourquoi ça ne marchait pas dans la version précédente, mais l'essentiel est que ça fonctionne!!

    Ma requête ressemble à ça maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PARAMETERS prm1 Text ( 255 ), prm2 Text ( 255 );
    INSERT INTO Comments ( [Product Name], Comments )
    SELECT [prm2] AS [Product Name], T7.Comments AS Comments
    FROM Comments AS T7
    WHERE (((T7.[Product Name])=[prm1]));
    et mon code, dans VBA ressemble à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Dim db As Database 'base de données actuelle
      Dim qdfParmQry As QueryDef 'l'objet même décrivant la requête
        Set db = CurrentDb()
        Set qdfParmQry = db.QueryDefs("Duplicate_Material")
        qdfParmQry("prm1") = [Forms]!First_Choice![OldProduct]
        qdfParmQry("prm2") = [Forms]!First_Choice![Product_Based]
        qdfParmQry.Execute
        Set qdfParmQry = Nothing
    Comme quoi parfois il vaut mieux repartir à zero!! Merci Starec de m'avoir conseillée de passer par des paramètres!!
    Pb résolu, au suivant maintenant!

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

Discussions similaires

  1. [AC-2010] Message d'erreur lors de l'éxécution d'une requête
    Par Pittouti dans le forum Modélisation
    Réponses: 0
    Dernier message: 08/05/2013, 11h04
  2. Réponses: 15
    Dernier message: 02/06/2010, 15h08
  3. message d'erreur lors de l'execution
    Par bigmonstre dans le forum Débuter
    Réponses: 1
    Dernier message: 27/04/2010, 12h21
  4. message d'erreur lors de mise à jour d'une BD access
    Par Abydos Business Group dans le forum Access
    Réponses: 2
    Dernier message: 25/01/2006, 16h36
  5. message d'erreur lors de la création d'une base
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2004, 15h47

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