Ajout puis modification

rudybiss Messages postés 60 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 20 juillet 2009 - 17 juin 2009 à 13:00
rudybiss Messages postés 60 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 20 juillet 2009 - 19 juin 2009 à 14:01
Bonjour!
Je vous explique mon problème.Je voudrais faire un ajout dans une table donnée puis en même temps la modification d'un champ dans une autre table.
Ceci dit: j'ai un allotment qui contient plusieurs stickers,à la création de l'allotment il y a un montant initial et lors de la création d'un stickers,son montant ne doit pas être supérieur à celui de l'allotment et aussi à chaque création d'un stickers(puisque le stickers a aussi un montant),le montant de l'allotment doit diminuer c'est-à-dire (montant allotment - montant stickers).
Donc dans le formulaire de saisie des stickers,j'ai une combobox pour selectionner le numéro de l'allotment,une fois selectionné le numéro de l'allotment,automatique est recupéré le montant de l'allotment et son id. Donc à la création du stickers,je dois modifier dans la table allotment le montant correspondant à l'id.Mais pour l'instant,ca ne marche pas j'ai cette erreur:
 
L'index se trouve en dehors des limites du tableau. Voici le code complet:

  Private Sub Btn_enrgistrer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_enregistrer.Click        If txt_stick_num.Text "" Or txt_montant.Text "" Or cmb_allot_num.Text = "Choisir..." Or cmb_allot_num.Text = "" Then
            MsgBox("Tous les champs doivent être renseignés", MsgBoxStyle.Information, "Vérification des champs")
        ElseIf (Val(txt_montant.Text) > Val(txt_montant_allot.Text)) Then
            MsgBox("Le montant du stickers est supérieur à celui de son allotment", MsgBoxStyle.Information, "Vérification des montants")
        Else
            txt_solde.Text = Val(txt_montant_allot.Text) - Val(txt_montant.Text)

            Dim NewLigne As DataRow
            With DtSet
                ' Création de la nouvelle ligne
                NewLigne = DtSet.Tables("stickers").NewRow
                'affectation des valeurs

                NewLigne(1) = txt_stick_num.Text
                NewLigne(0) = DtSet.Tables.Item(0).Rows.Count + 1
                NewLigne(2) = cmb_allot_num.Text
                NewLigne(3) = txt_montant.Text

                ' Ajout de la ligne à la table
                .Tables("stickers").Rows.Add(NewLigne)

                Connection.Open()
                ' Création CommandBuilder
                '(genere automatiquement l'update entre le dataSet et la base de donnée
                Dim CmdBuild As OleDbCommandBuilder
                CmdBuild = New OleDb.OleDbCommandBuilder(AdapTstickers)
                AdapTstickers.UpdateCommand = CmdBuild.GetUpdateCommand()
                AdapTstickers.Update(DtSet, "stickers")

                'recupere la clé de la ligne sélectionné
                Dim idallotment As String
                idallotment = txt_solde.Text
                'definition de notre table
                Dim Matable As DataTable
                Matable = DtSet.Tables("allotment")
                'recherche la ligne a modifier dans notre table
                Dim LaLigne As DataRow()                LaLigne Matable.Select("id_allotment " & idallotment)
                'affecte les modifications
                LaLigne(0)(3) = txt_solde.Text
                Connection.Close()

            End With

        End If

        'manipulation sur les boutons et controles

        Btn_nouveau.Visible = True
        Btn_enregistrer.Visible = False
        Vide_champ()
        bloque_ctrls()
    End Sub
Je me demande si cette méthode est bonne car j'ai juste fait une adaptation!

Merci pour votre aide.

2 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
18 juin 2009 à 12:18
Bonjour,

A quoi correspond cette table ???

DtSet.Tables.Item(0).Rows.Count + 1

Ce ne serait pas plutot :

DtSet.Tables.Item(1).Rows.Count + 1 ou DtSet.Tables("stickers").Rows.Count ?

Apparemment c'est l'incrémentation de la clé primaire ?

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
rudybiss Messages postés 60 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 20 juillet 2009
19 juin 2009 à 14:01
Bonjour!
Problème résolu,en fait je me trompait de textbox où il fallait récupérer l'id.Donc je prenais un id très grand(qui n'etait que le montant),du coup il ne trouvais pas dans la table.
Merci encore!
0
Rejoignez-nous