Update dataset & clé primaire auto increment

Résolu
dullbrain Messages postés 29 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 12 novembre 2010 - 16 juin 2010 à 08:40
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 16 juin 2010 à 09:40
Bonjour à tous,

je suis actuellement en train de travailler avec une base données. Dans celle ci se trouve une table USERS avec 4 champs plus un en auto increment.

Les modifications dans la table se passent par dataset, et du coup, dans le remplissage du champ "N°" de la nouvelle ligne créée, je ne sais pas quoi mettre :


dtr = dts.Tables("USERS").NewRow()

With dtr
.Item("N°") = 'que mettre ?
.Item("NOM") = nom
.Item("PRENOM") = prenom
.Item("PASSWORD") = pw
.Item("RANK") = rank
End With

Merci d'avance de vos réponses et bonne journée :)

8 réponses

dullbrain Messages postés 29 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 12 novembre 2010
16 juin 2010 à 09:38
Merci à tous d'avoir pris quelques instant pour essayer de m'aider, je viens de trouver la solution, pour ceux que ça intéresse :

mon champs "PASSWORD" créait une erreur car il s'agit d'un nom réservé dans Access, le simple fait de le renommer dans la database et d'actualiser en conséquence dans le code a tout solutionné.

Merci encore et bonne journée à vous :)
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
16 juin 2010 à 08:49
Bonjour,

L'incrémentation se fera automatiquement dans ta base, il n'y a rien à mettre pour ce champ.


L'expérience, c'est une connerie par jour, mais jamais la même..
0
dullbrain Messages postés 29 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 12 novembre 2010
16 juin 2010 à 08:58
Quand je ne mets rien pour cette colonne dans le With, il me dit une erreur de syntaxe dans l'instruction INSERT INTO. J'ai isolé la ligne qui fait planter, c'est juste celle ci :

dta.Update(dts, "USERS")

ma table s'appelle bien USERS, et j'ai une messageBox avant insertion qui me montre bien que les valeurs pour les champs sont correctes.

La seule particularité est que pour le rang, dans ma base Access, c'est une liste de 5 valeurs à choisir. Le rang avant insertion est exactement tel que défini dans la base, mais c'est un string, peut-être que ça pourrait bloquer ?
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
16 juin 2010 à 09:04
Pourrais-tu mettre un peu plus de code, et notamment les déclarations de tes variables (surtout la variable rank) ainsi que les valeurs qu'elles doivent contenir?

Que veux-tu dire par :
Le rang avant insertion est exactement tel que défini dans la base, mais c'est un string

La liste c'est une liste de string?ou de valeur numérique?si rang est de type string à l'intérieur de ta base, peut-être te faudra t-il utiliser la fonction cstr ?


L'expérience, c'est une connerie par jour, mais jamais la même..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dullbrain Messages postés 29 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 12 novembre 2010
16 juin 2010 à 09:13
En gros un formulaire va appeler la fonction d'ajout avec 4 paramètres, un nom, un prénom, un password et un rang.

Tout ça fonctionne, je vérifie que le rang est bien une des valeurs autorisées dans ma base

Public Function add_user(ByVal nom As String, ByVal prenom As String, ByVal pw As String, ByVal rank As String)

Try
dts.Clear()
cmd = New OleDbCommand("SELECT * FROM USERS")
dta = New OleDbDataAdapter(cmd)
cmd.Connection = connect
dta.Fill(dts, "USERS")
dtt = dts.Tables("USERS")

If dtt.Rows.Count > 0 Then

For i As Integer = 0 To dtt.Rows.Count - 1
If dtt.Rows(i).Item("NOM") nom And dtt.Rows(i).Item("PRENOM") prenom Then
MsgBox("La personne est déjà présente", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erreur de doublon")
Return False
End If
Next
End If


dtr = dts.Tables("USERS").NewRow()

With dtr
.Item("NOM") = nom
.Item("PRENOM") = prenom
.Item("PASSWORD") = pw
.Item("RANK") = rank
End With

MsgBox("nom : " & nom & " prénom : " & prenom & " mdp : " & pw & " droits : " & rank)


dts.Tables("USERS").Rows.Add(dtr)

cmdbld = New OleDbCommandBuilder(dta)

dta.Update(dts, "USERS")

Catch ex As Exception
MsgBox("Erreur : " & ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Erreur détectée")
End Try

Return False
End Function



J'ai une fonction qui fonctionne à l'identique pour ajouter une affaire et elle ne pose pas problème, c'est ça que je ne comprends pas.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
16 juin 2010 à 09:13
Salut,

Modifie ta requête INSERT, enlève le paramètre ID.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
dullbrain Messages postés 29 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 12 novembre 2010
16 juin 2010 à 09:23
Sauf que nulle part je ne fais d'INSERT dans monde code, c'est là qu'est l'os !
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
16 juin 2010 à 09:40
Si tu bosse avec une base de données tu as forcément une requête insert

cmdbld = New OleDbCommandBuilder(dta) 


Cette ligne permet de générer automatiquement des requêtes INSERT, UPDATE et DELETE en fonction de ta requête SELECT.

Crée ta propre requête INSERT en remplacent la ligne par celle-ci :

dta.InsertCommand.CommandText = "INSERT INTO USERS NOM, PRENOM, PASSWORD, RANK VALUES ('" & nom & "', '" & prenom & "', '" & pw & "', '" & rank & "')"

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Rejoignez-nous