Problème sur INSERT / UPDATE
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je viens vers vous car j'ai un soucis, je vais déjà vous mettre le code pour que vous puissiez comprendre:
Private Sub EntréeStocks_Click() Dim rstS As DAO.Recordset Dim strSql As String Set rstS = Me.RecordsetClone 'source 'Vérifier si le jeu d'enregistrements ne contient pas de lignes If rstS.RecordCount = 0 Then Exit Sub rstS.MoveLast 'Inutile dans ce cas, mais gardons les bonnes habitudes rstS.MoveFirst Do Until rstS.EOF If DCount("*", "StocksEm", "Ref = '" & rstS.Fields("Ref") & "'" _ & " AND Emplacement = '" & rstS.Fields("Emplacement") & "'" _ & " AND CodeVariante= '" & rstS.Fields("CodeVariante") & "'") > 0 Then strSql = "UPDATE StocksEm" _ & " SET Qte = Qte + " & rstS.Fields("Qte") & "" _ & " WHERE Ref = '" & rstS.Fields("Ref") & "'" _ & " AND Emplacement = '" & rstS.Fields("Emplacement") & "'" _ & " AND CodeVariante = '" & rstS.Fields("CodeVariante") & "'" CurrentDb.Execute strSql, dbFailOnError strSql = "INSERT INTO HistEntre (Ref,Qte,NumBl,DateS,Emplacement,CodeVariante)" _ & " SELECT NewStocks.Ref, NewStocks.Qte, NewStocks.NumBl, NewStocks.DateS, NewStocks.Emplacement, NewStocks.CodeVariante " _ & " FROM NewStocks" CurrentDb.Execute strSql, dbFailOnError ElseIf DCount("*", "StocksEm", "Ref = '" & rstS.Fields("Ref") & "'" _ & " AND Emplacement = '" & rstS.Fields("Emplacement") & "'" _ & " AND IsNull(CodeVariante) ") > 0 Then strSql = "UPDATE StocksEm" _ & " SET Qte = Qte + " & rstS.Fields("Qte") & "" _ & " WHERE Ref = '" & rstS.Fields("Ref") & "'" _ & " AND Emplacement = '" & rstS.Fields("Emplacement") & "'" _ & " AND IsNull(CodeVariante)" CurrentDb.Execute strSql, dbFailOnError strSql = "INSERT INTO HistEntre (Ref,Qte,NumBl,DateS,Emplacement,CodeVariante)" _ & " SELECT NewStocks.Ref, NewStocks.Qte, NewStocks.NumBl, NewStocks.DateS, NewStocks.Emplacement, NewStocks.CodeVariante " _ & " FROM NewStocks" CurrentDb.Execute strSql, dbFailOnError Else strSql = "INSERT INTO StocksEm (Ref,Qte,NumBl,DateS,Emplacement,Provenance,CodeVariante)" _ & " SELECT NewStocks.Ref, NewStocks.Qte, NewStocks.NumBl, NewStocks.DateS, NewStocks.Emplacement, NewStocks.Provenance, NewStocks.CodeVariante " _ & " FROM NewStocks" _ '& " WHERE id_art_fk = " & rstS.Fields("id_art_fk") CurrentDb.Execute strSql, dbFailOnError strSql = "INSERT INTO HistEntre (Ref,Qte,NumBl,DateS,Emplacement,CodeVariante)" _ & " SELECT NewStocks.Ref, NewStocks.Qte, NewStocks.NumBl, NewStocks.DateS, NewStocks.Emplacement, NewStocks.CodeVariante " _ & " FROM NewStocks" CurrentDb.Execute strSql, dbFailOnError End If rstS.MoveNext Loop strSql = "DELETE * FROM NewStocks" CurrentDb.Execute strSql, dbFailOnError Me.Requery rstS.Close Set rstS = Nothing Me.Refresh End Sub
Le problème que j'ai actuellement c'est que lorsque je veux Insérer un enregistrement avec CodeVariante rempli dans un Emplacement qui existe déjà il ne veut pas et à la place il fait un UPDATE sur ce même enregistrement situé à l'emplacement.
Exemple
Et je souhaite insérer celui-ci :
Cela met à jour l'enregistrement qui existe déjà à cet Emplacement, hors moi j'aimerai qu'il sois insérer comme CodeVariante n'est pas Null au moment ou je souhaite l'INSERT . Le deuxième formulaire que vous voyez est basé sur la table NewStocks et le premier sur StocksEm.
Avez-vous une idée ? Merci par avance
Cdlt
Windows / Chrome 108.0.0.0
- Problème sur INSERT / UPDATE
- Touche insert - Guide
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Disk boot failure insert system disk and press enter - Guide
1 réponse
bonjour,
Il fait cela parce que l'enregistrement existant (dans StocksEm) n'a pas de CodeVariante.
pour tester, mets provisoirement en commentaire tes lignes de code 29 à 43.
dans la table NewStocks, que contient précisément le champ "CodeVariante" quand il est vide? Null ou bien une chaine vide?
D'accord je vais faire cela
Quand le champ CodeVariante est vide dans la table NewStocks il n'y a rien donc je dirais plutôt chaine vide (" ") car j'ai cru lire que Null était seulement pour les Variants . ce champ est un TexteCourt comme type.
Il faudrait que je change ma condition IsNull par un truc comme ça ? : CodeVariante.Value= " "
Il est préférable, au lieu de "je dirais plutôt", de répondre "je ne sais pas".
La question, "" ou Null, porte sur un champ d'une table, pas sur une variable.
Tu dois aller voir dans la définition et dans le contenu de la table pour y trouver la réponse.
Ton souci, je pense, c'est que tu négliges de tester la valeur de CodeVariante de la table NewStocks dans ton test en ligne 29-31. Peut-être ainsi:
Tu pourrais sans doute simplifier cela si tu n'utilisais pas Null pour le champ CodeVariante de la table StocksEm.
Ton utilisation de la table NewStocks dans tes requêtes INSERT et UPDATE te causera d'autres soucis.