Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Débutant : Modification du datagrid non répercutée sur la base Access

4 réponses
Avatar
DP
Bonjour,

Quand je modifie une ligne de maon DataGrid par l'intarmédaire de controles
correspondants à chaque colonne de mon enregistrement, les modifications
apparaissent bien dans le DataGrid mais quand je relance l'application, elle
n'ont pas été enregistrées dans la bases Access sous-jacente. Je suppose que
c'est parceque je n'ai pas, en fait, modifié le DataSet. J'ai essayé cette
ligne :

myRow = dtsListeActes.Tables(strTable).Select("LigneChoisie = " &
DataGridListeActes.CurrentRowIndex)

mais elle génère une erreur. Pouvez vous m'aider? (ci-dessous mon code)

Merci

Private Sub cmdModifModifier_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdModifModifier.Click


odaListeActes.SelectCommand = New OleDbCommand(strSql, MaConn)

objCB = New OleDbCommandBuilder(odaListeActes)

Dim nomTable As DataTable

nomTable = dtsListeActes.Tables(strTable)

Dim myRow As DataRow

Dim num As String

Dim LigneChoisie As Integer

LigneChoisie = DataGridListeActes.CurrentRowIndex

DataGridListeActes.Item(LigneChoisie, 0) =
DateTimePicker2.Value.ToString("d")

DataGridListeActes.Item(LigneChoisie, 1) = txtModifNom.Text.ToUpper

DataGridListeActes.Item(LigneChoisie, 2) = txtModifMontant.Text

DataGridListeActes.Item(LigneChoisie, 3) = cbModifType.Text

DataGridListeActes.Item(LigneChoisie, 5) = txtModifNotes.Text

Me.odaListeActes.Update(dtsListeActes, strTable)

End Sub

End Class

4 réponses

Avatar
Bonjour

voilà un lien vers un exemple qui devrait répondre à votre question il
suffit de remplaceer les SqlDataAdapter par OleDbDataAdapter

http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/vbcon/html/vbwlkwalkthroughdisplayingdatafromsingletableinwindowsform.asp

Sebastien

"DP" a écrit dans le message de
news:
Bonjour,

Quand je modifie une ligne de maon DataGrid par l'intarmédaire de


controles
correspondants à chaque colonne de mon enregistrement, les modifications
apparaissent bien dans le DataGrid mais quand je relance l'application,


elle
n'ont pas été enregistrées dans la bases Access sous-jacente. Je suppose


que
c'est parceque je n'ai pas, en fait, modifié le DataSet. J'ai essayé cette
ligne :

myRow = dtsListeActes.Tables(strTable).Select("LigneChoisie = " &
DataGridListeActes.CurrentRowIndex)

mais elle génère une erreur. Pouvez vous m'aider? (ci-dessous mon code)

Merci

Private Sub cmdModifModifier_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdModifModifier.Click


odaListeActes.SelectCommand = New OleDbCommand(strSql, MaConn)

objCB = New OleDbCommandBuilder(odaListeActes)

Dim nomTable As DataTable

nomTable = dtsListeActes.Tables(strTable)

Dim myRow As DataRow

Dim num As String

Dim LigneChoisie As Integer

LigneChoisie = DataGridListeActes.CurrentRowIndex

DataGridListeActes.Item(LigneChoisie, 0) > DateTimePicker2.Value.ToString("d")

DataGridListeActes.Item(LigneChoisie, 1) = txtModifNom.Text.ToUpper

DataGridListeActes.Item(LigneChoisie, 2) = txtModifMontant.Text

DataGridListeActes.Item(LigneChoisie, 3) = cbModifType.Text

DataGridListeActes.Item(LigneChoisie, 5) = txtModifNotes.Text

Me.odaListeActes.Update(dtsListeActes, strTable)

End Sub

End Class




Avatar
DP
Bonjour,

Je n'ai pas la possibilité d'utiliser un SqlDataAdapter, probablement
parcequ'il s'agit d'une base Access.
J'ai essayé de modifier le code comme suit mais sans succès.
Quant au lien, je le connaissait déjà mais je n'y ai pas trouvé la réponse à
mes interrogations. Mal cherché? Pas compris? Peut-être les deux.

Merci de votre aide

Dim nomTable As DataTable

nomTable = dtsListeActes.Tables(strTable)

Dim num As String

Dim LigneChoisie As Integer

LigneChoisie = (DataGridListeActes.CurrentRowIndex)

Dim myRow As DataRow = dtsListeActes.Tables(strTable).Rows(LigneChoisie)

DataGridListeActes.Item(LigneChoisie, 0) DateTimePicker2.Value.ToString("d")

DataGridListeActes.Item(LigneChoisie, 1) = txtModifNom.Text.ToUpper

DataGridListeActes.Item(LigneChoisie, 2) = txtModifMontant.Text

DataGridListeActes.Item(LigneChoisie, 3) = cbModifType.Text

DataGridListeActes.Item(LigneChoisie, 5) = txtModifNotes.Text

myRow.Item(0) = DateTimePicker2.Value.ToString("d")

myRow.Item(1) = txtModifNom.Text.ToUpper

myRow.Item(2) = txtModifMontant.Text

myRow.Item(3) = cbModifType.Text

myRow.Item(5) = txtModifNotes.Text

odaListeActes.SelectCommand = New OleDbCommand(strSql, MaConn)

objCB = New OleDbCommandBuilder(odaListeActes)

Me.odaListeActes.Update(dtsListeActes, strTable)
Avatar
Effectivement le SQlDataAdapter ne tourne qu'avec SQL SERVER ou MSDE cela
dit on peut très facilement le remplacer par un oledbdatadapter sans avoir
besoin de retaper tout le code il suffit de changer les première lettre c
tout

si votre volonté c'est de charger un dataset dans une datagrid de modifier
des cellules puis d'enregistrer les modifications dans la base pour les
afficher ensuite alors ne vous compliquez pas la vie


faites un formulaire mettez trois bouton dessus et un datagrid

dans le designer dans la partie donnée de la boite a outil VStudio
sélectionné le oledbdataadapter glissé le sur le formulaire et remplissez
les question pour ouvrir la base access faite juste un select sur une table

ensuite clic bouton droit sur le dataadapter créer et choisir générer un
groupe de donnée laissez dataset1 par défaut

cliquer sur la datagrid dans propriété choisissait datasource => dataSet11

datamember=> Le nom de la table (il va la proposer par défaut


activez le code clic sur le bouton 1 (en fait l'événement en double cliquant
sur le bouton)
appelez le bouton "chargement"
dans la procédure saisissez

Me.oledbdataadapter1.fill(me.dataset11)

dans le bouton 2 pareil appezlez le "MISE A JOUR" et double cliquez dessus

dans la procédure saisir


Me.oledbDataadpter.Update(me.dataset11)


voilà allez regarder dans la table dans la base acces vous devriez voir les
modification après pour ce qui est de mettre en majuscule ou encore de
rentrer des donnéesx directement dans le dataset c'est autre chose mais il
faut déjà avoir saisi ce que j'explique

Vous tapez vos modification directement dans la datagrid il n'y a pas besoin
de passer par des textbox

De plus ce que vous êtes entrain de vouloir programmer ne reflète pas les
problème de mise a jour mais plutot les problème de travail sur un dataset

si vous voulez ajouter une ligne à un dataset voilà la marche a suivre


dim dr as datarow

drÚtaset11.tables[0].newrow()

dr[0]= "un exemple"
dr[1]3

..... pour toute les colonnes


dataset11.tables[0].rows.add(dr)

oledbdataadapter.update(dataset11)

vous trouverez tous les renseignement sur msdn
Sebastien


"DP" a écrit dans le message de
news:
Bonjour,

Je n'ai pas la possibilité d'utiliser un SqlDataAdapter, probablement
parcequ'il s'agit d'une base Access.
J'ai essayé de modifier le code comme suit mais sans succès.
Quant au lien, je le connaissait déjà mais je n'y ai pas trouvé la réponse


à
mes interrogations. Mal cherché? Pas compris? Peut-être les deux.

Merci de votre aide

Dim nomTable As DataTable

nomTable = dtsListeActes.Tables(strTable)

Dim num As String

Dim LigneChoisie As Integer

LigneChoisie = (DataGridListeActes.CurrentRowIndex)

Dim myRow As DataRow = dtsListeActes.Tables(strTable).Rows(LigneChoisie)

DataGridListeActes.Item(LigneChoisie, 0) > DateTimePicker2.Value.ToString("d")

DataGridListeActes.Item(LigneChoisie, 1) = txtModifNom.Text.ToUpper

DataGridListeActes.Item(LigneChoisie, 2) = txtModifMontant.Text

DataGridListeActes.Item(LigneChoisie, 3) = cbModifType.Text

DataGridListeActes.Item(LigneChoisie, 5) = txtModifNotes.Text

myRow.Item(0) = DateTimePicker2.Value.ToString("d")

myRow.Item(1) = txtModifNom.Text.ToUpper

myRow.Item(2) = txtModifMontant.Text

myRow.Item(3) = cbModifType.Text

myRow.Item(5) = txtModifNotes.Text

odaListeActes.SelectCommand = New OleDbCommand(strSql, MaConn)

objCB = New OleDbCommandBuilder(odaListeActes)

Me.odaListeActes.Update(dtsListeActes, strTable)





Avatar
DP
finalement, j'ai trouvé la solution. Je suis obligé de passer par du code
car le choix de la table utilisée doit pouvoir être fait au début de
l'application.
Le choix de remplir le DataGrid par des textbox m'est imposé pour éviter de
taper une date de façon répétitive.
Enfin la fonction ajouter marche sans problème avec les TextBox.
En fait, je travaillais sur le DataGrid et non sur le DataSet ce qui
explique que ma bases Access n'étais pas mise à jour.
Ca devrait passer en utilisant le DataRow.Item et en oubliant pas le
BeginEdit et le EndEdit (je viens juste de comprendre l'intérêt de ces
commandes :=)
Je vais m'y remettre dans ce sens.

Merci de votre aide