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 UPDATE ne fonctionne pas [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Requête UPDATE ne fonctionne pas
    Bonjour,

    J'effectue une requête UPDATE sur base d'un formulaire, mais celle-ci me fait n'importe quoi, j'en déduis donc que le code écrit est n'importe quoi

    J'ai une table T_CdeMagDetail comportant notamment les champs NCde (numéro de commande), QuCde (Quantité commandée), QuIn1 (Quantité reçue), QuSouffrance (champ calculé QuCde-QuIn), Livraison (Quantité livrée), Suivi (Etat de la commande : Commandé, Partiel, Complet).

    j'indique via un formulaire les quantités de réception d'articles dans les différentes lignes correspondantes, et, après un clic de validation, j'aimerais que ma table se mette à jour dans le sens ou:
    la QuIn se voit ajouter la Quliv
    la valeur de Quliv est remise à zéro
    le Suivi passe en partiel si QUSouffrance est supérieur à 0 ou en Complet si QUSouffrance est égal à 0.

    la variable num me permet de récupérer le numéro de commande...

    Pourriez-vous aider le petit débutant que je suis....

    Un grand merci à vous

    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 ConfirmerSuivi_Click()
     
    Dim requete As String: Dim base As Database: Dim ligne As Recordset: Dim critere As String: Dim num As String
     
    num = numcom.Value
     
     
    'Considère la base T_CdeMagdetail mais seulement pour les enregistrements en rapport au N° de commande du formulaire
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT* FROM T_CdeMagDetail WHERE (T_CdeMagDetail.NCde = '" & num & "')", dbOpenDynaset)
     
    ligne.MoveFirst
    Do
     
    'Modifie les valeurs de réception en les additionnant aux valeurs de livraison
    requete = "UPDATE T_CdeMagDetail SET T_CdeMagDetail.QuIN1 = [QuIN1]+ (" & Int(Livraison) & ") WHERE (T_CdeMagDetail.Livraison > 0);"
    base.Execute requete
    requete = "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Livraison = 0 WHERE (T_CdeMagDetail.Livraison > 0);"
    base.Execute requete
    ligne.MoveNext
    Loop Until ligne.EOF
     
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
    'Considère la base T_CdeMagdetail mais seulement pour les enregistrements en rapport au N° de commande du formulaire
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT* FROM T_CdeMagDetail WHERE (T_CdeMagDetail.NCde = '" & num & "')", dbOpenDynaset)
    ligne.MoveFirst
    Do
        If QuSouffrance.Value < 0 Then
       critere = "Partiel"
       Else
       critere = "Complet"
        End If
    'modifie le suivi suivant la valeur de la souffrance existante
    requete = "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi =('" & critere & "') WHERE (T_CdeMagDetail.Livraison > 0);"
    base.Execute requete
    ligne.MoveNext
    Loop Until ligne.EOF
     
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
     
    DoCmd.Requery
     
     
    End Sub

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Bonjour,

    C'est recordset OU update mais pas les 2

    Perso je préfère update :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ConfirmerSuivi_Click()
    Dim critere As String
    If QuSouffrance< 0 Then critere = "Partiel" Else critere = "Complet"
    currentdb.execute "UPDATE T_CdeMagDetail SET Livraison=0, QuIN1 = QuIN1+" & Int(Livraison) & ", Suivi='" & critere & "' WHERE Livraison>0 and NCde='" & numcom & "'", dbfailonerror
    me.requery
    end sub
    Le reste du code ne sert à rien, sauf si t'es payé à la ligne

  3. #3
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Merci de la réponse...En effet, je dois avoir l'art de mettre du code pour rien.

    Cela se présente bien, mais malheureusement ne donne pas le résultat escompté.

    le critère change mais ne met pas la bonne valeur, la livraison s'efface bien après traitement, la la valeur de QuIN1 reste à 0 après click bouton...???

    Je me demandais déjà pour le critère, en plaçant la condition if avant l'update, comment fait il pour savoir si la commande est complète ou partielle car l'ajout de la livraison n'est à mon sens pas encore réalisée par le code.

    la valeur QuIN1, ne devrait pas être remplacée par la quantité mise en livraison, mais la livraison devrait être ajoutée à QuIN1. permettant ainsi de calculer dans le champs calculé QuSouffrance :la quantité commandée (QuCde)- la quanbtité déjà reçue (QuIN1) = ce qu'il reste à recevoir (QuSouffrance).

    Tant que la souffrance n'est pas à 0 le suivi est partiel et quand arrive à 0 la commande est complète.

    Merci encore de l'aide apportée

    Eric

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 108
    Points : 5 231
    Points
    5 231
    Par défaut
    Citation Envoyé par trouvaille Voir le message
    Cela se présente bien, mais malheureusement ne donne pas le résultat escompté.
    Maintenant c'est un problème d'algorithme, pas de syntaxe...

    Déjà je suis surpris qu'il n'y ait qu'une référence par commande ?

  5. #5
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Bonjour,

    Il y a bien plusieurs articles commandés sous le même numéro de commande.
    j'ai un formulaire (contenant une zone de liste déroulante me permettant de sélectionner un numéro de commande.
    Un sous formulaire m'affichant les articles commandés en rapport à ce numéro de commande.
    l'affichage de ce sous formulaire reprend les données de la table T_CdeMagDetail.
    c'est à partir de là que j'aimerai entrer une valeur dans la case livraison (Livraison) pour un ou plusieurs articles.
    et sur clic, il ajouterai à la valeur déjà reçu (QuIN1) la valeur de la livraison. puis remettrai la valeur livraison à zéro (prêt à être modifié lors de la prochaine réception d'articles en cas de livraison partielle)

    Pour le suivi(Suivi), au départ la valeur est en "commandé", elle devrait passer en "Partiel" si après le clic la totalité de la commande n'est pas réceptionnée donc certains articles en souffrances(QuSouffrance) ou passer en "Complet si après clic la valeur de la souffrance (QuSouffrance) est égale à 0

  6. #6
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    J'ai essayer de modifier le code, mais le champ (Suivi) n'a pas l'air de tenir compte de mes conditions...

    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
     
    Private Sub ConfirmerSuivi_Click()
     
        'Mise à jour de toute les quantités reçues (QuIn1) en rapport à la livraison (Livraison)
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.QuIN1 = [QuIN1] + [Livraison]  WHERE  NCde='" & numcom & "'", dbFailOnError
     
     
    Me.Requery
     
        'Traitement du champ (Suivi) de la commande après mise à jour des quantités déjà reçues (QuIN1)
    Dim base As Database: Dim ligne As Recordset
    Dim Rst As String: Dim critere As String
     
    Set base = Application.CurrentDb
    Set ligne = base.OpenRecordset("SELECT * FROM T_CdeMagDetail WHERE NCde='" & numcom & "' ", dbOpenDynaset)
    ligne.MoveFirst
     
        'boucle afin de traiter tout enregistrement concenrnant la même commande (numcom)
    Do
     
        'Condition afin de donner la valeur adéquate au champ (Suivi)
    If QuIN1.Value = QuCde.Value Then
         critere = "Complet"
    ElseIf QuIN1.Value < QuCde.Value And QuIN1 <> 0 Then
    critere = "Partiel"
    Else: critere = "Commandé"
    End If
     
        'Mise à jour du champ (Suivi)et remise à zéro du champ (Livraison)
    Rst = ("UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & critere & "',T_CdeMagDetail.Livraison = 0 ")
    base.Execute Rst
    ligne.MoveNext
    Loop Until ligne.EOF
     
        'Vider la mémoire
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
     
     
    End Sub

  7. #7
    Membre régulier
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Je pense avoir avancé pas mal quoique vu d'un oeil d'expert cela devait paraître simple....

    Reste mon problème de mise à jour de me stocks...

    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
    Private Sub ConfirmerSuivi_Click()
     
     
     
     
        'Mise à jour des quantités reçues (QuIn1) en rapport à la livraison (Livraison)
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.QuIN1 = [QuIN1] + [Livraison]  WHERE  NCde='" & numcom & "'", dbFailOnError
     
        'Mise à jour des suivis selon les conditions
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Complet" & "'  WHERE  QuIN1 = QuCde And NCde='" & numcom & "'", dbFailOnError
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Commande" & "'  WHERE T_CdeMagDetail.QuIN1 = 0 And NCde='" & numcom & "'", dbFailOnError
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET T_CdeMagDetail.Suivi = '" & "Partiel" & "'  WHERE  NCde='" & numcom & "' And QuIN1 < QuCde And QuIN1 <> 0 And NCde= '" & numcom & "'", dbFailOnError
     
        'Mise à jour des stock (NE FONCTIONNE PAS)
    'CurrentDb.Execute "UPDATE T_Stock SET T_Stock.QUANTITE = T_Stock.QUANTITE + T_CdeMagDetail.Livraison  WHERE T_Stock.Article = T_CdeMagDetail.Article And T_Stock.Taille = T_CdeMagDetail.Taille And NCde='" & numcom & "'", dbFailOnError
     
        'Remise à zéro de la livraison
    CurrentDb.Execute "UPDATE T_CdeMagDetail SET [Livraison] = 0  WHERE  NCde='" & numcom & "'", dbFailOnError
     
    Me.Requery
     
    End Sub

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

Discussions similaires

  1. [MySQL] Ma requête UPDATE ne fonctionne pas
    Par geeka dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 29/04/2015, 13h39
  2. [MySQL] Requête update ne fonctionnant pas tout le temps
    Par feldi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/03/2011, 15h44
  3. [AC-2007] Requête Update ne fonctionne pas
    Par franckimmo dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 24/02/2010, 14h58
  4. Requête Update ne fonctionnant pas
    Par Arthorius dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/01/2009, 09h50
  5. [MySQL] Requête UPDATE ne fonctionne pas
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 29/01/2007, 23h32

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