none
Enregistrer les modifications d'un dataset RRS feed

  • Question

  • Bonjour,

    Je joins mon code. Le problème se pose après l'exécution de la procédure WriteData. Les modifications apportées au champ NUM_RECU ne s'enregistrent pas dans la base de données. Aucun message d'erreur n'est généré.

    Private m_conMembres As New OdbcConnection
    Private m_daDons As OdbcDataAdapter
    Private m_dsDons As DataSet
    Private m_intNumRecu As Int32

    Dim strConnexion As String
    strConnexion = "Driver={Microsoft dBASE Driver (*.dbf)};" & _
                   "DefaultDir=" & My.Settings.CheminMembres & ";" & _
                   "DriverID=277;" & _
                   "Deleted=1;" & _
                   "Exclusive=No;" & _
                   "ReadOnly=False"

    With m_conMembres
        .ConnectionString = strConnexion
        .Open()
    End With

    Dim strSelectDons As String, intDaysInMonth As Int32
    Dim datBeginPeriod As Date, strBeginPeriod As String
    Dim datEndPeriod As Date, strEndPeriod As String

    datBeginPeriod = New Date(nudYear.Value, nudMonth.Value, 1)
    strBeginPeriod = datBeginPeriod.ToString("MM-dd-yyyy")
    intDaysInMonth = DateTime.DaysInMonth(nudYear.Value, nudMonth.Value)
    datEndPeriod = New Date(nudYear.Value, nudMonth.Value, intDaysInMonth)
    strEndPeriod = datEndPeriod.ToString("MM-dd-yyyy")

    strSelectDons = "SELECT * FROM MEMBRES INNER JOIN DONS ON MEMBRES.NUM_DOSS = DONS.NUM_DOSS WHERE " & _
                        "(DONS.DATE_DON Is Not Null) And " & _
                        "(DONS.DATE_DON >= #" & strBeginPeriod & "#) And " & _
                        "(DONS.DATE_DON <= #" & strEndPeriod & "#)"

    m_daDons = New OdbcDataAdapter(strSelectDons, m_conMembres)
    m_dsDons = New DataSet
    m_daDons.Fill(m_dsDons)

    m_intNumRecu = ????   ' Valeur indiquée ailleurs par l'utilisateur

    For i As Int32 = 0 To m_dsDons.Tables(0).Rows.Count - 1
        With m_dsDons.Tables(0).Rows(i)
            PrintDocument1.Print()
            WriteData(i, m_intNumRecu)
            m_intNumRecu += 1
        End With
    Next

    ' Jusque là, ça fonctionne très bien.

    ' Le problème est dans la procédure qui suit. Les valeurs ne sont pas enregistrées dans la base de données. Aucun message d'erreur n'est généré. Si je demande MsgBox(m_dsDons.Tables(0).Rows(i).Item("NUM_RECU"),  je lis le bon numéro. Le champ NUM_RECU est de type numérique. Les données sont au format dBase IV pour DOS.

    Private Sub WriteData(ByVal i As Int32, ByVal intNoRecu As Int32)
        With m_dsDons.Tables(0).Rows(i)
            .BeginEdit()
            .Item("NUM_RECU") = intNoRecu
            .EndEdit()
        End With
        m_dsDons.AcceptChanges()
        ' MsgBox(m_dsDons.Tables(0).Rows(i).Item("NUM_RECU")     ' Lecture correcte de la valeur
        m_daDons.Update(m_dsDons)
    End Sub

    Merci.

    Guy

    mercredi 27 février 2013 21:55

Réponses

Toutes les réponses