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

Données non enregistrées dans ma base...

7 réponses
Avatar
V. Desjardins
Salut à tous,


Je débute en VB.Net, et cette fosi, j'ai un problème avec ma base de données
SQL Server.

Je vous explique brièvement: ma fenêtre principale ouvre une fenêtre qui
affiche tous les utilisateurs stockés en base.

Dans cette fenêtre, j'ai un bouton qui me permet d'ajouter un nouvel
utilisateur. Lorsque je clique dessus, s'ouvre une nouvelle fenêtre d'ajout
d'utilisateur. Je remplis tous les champs, je valide, la fenêtre se ferme et
je reviens sur la fenêtre qui affiche tous les users : là, je vois bien le
nouvel utilisateur qui a été inséré.

Mais lorsque je ferme l'appli et que je relance, ce nouvel utilisateur n'y
est plus ! En fait, il n'est pas stocké en base.

Voici la fonction que j'ai écrite, et qui me permet d'ajouter un nouvel
utilisateur:

Private Sub AddUser()

StatusLabel.Text = "Creating new User ... "

Dim myUserDialog As New dlgUser

myUserDialog.DataSource = myGrpusrDataSet
myUserDialog.UserID = 0
myUserDialog.GroupID = cboGroups.SelectedValue

Dim result As DialogResult
result = myUserDialog.ShowDialog

If result = Windows.Forms.DialogResult.OK Then

Try
Dim user As grpusrDataSet.UserRow
user = myGrpusrDataSet.User.NewUserRow

user.UserName = myUserDialog.UserName
user.Password = myUserDialog.UserPass
user.RefGroup = myUserDialog.GroupID

myGrpusrDataSet.User.AddUserRow(user)

Dim rowsAffected As Integer = 0
rowsAffected = UserTableAdapter.Update(user)

If rowsAffected > 0 Then
StatusLabel.Text = "New User Created - '" &
myUserDialog.username & "'"
Else
StatusLabel.Text = "Problem creating new user. Could
not save into the database."
End If

Catch ex As Exception
MessageBox.Show("Problem creating user: " & ex.Message)
End Try

Else
StatusLabel.Text = "New user operation canceled."
End If

myUserDialog = Nothing

End Sub

Personnellement, je n'arrive pas à trouver ce qui cloche. Je précise que
j'ai écrit cette fonction en suivant un tutorial. Je suppose que j'ai fait
un erreur de débutant, mais je ne sais pas laquelle.

Quelqu'un aurait-il une idée ??

Par avance un grand merci

7 réponses

Avatar
Ambassadeur Kosh
ton user, il ne fait pas partie du dataset. tu l'as Newé, mais pas Addé.
l'adapter, il est sensé "reflechir" une table. une ligne en l'air, elle
n'est pas encore dans le dataset, elle n'a pas de marqueur Added, Deleted,
Modified ou Unchanged, mais un marqueur Detached.

donc sois t'as mal lu, sois tu peux jetter ce tuto.

dans ton cas, il aurait mieux valu ecrire

user = datatable.AddNewUser(param1,param2,param3...)

et prend l'habitude de laisser l'Update sur le datatable faire le boulot à
la fin. (la il est sur le user)
Avatar
V. Desjardins
Merci de ta réponse.

Le problème, c'est que tu vas un peu vite... Je ne suis pas sûr d'avoir tout
bien compris...

Tu dis qu'il faut que j'écrive user =
datatable.AddNewUser(param1,param2,param3...)

Questions:
- Que reprénsentent param1, param2, etc. ?
- Je dois écrire cela à la place de quoi exactement dans mon code ?

En gros, où se trouve le problème dans mon code? Désolé de t'embêter, mais
comme je le disais, je débute, et toutes ces histoires d'adapter et
compagnie, ce n'est pas très clair pour moi. Il y a certainement quelque
chose qui m'échappe dans tout ça, et ça m'embête, car si je veux faire du
code, il faut bien que je comprenne !!!

Merci encore de ton aide.

A+


"Ambassadeur Kosh" a écrit dans le message de
news: eaaZv%23%
ton user, il ne fait pas partie du dataset. tu l'as Newé, mais pas Addé.
l'adapter, il est sensé "reflechir" une table. une ligne en l'air, elle
n'est pas encore dans le dataset, elle n'a pas de marqueur Added, Deleted,
Modified ou Unchanged, mais un marqueur Detached.

donc sois t'as mal lu, sois tu peux jetter ce tuto.

dans ton cas, il aurait mieux valu ecrire

user = datatable.AddNewUser(param1,param2,param3...)

et prend l'habitude de laisser l'Update sur le datatable faire le boulot à
la fin. (la il est sur le user)



Avatar
Ambassadeur Kosh
> Tu dis qu'il faut que j'écrive user =
datatable.AddNewUser(param1,param2,param3...)

Questions:
- Que reprénsentent param1, param2, etc. ?
- Je dois écrire cela à la place de quoi exactement dans mon code ?



c'est une façon de faire.
en fait, si tu fais un New user et que tu fais zedatatable.Add(user), ça le
fera aussi
regardes les noms des parametres dans l'intellisense, tu vas voir que ce
sont les valeurs des "champs" pour ton user

donc pour conclure, new datarow, settage des champs, Add dans la datatable,
et demande d'Update au datadapter.


En gros, où se trouve le problème dans mon code? Désolé de t'embêter, mais
comme je le disais, je débute, et toutes ces histoires d'adapter et
compagnie, ce n'est pas très clair pour moi. Il y a certainement quelque
chose qui m'échappe dans tout ça, et ça m'embête, car si je veux faire du
code, il faut bien que je comprenne !!!



créer une ligne, ça ne veut pas dire qu'elle fait partie de la table. du
moins pas encore. elle le sera si toutes tes opérations dessus aboutissent,
et si en l'insérant (add), tu ne violes pas de contraintes... (clef
primaires etc etc)

pour résumer, le dataset, c'est plusieurs datatable. chacune contient deux
ou trois lignes impliquées dans ton action et souvent en relation, mais
c'est tout. je veux dire qu'il n'y a pas la totalité des lignes de la base
que tu ramenes à chaque fois. dessus, tu fais des modifs, et l'adapter, son
taf, c'est de repliquer le contenu de ton dataset vers ta base de données.
une ligne ajoutée dans la datatable donnera lieu a un INSERT sur la table
sql associée, une suppression donnera lieu à un DELETE...

c'est plus clair ?
Avatar
V. Desjardins
Je te remercie, je pense que c'est plus clair pour moi à présent, mais il me
reste un (GROS) doute.

J'ai bien compris que le TableAdapter copie les données entre la DB et le
dataset. Le dataset contient des datatables, c'est bien ça ?

Mais quand tu dis:

new datarow, settage des champs, Add dans la datatable,
et demande d'Update au datadapter.

J'ai l'impression que c'est ce que je fais. Regarde:

- new datarow :
Dim user As grpusrDataSet.UserRow
user = myGrpusrDataSet.User.NewUserRow

- settage des champs :
user.UserName = myUserDialog.UserName
user.Password = myUserDialog.UserPass
user.RefGroup = myUserDialog.GroupID

- Add dans la datatable :
myGrpusrDataSet.User.AddUserRow(user)

- demande d'Update au datadapter :
Dim rowsAffected As Integer = 0
rowsAffected = Me.UserTableAdapter.Update(user)

C'est pas comme ça ? Le problème, c'est que lorsque je fais ça,
rowsAffected=1, donc je suppose que le TableAdapter a bien fait l'update de
mon enregistrement. Or comme je le disais au départ, ben rien ne s'est en
fait passé puisque je constate qu'en base, rien n'a été ajouté.

J'ai surfé pas mal sur le net pour trouver des trucs là-dessus, mais j'ai
toujours pas trouvé mon bonheur. J'ai passé plus de deux heures ce soir à
essayer de faire marcher mon code... en vain !! J'te jure, ça m'déprime de
même pas arriver à ajouter un p... d'enregistrement dans ma base. Mon appli
est loin d'être finie à ce rythme !!!

Suis-je le seul à avoir ce type de problème ? Ma parole, j'me demande si je
serais pas un peu con ???


"Ambassadeur Kosh" a écrit dans le message de
news:
Tu dis qu'il faut que j'écrive user =
datatable.AddNewUser(param1,param2,param3...)

Questions:
- Que reprénsentent param1, param2, etc. ?
- Je dois écrire cela à la place de quoi exactement dans mon code ?



c'est une façon de faire.
en fait, si tu fais un New user et que tu fais zedatatable.Add(user), ça
le fera aussi
regardes les noms des parametres dans l'intellisense, tu vas voir que ce
sont les valeurs des "champs" pour ton user

donc pour conclure, new datarow, settage des champs, Add dans la
datatable, et demande d'Update au datadapter.


En gros, où se trouve le problème dans mon code? Désolé de t'embêter,
mais comme je le disais, je débute, et toutes ces histoires d'adapter et
compagnie, ce n'est pas très clair pour moi. Il y a certainement quelque
chose qui m'échappe dans tout ça, et ça m'embête, car si je veux faire du
code, il faut bien que je comprenne !!!



créer une ligne, ça ne veut pas dire qu'elle fait partie de la table. du
moins pas encore. elle le sera si toutes tes opérations dessus
aboutissent, et si en l'insérant (add), tu ne violes pas de contraintes...
(clef primaires etc etc)

pour résumer, le dataset, c'est plusieurs datatable. chacune contient deux
ou trois lignes impliquées dans ton action et souvent en relation, mais
c'est tout. je veux dire qu'il n'y a pas la totalité des lignes de la base
que tu ramenes à chaque fois. dessus, tu fais des modifs, et l'adapter,
son taf, c'est de repliquer le contenu de ton dataset vers ta base de
données. une ligne ajoutée dans la datatable donnera lieu a un INSERT sur
la table sql associée, une suppression donnera lieu à un DELETE...

c'est plus clair ?




Avatar
Ambassadeur Kosh
> - new datarow :
- settage des champs :
- Add dans la datatable :


ok, respect (j'avais probablement mal lu)

je ferais plutot ça
Me.UserTableAdapter.Update(myGrpusrDataSet.User)

mais si t'a un rowaffected à 1, ça veut bien dire que c'est passé dans le
tuyau
donc soit ta connection string designe une autre base de donnée et tu t'es
rendu compte de rien, sois tes requetes font autre chose que ce que tu
t'attends à trouver (autre table qui n'a rien à voir, un where dans le
select qui vient jetter ta ligne au prochain fill...), sois c'est toi qui
regarde pas au bon endroit...

juste pour être sur, essaye ça

int countBefore = myGrpusrDataSet.User.Rows.Count ;

Me.UserTableAdapter.Update(myGrpusrDataSet.User) ;
myGrpusrDataSet.User.Clear() ;

Me.UserTableAdapter.Fill(myGrpusrDataSet.User) ;

int countAfter = myGrpusrDataSet.User.Rows.Count ;

// le count doit avoir bougé de 1

apres ça, je seche
Avatar
V. Desjardins
Salut Ambassadeur !


Ben figure-toi que j'ai fini par trouver !


En fait, il a fallu que je modifie la propriété "Copy to output directory"
de ma base. Je lui ai attribué la valeur "Copy if newer".

Bon, maintenant tout marche (et en fait, mon code était bon depuis le
début... ggrrrr...). J'suis content, mais j'ai quand même pas tout compris.

J'ai vu que d'autres newbies avaient eu ce problème (notamment un à qui j'ai
répondu car le pauvre, il désespérait comme moi). Mais j'ai aussi posté un
nouveau sujet, car je n'ai pas vraiment tout compris. Je l'ai nommé :
"Données non enregistrées dans la database -> pour les newbies comme moi
;-)"

Si jamais t'as 2 minutes (je suis sûr que tu sauras répondre à ma question),
ça serait sympa. Je pense que ce nouveau sujet peut être intéressant pour
d'autres débutants.

Merci encore pour ton aide précieuse.

A+

Olivier





"Ambassadeur Kosh" a écrit dans le message de
news: %
- new datarow :
- settage des champs :
- Add dans la datatable :


ok, respect (j'avais probablement mal lu)

je ferais plutot ça
Me.UserTableAdapter.Update(myGrpusrDataSet.User)

mais si t'a un rowaffected à 1, ça veut bien dire que c'est passé dans le
tuyau
donc soit ta connection string designe une autre base de donnée et tu t'es
rendu compte de rien, sois tes requetes font autre chose que ce que tu
t'attends à trouver (autre table qui n'a rien à voir, un where dans le
select qui vient jetter ta ligne au prochain fill...), sois c'est toi qui
regarde pas au bon endroit...

juste pour être sur, essaye ça

int countBefore = myGrpusrDataSet.User.Rows.Count ;

Me.UserTableAdapter.Update(myGrpusrDataSet.User) ;
myGrpusrDataSet.User.Clear() ;

Me.UserTableAdapter.Fill(myGrpusrDataSet.User) ;

int countAfter = myGrpusrDataSet.User.Rows.Count ;

// le count doit avoir bougé de 1

apres ça, je seche



Avatar
Ambassadeur Kosh
> En fait, il a fallu que je modifie la propriété "Copy to output directory"
de ma base. Je lui ai attribué la valeur "Copy if newer".
Bon, maintenant tout marche (et en fait, mon code était bon depuis le
début... ggrrrr...). J'suis content, mais j'ai quand même pas tout
compris.



oh, je le crois pas, c'etait encore ça.

J'ai vu que d'autres newbies avaient eu ce problème (notamment un à qui
j'ai répondu car le pauvre, il désespérait comme moi). Mais j'ai aussi
posté un nouveau sujet, car je n'ai pas vraiment tout compris. Je l'ai
nommé : "Données non enregistrées dans la database -> pour les newbies
comme moi ;-)"



ouaih, je sais, c'est un peu surprenant, mais en fait, ça a son interet.