Bonjour,
Pour mettre à jour une base de données access, j'utilise le code ci-dessous lorsque la mise à jour concerne une seule ligne
Private Sub MiseAJourSortie()
'Mise a jour sortie liquidée
' On Error Resume Next
Sql = "SELECT ID, CodeOut, Liquidé FROM Sortie" _
+ " WHERE [CodeOut] Like '" & Trim(TCodOut.Text) & "'"
Cmd = New OleDb.OleDbCommand(Sql)
SOuTA = New OleDb.OleDbDataAdapter(Cmd)
Cmd.Connection() = GP
CDSet = New DataSet
SOuTA.Fill(CDSet, "Sortie")
RowN = SOuT.Rows.Count - 1
If RowN = SOuT.Rows.Count - 1 Then
Dim Ligne0 As Integer = CDSet.Tables.Count - 1
With CDSet
DTR = CDSet.Tables("Sortie").Rows(Ligne0)
DTR("Liquidé") = Trim$("OUI")
CmdB = New OleDb.OleDbCommandBuilder(SOuTA)
SOuTA.UpdateCommand = CmdB.GetUpdateCommand
SOuTA.Update(CDSet, "Sortie") : CDSet.Clear()
End With
Else
Exit Sub
End If
End Sub
Ma question est :
Comment formuler le code lorsque j'ai plus d'une ligne à mettre à jour en mème temps (Si le DataSet compte 3 lignes par exemple et que sur la colonne "Liquidé" je dois écrire le "OUI" sur les 3 lignes lorsque tous les trois ont en commun le "CodeOut").
Private Sub MiseAJourSortie()
'Mise a jour sortie liquidée
' On Error Resume Next
sql = "SELECT ID, CodeOut, Liquidé FROM Sortie" _
+ " WHERE [CodeOut] Like '" & Trim(TCodOut.Text) & "'"
cmd = New OleDb.OleDbCommand(sql)
SOuTA = New OleDb.OleDbDataAdapter(cmd)
cmd.Connection() = GP
CDSet = New DataSet
SOuTA.Fill(CDSet, "Sortie")
For Each row As DataRow In CDSet.Tables("Sortie").Rows
row("Liquidé") = "OUI"
Next
CmdB = New OleDb.OleDbCommandBuilder(SOuTA)
SOuTA.UpdateCommand = CmdB.GetUpdateCommand
SOuTA.Update(CDSet, "Sortie") : CDSet.Clear()
End Sub
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
je n'ai pas pris le temps de réfléchir à ton problème.
Mais je m'interroge sur ces 2 lignes
RowN = SOuT.Rows.Count - 1
If RowN = SOuT.Rows.Count - 1 Then ' RowN vaut forcément SOuT.Rows.Count - 1 puisque c'est la valeur que tu viens de lui mettre.