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

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

Meilleure réponse
Messages postés
29
Date d'inscription
mardi 15 décembre 2009
Dernière intervention
12 novembre 2010
- 16 juin 2010 à 09:38
3
Merci
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 :)

Merci dullbrain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de dullbrain
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
- 16 juin 2010 à 08:49
0
Merci
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
Messages postés
29
Date d'inscription
mardi 15 décembre 2009
Dernière intervention
12 novembre 2010
- 16 juin 2010 à 08:58
0
Merci
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
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
- 16 juin 2010 à 09:04
0
Merci
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
Messages postés
29
Date d'inscription
mardi 15 décembre 2009
Dernière intervention
12 novembre 2010
- 16 juin 2010 à 09:13
0
Merci
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
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
- 16 juin 2010 à 09:13
0
Merci
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
Messages postés
29
Date d'inscription
mardi 15 décembre 2009
Dernière intervention
12 novembre 2010
- 16 juin 2010 à 09:23
0
Merci
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
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
- 16 juin 2010 à 09:40
0
Merci
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.