UPDATE, Dataadapter, Dataset et vb.net [Résolu]

Signaler
Messages postés
9
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
15 août 2009
-
l0r3nz1
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
-
Bonjour à tous, je suis encore débutant dans vb.net et tout le tremblement mais je bloque sur un problème qui pourrais vous paraître simple.
Je cherche à effectuer un update sur une table Access, mais je n'y arrive pas.
Si ça peut aider voilà mon code:
-------------------------------------------------------------------------------------------------------
    Public cnx As OleDbConnection
    Public cmd As New OleDbCommand
    Public ds As New DataSet("tab1")

    Public da As New OleDbDataAdapter("select * from tab1", cnx)

    Public dt As DataTable
    Public i as Integer
conn "provider microsoft.jet.oledb.4.0 ; data source = c:\mabase.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = conn
cnx.Open()

        da.Fill(ds, "Cimetiere")
        dt = ds.Tables("Cimetiere")
        For i = 0 To stockdata.Count - 1

    'Msgbox pour vérifier si ma requête est correcte
            MsgBox("UPDATE Cimetiere set " & Mid(test, 1, InStr(test, ". ") - 1) & "=" & """" & stockdata.Item(i) & """" & _
" Where " & primkey_name & "=" & """" & stockprimkey.Item(i) & """" & ";")

    'Mid(test, 1, InStr(test, ". ") - 1) -->Ca représente le nom du champ à modifier
    'stockdata.Item(i) --> Ca représente la valeur d'un arraylist à mettre dans le champ
    'primkey_name -->C'est ma variable qui contient le nom de la clé primaire
    'stockprimkey.Item(i) --> Ca représente la valeur d'un arraylist à mettre de la clé primaire

            cmd = New OleDbCommand("UPDATE tab1 set " & Mid(test, 1, InStr(test, ". ") - 1) & "=" & """" & stockdata.Item(i) & """" & " Where " & primkey_name & "=" & """" & stockprimkey.Item(i) & """" & ";", cnx)
            da.UpdateCommand = cmd
            da.Update(ds)
        Next
-------------------------------------------------------------------------------------------------------
Voilà si vous avez des questions hésitez pas et si vous avez des réponses hésitez encore moins.
Merci d'avance.

5 réponses

Messages postés
9
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
15 août 2009

J'ai trouvé la solution, à la place de :
da.Update(ds)

J'ai mis :
da.UpdateCommand.ExecuteNonQuery()

Et ça marche
Messages postés
9
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
15 août 2009

Je viens de me rendre compte d'erreur de copie dans mon poste original:
da.Fill(ds, "tab1")
        dt = ds.Tables("tab1")
        For i = 0 To stockdata.Count - 1

    'Msgbox pour vérifier si ma requête est correcte
           
MsgBox("UPDATE tab1 set " & Mid(test, 1, InStr(test, ". ") -
1) & "=" & """" & stockdata.Item(i) & """" & _
" Where " & primkey_name & "=" & """" & stockprimkey.Item(i) & """" & ";")

voilà qui est corrigé
Messages postés
79
Date d'inscription
lundi 28 août 2006
Statut
Membre
Dernière intervention
4 avril 2009
1
Salut je ne suis pas une pro du tout mais dans le peu de code que j'ai pu étudié il y avait une variable qui représenté un BindingSource
sur laquel on effectué l'instruction suivante  "BindingSource".EndEdit avant de faire un update de la table vers la base de donnée.

Sur les exemples de code généré automatiquement par visual studio voici ce que j'obtient en cliquant sur le bouton enregistré :

       Me.Validate()
        Me.BindingSource.EndEdit()
        Me.TableAdapter.Update(DataSet.Table)

J'espere au moins t'avoir mis sur une piste.
A+
Messages postés
9
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
15 août 2009

Merci ptit_tof57, je viens de regarder ce que tu m'as donné, mais j'ai fortement l'impression qu'il s'agit de vérifier les contrôles d'une page, alors que mon traitement est automatisé et va chercher les infos dans un fichier texte. mais je vais creuser un peu plus loin pour voir si ça va pas me mener vers ce que je cherche.
Messages postés
218
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012

1 an aprés...

OK, mais quand on créé son dataAdapter et son dataset ( pour ensuite eventuellement profiter de toutes les options de dataTable et dataRow)

pour ma part j'utilise seulement le dataset:
dst.AcceptChanges()
dst.Tables(0).Rows(5).Item(1) = "mmm"

puis
Try
dad.Update(dst, table) 'Update requiert un UpdateCommand valide lors du passage de la collection DataRow avec des lignes modifiées.
Catch ex As Exception
End Try

ou recupérer les infos dans un tableau >dst.Tables(0).Rows(1).ItemArray)<

dans ce cas je ne vais surement pas utiliser une commande update complexe! et comme on m'oblige à utiliser vb2005 en ce moment il faut que je m'y fasse.

Alors si quelqu'un pouvait m'expliquer svp de maniere à ce que je ne regrette pas trop VBA et ACCESS beaucoup plus souple que vb2005 et sql server.

merci d'avance.