Problème requête INSERT INTO en VBA Access

Signaler
Messages postés
46
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
29 février 2012
-
Messages postés
2
Date d'inscription
mercredi 27 juillet 2011
Statut
Membre
Dernière intervention
26 septembre 2013
-
Bonjour,

Bonjour tout le monde,

Voila , j ai un petit souci, Je récupère des informations à partir d'un formulaire et je souhaite rentrer ces valeurs dans mes tables access à l'aide d'une requete INSERT INTO. Mon problème est que la requete à l'air de fonctionner correctement car je n'ai aucune erreur, mais aucune des valeurs ne s'intègre dans ma table.

Voici le schéma de mes tables access :

<lien url="http://imageshack.us/photo/my-images/39/tableauaccess.png">Table access</lien>


J'ai pensé que cela pouvait être un problème de jointure. J'ai testé en passant les relations en type jointure 2 et 3 mais rien n'a changé.

Voici le code de ma requete SQL :


Set db = CurrentDb

db.Execute " INSERT INTO  Ligne_de_facture_livraison ( N°Produit, N°facture_livraison, Quantite_produit, Quantite_casse, Quantite_vol, Quantite_perte ) VALUES (" & num_produit & "," & num_facture & "," & nouveau_stock1 & "," & nouveau_casse1 & "," & nouveau_vol1 & "," & nouveau_perte1 & ");"

Debug.Print "Records affected = " & db.RecordsAffected
db.Close


Voici mon code en amont :

num_facture = N°facture_livraison.Value
    MsgBox num_facture   
    If nouveau_stock1 <> 0 Then   
        StrSql1 = "UPDATE Produit Set [Quantite_stock]='" & nouveau_stock1 & "' WHERE [désignation]='" & produit1.Value & "'"
        Set Req1 = CurrentDb.CreateQueryDef("", StrSql1)
        Req1.Execute dbFailOnError
        
        sSQL6 = "Select N°Produit From  Produit WHERE Produit.désignation='" & produit1.Value & "';"
        Set rst6 = CurrentDb.OpenRecordset(sSQL6, dbOpenForwardOnly, dbReadOnly)
       num_produit= rst6![N°Produit]
        rst6.Close
                
        If nouveau_casse1 <> 0 Then
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='casse';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
                
                stock_casse1 DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
                
                stock_casse1 = stock_casse1 + quantite1.Value
        
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_casse1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
        End If
        
        If nouveau_vol1 <> 0 Then
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='vol';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
                
                stock_vol1 DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
                
                stock_vol1 = stock_casse1 + quantite1.Value
        
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_vol1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
              
        End If
        
        If nouveau_perte1 <> 0 Then
                sSQL7 = "Select N°Anomalie From  anomalie WHERE anomalie.type_anomalie='perte';"
                Set rst7 = CurrentDb.OpenRecordset(sSQL7, dbOpenForwardOnly, dbReadOnly)
                num_casse = rst7![N°Anomalie]
                rst7.Close
                
                stock_perte1 DLookup("[stock_anomalie]", "Stock_anomalie", "[N°Produit] " & num_produit & " AND [N°Anomalie] =  " & num_casse & "")
                
                stock_perte1 = stock_perte1 + quantite1.Value
        
              StrSql2 = "UPDATE Stock_anomalie Set [stock_anomalie]='" & stock_perte1 & " ' WHERE [N°Produit] = " & num_produit & " AND  [N°Anomalie] = " & num_casse & ""
            
              Set Req2 = CurrentDb.CreateQueryDef("", StrSql2)
              Req2.Execute dbFailOnError
              
        End If  
 
        Set db = CurrentDb
        db.Execute " INSERT INTO  Ligne_de_facture_livraison ( N°Produit, N°facture_livraison, Quantite_produit, Quantite_casse, Quantite_vol, Quantite_perte ) VALUES (" & num_produit & "," & num_facture & "," & nouveau_stock1 & "," & nouveau_casse1 & "," & nouveau_vol1 & "," & nouveau_perte1 & ");"
       Debug.Print "Records affected = " & db.RecordsAffected
      db.Close
        
        Set db = CurrentDb
        db.Execute " INSERT INTO Facture_livraison ( Date_facture_livraison, N°Fournisseur ) VALUES(" & date_reception & "," & Form_Commande_fournisseur.TMP_FOURNISSEUR & ");"
        Debug.Print "Records affected = " & db.RecordsAffected
        db.Close
    End If


Merci

Cordialement

MCB

4 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
db.Close

?

si tu ferme ta base, pas possible derrière de faire ton db.Execute
...




Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
46
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
29 février 2012

Le problème ne vient pas de mon db.close car je me repositionne sur ma base avec le set db.current. L'erreur ce trouve ailleurs.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
testes en supprimant cette ligne, ca ne coute rien, un test.

Il est illogique de faire un

db.Close

a cet endroit, complètement illogique... (et inutile)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
2
Date d'inscription
mercredi 27 juillet 2011
Statut
Membre
Dernière intervention
26 septembre 2013

Bonjour,

En effet inutile de faire un close pour refaire un set derrière. Cependant le problème est qu'avec une relation il faut d'abord créer la ligne dans la table mère puis ensuite dans la table enfant. Ce que tu ne sembles pas faire.

Inverse tes 2 inserts.

Cordialement,