ACCESS: Dernière valeur d'un champ automatique

flyingace Messages postés 5 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 octobre 2003 - 26 août 2003 à 17:23
flyingace Messages postés 5 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 octobre 2003 - 28 août 2003 à 17:09
Je désire faire une requete d'insertion dans une table d'une base access. Cette table comprends un champs qui est incrémenté de façon automatique.
Soit:

ID | Nom | Prénom | Age
-----------------------------------------------
Auto | Text | Text | Numérique

et:

Dim dbs as Database

set dbs = opendatabase("mabase.mdb")
requete = "INSERT INTO MA_TABLE (Nom, Prenom, Age) VALUES ('Minet', 'Gros', 42);"
dbs.execute requete

Ca ca marche nickel, mais moi j'aimerais recuper la valeur du champs ID que je viens d'insérer.

Bien sur je peux faire une requete "SELECT" derrière, mais je préférerais une méthode un peu plus soft.

Peut être que la façon dont je fait ma requete ne permet pas de faire cela, je suis preneur de toutes les solutions.

3 réponses

flyingace Messages postés 5 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 octobre 2003
26 août 2003 à 17:27
-------------------------------
Réponse au message :
-------------------------------
Bonjour
> Je désire faire une requete d'insertion dans une table d'une base access. Cette table comprends un champs qui est incrémenté de façon automatique.
> Soit:
>
> ID | Nom | Prénom | Age
> -----------------------------------------------
> Auto | Text | Text | Numérique
>
> et:
>
> Dim dbs as Database
>
> set dbs = opendatabase("mabase.mdb")
> requete = "INSERT INTO MA_TABLE (Nom, Prenom, Age) VALUES ('Minet', 'Gros', 42);"
> dbs.execute requete
>
> Ca ca marche nickel, mais moi j'aimerais recuper la valeur du champs ID que je viens d'insérer.
>
> Bien sur je peux faire une requete "SELECT" derrière, mais je préférerais une méthode un peu plus soft.
>
> Peut être que la façon dont je fait ma requete ne permet pas de faire cela, je suis preneur de toutes les solutions.

Merci !!!!!
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 août 2003 à 08:52
Perso, je connais pas d'autre solution que le "SELECT" derrière
Christophe R.
0
flyingace Messages postés 5 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 octobre 2003
28 août 2003 à 17:09
-------------------------------
Réponse au message :
-------------------------------

> Je désire faire une requete d'insertion dans une table d'une base access. Cette table comprends un champs qui est incrémenté de façon automatique.
> Soit:
>
> ID | Nom | Prénom | Age
> -----------------------------------------------
> Auto | Text | Text | Numérique
>
> et:
>
> Dim dbs as Database
>
> set dbs = opendatabase("mabase.mdb")
> requete = "INSERT INTO MA_TABLE (Nom, Prenom, Age) VALUES ('Minet', 'Gros', 42);"
> dbs.execute requete
>
> Ca ca marche nickel, mais moi j'aimerais recuper la valeur du champs ID que je viens d'insérer.
>
> Bien sur je peux faire une requete "SELECT" derrière, mais je préférerais une méthode un peu plus soft.
>
> Peut être que la façon dont je fait ma requete ne permet pas de faire cela, je suis preneur de toutes les solutions.

J'ai trouvé une solution pas très élégante à mon goût mais qui marche:
On utilise pas "INSERT" mais une requete SELECT associé à un recordset et on utilise le recorset pour faire l'insertion. Et ensuite par l'intermédiaire du recordset on récupère la valeur du champs 'ID'.
Un code qui clarifie tout:

Dim dbs as Database
Dim rs as recordset
Dim requete as string
Dim ID as Long

set dbs = opendatabase("mabase.mdb")
requete = "SELECT * FROM MA_TABLE;"
Set rs = dbs.OpenRecordset(requete, dbOpenDynaset)
rs.AddNew
rs.fields("Nom") = "Minet"
rs.fields("Prenom") = "Gros"
rs.fields("Age") = 42
rs.Update
rs.MoveLast
ID = CLng(rs.fields("ID").Value)

J'espère pouvoir aider ainsi aussi d'autres personnes.

Je remercie Magidev pour son tutorial "Utiliser Vb et le SQL" qui m'a mis sur la piste de la solution:
http://www.vbfrance.com/article.aspx?Val=7114
0
Rejoignez-nous