Modifier un enregistrement précis

galaxy2009 Messages postés 144 Date d'inscription dimanche 24 avril 2011 Statut Membre Dernière intervention 16 juin 2016 - Modifié par jordane45 le 25/02/2014 à 23:53
Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014 - 2 avril 2014 à 16:14
Bonjour,
j'ai une table stock où j'enregistre l'arrivage des produits, maintenant j'ai un problème c'est quand je veux modifier le dernier arrivage d'un produit ma requête modifie toujours le premier enregistrement de ma table.
voilà mon code dans le bouton enregistrer:
    Private Sub Enregistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Enregistrer.Click
        
        sql = "select HSstockin.* from HSstockin where "
        ' If TextBox14.Text <> "" Then sql = sql & "ID = '" & TextBox14.Text & "' and "
        If TID.Text <> "" Then sql = sql & "id = '" & TID.Text & "' and "
        If T1.Text <> "" Then sql = sql & "design = '" & T1.Text & "' and "
        If Mask1.Text <> "" Then sql = sql & "dentrer = '" & Mask1.Text & "'"

        cmd = New SqlCommand(sql)
        dta = New SqlDataAdapter(cmd)
        cmd.Connection() = cnx

        'chargement du DataSet à partir du DataAdapter   
               
        dta.Fill(dts, "HSstockin")

        'chargement de la DataTable à partir du DataSet 
                
        dtt = dts.Tables("HSstockin")

        'mise à jour des données du DataAdapter à partir du commandbuilder

        dta.Update(dts, "HSstockin")

        'si la table est vide alors

        If rownum > dtt.Rows.Count - 1 Then
            Me.Show()
        End If

        '*******MODIFICATION DES DONNEES********

        dtr = dts.Tables("HSstockin").Rows(rownum)
        dtr("design") = Me.T1.Text
        dtr("ref") = Me.T2.Text
        dtr("famille") = Me.T3.Text
        dtr("prix") = Me.T4.Text
        dtr("fourniss") = Me.T5.Text
        dtr("quantite") = Me.T6.Text
        dtr("minim") = Me.T7.Text
        dtr("ancienstock") = Me.T8.Text
        dtr("stockentrer") = Me.T9.Text
        dtr("stockgeneral") = Me.T10.Text
        dtr("facture") = Me.T11.Text
        dtr("dentrer") = MaskedTextBox1.Text
        dtr("utilisateur") = Me.T12.Text
        dtr("datecreat") = Me.Mask2.Text
        dtr("timecreat") = Me.T13.Text

        cmdb = New SqlCommandBuilder(dta)

        'mise à jour des données du DataAdapter à partir du commandbuilder
        dta.Update(dts, "HSstockin")

        'on vide le dataset pour le recréer avec les nouvelles données 

        dts.Clear()
        dta.Fill(dts, "HSstockin")
        dtt = dts.Tables("HSstockin")

    End Sub


Galaxy2009

1 réponse

Cricri1670 Messages postés 32 Date d'inscription samedi 15 décembre 2007 Statut Membre Dernière intervention 10 avril 2014
2 avril 2014 à 16:14
Bonjour,

Je n'ai pas lu l'ensemble de ton code mais je peux tout de suite t'orienter vers les points suivants :
1) Pour pouvoir identifier une ligne de données, il faut que ta base contienne une Clef Primaire unique. Est-ce le cas ? Si tu n'as qu'un seul arrivage par jour, tu peux utiliser la date, sinon, il te faudra trouver autre chose.
2) Lors d'un Update sur une base, il FAUT une clause WHERE qui contient la référence à cette clef unique, sinon le premier élément correspondant sera modifié.

Vérifies le texte de la commande UPDATE de ton CommandBuilder car sans clef, celui-ci va te créer une commande qui ne marchera pas.

En espérant t'avoir aidé !
--
0
Rejoignez-nous