Problème requête INSERT INTO en VBA Access

nyeri Messages postés 45 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 29 février 2012 - 30 janv. 2012 à 08:59
LouFabrizio Messages postés 2 Date d'inscription mercredi 27 juillet 2011 Statut Membre Dernière intervention 26 septembre 2013 - 1 févr. 2012 à 17:02
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 09:14
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
0
nyeri Messages postés 45 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 29 février 2012
30 janv. 2012 à 09:32
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 janv. 2012 à 10:02
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
0
LouFabrizio Messages postés 2 Date d'inscription mercredi 27 juillet 2011 Statut Membre Dernière intervention 26 septembre 2013
1 févr. 2012 à 17:02
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,
0
Rejoignez-nous