Update dataset & clé primaire auto increment [Résolu]

dullbrain 29 Messages postés mardi 15 décembre 2009Date d'inscription 12 novembre 2010 Dernière intervention - 16 juin 2010 à 08:40 - Dernière réponse : Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention
- 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 :)
Afficher la suite 

Votre réponse

8 réponses

dullbrain 29 Messages postés mardi 15 décembre 2009Date d'inscription 12 novembre 2010 Dernière intervention - 16 juin 2010 à 09:38
+3
Utile
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 :)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dullbrain
lolokun 1241 Messages postés mardi 10 octobre 2006Date d'inscription 27 août 2013 Dernière intervention - 16 juin 2010 à 08:49
0
Utile
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..
Commenter la réponse de lolokun
dullbrain 29 Messages postés mardi 15 décembre 2009Date d'inscription 12 novembre 2010 Dernière intervention - 16 juin 2010 à 08:58
0
Utile
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 ?
Commenter la réponse de dullbrain
lolokun 1241 Messages postés mardi 10 octobre 2006Date d'inscription 27 août 2013 Dernière intervention - 16 juin 2010 à 09:04
0
Utile
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..
Commenter la réponse de lolokun
dullbrain 29 Messages postés mardi 15 décembre 2009Date d'inscription 12 novembre 2010 Dernière intervention - 16 juin 2010 à 09:13
0
Utile
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.
Commenter la réponse de dullbrain
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 16 juin 2010 à 09:13
0
Utile
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.
Commenter la réponse de Mayzz
dullbrain 29 Messages postés mardi 15 décembre 2009Date d'inscription 12 novembre 2010 Dernière intervention - 16 juin 2010 à 09:23
0
Utile
Sauf que nulle part je ne fais d'INSERT dans monde code, c'est là qu'est l'os !
Commenter la réponse de dullbrain
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 16 juin 2010 à 09:40
0
Utile
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.
Commenter la réponse de Mayzz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.