Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 11/05/2006, 14h34   #1
norkius
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 162
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 162
Points : 39
Points : 39
Par défaut [VBA]INSERT INTO et récupération d'id auto

Bonjour,

Voilà j'effectue une requête d'insertion dans une table avec une clé primaire id qui est un numéroAuto. J'ai ensuite besoin de récupérer l'id qui vient d'être crée par Access pour une autre requête.
Jusqu'a maintenant je crée un recordset juste derrière ma requête INSERT INTO qui contient l'ensemble des id de la table (Select id from table) et je fais un recorset.moveLast pour récupérer le dernier id
Seulement je trouve que cette solution est très "sale". Par exemple il suffit que ma table contienne des trous dans les id et mon algo ne fonctionnerai plus...

Je pense qu'il doit exister une façon de faire plus propre pour récupérer l'id que Access vient de créer... Comment faites vous ou feriez vous?

Merci!!
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h47   #2
Demco
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 2 007
Points : 2 007
Citation:
Seulement je trouve que cette solution est très "sale". Par exemple il suffit que ma table contienne des trous dans les id et mon algo ne fonctionnerai plus...
Peu importe les trous, le dernier numero auto insere sera toujours le plus grand.

Citation:
Je pense qu'il doit exister une façon de faire plus propre pour récupérer l'id que Access vient de créer... Comment faites vous ou feriez vous?
En effet.

En espérant t'aider.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h49   #3
Arkham46
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 442
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 442
Points : 8 142
Points : 8 142
slt,

Citation:
Par exemple il suffit que ma table contienne des trous dans les id et mon algo ne fonctionnerai plus...
les trous de numéro auto ne sont pas bouchés

la FAQ donne d'autres méthodes
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h51   #4
norkius
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 162
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 162
Points : 39
Points : 39
J'ai fait un tour dans la FAQ avant de poster j'ai du louper le paragraphe qui donne d'autres méthodes... J'y retourne alors
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h54   #5
norkius
Nouveau Membre du Club
 
Inscription : juin 2002
Messages : 162
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 162
Points : 39
Points : 39
Ok d'après ce que je comprends il faut que j'utilise directement un recordset pour faire mon insertion et non l'execution d'une requête SQL sur ma database.

J'essaie donc ça...
Merci et désolé d'avoir posté alors que la solution est dans la FAQ
norkius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h59   #6
Demco
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 2 007
Points : 2 007
Citation:
Envoyé par Demco
Peu importe les trous, le dernier numero auto insere sera toujours le plus grand.

En effet.

En espérant t'aider.
Il fallait cliquer sur le petit bonhomme FAQ, je mettrais des liens plus explicites a l'avenir c'est vrai qu'il est un peu caché ...
http://access.developpez.com/faq/?re...er+numero+auto

En esperant t'aider.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 14h17   #7
DidZTM
Invité de passage
 
Homme Diego Barudy
Développeur informatique
Inscription : novembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Diego Barudy
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique
Secteur : Associations - ONG

Informations forums :
Inscription : novembre 2012
Messages : 3
Points : 3
Points : 3
Par défaut Solution propre

Bonjour à tous !
Après avoir galéré avec cette bêtise.
Voici une solution simple pour régler le problème.
Utiliser ("SELECT @@Identity").Collect(0).
Ceci permet de récupérer le dernier enregistrement effectué.

Voici comment je l'utilise dans un commitTrans :
------------------
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim id as Integer
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
        .connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                                   "Data Source=C:\db.accdb "<-Path de la connection,ici db access
        .CursorLocation = adUseClient
        .Properties("Jet OLEDB:Database Password") = mdbpass <- mot de passe
        .Open
End With
cn.BeginTrans
cn.Execute ("INSERT INTO X (champ) VALUES("y")",dbFailOnError)
id=cn.Execute (("SELECT @@Identity").Collect(0))
cn.CommitTrans
cn.Close
Debug.print id
--------------------------------
Voili voilou

DidZTM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 16h48   #8
Soni03
Invité régulier
 
Homme
Ingénieur développement logiciels
Inscription : décembre 2010
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : décembre 2010
Messages : 26
Points : 6
Points : 6
Code :
1
2
3
 
 
id=cn.Execute (("SELECT @@Identity").Collect(0))
Cette ligne ne fonctionne pas et elle est interprété comme une erreur dans mon VBA... Bizarre non ?
Soni03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 19h17   #9
Chrysostome
Membre du Club
 
Inscription : novembre 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 116
Points : 68
Points : 68
Par défaut Une autre possibilité

Une autre possibilité que j'utilise toujours:
Citation:
Dim rst As Recordset
Dim dbl_a as Double
Set rst = CurrentDb.OpenRecordset("Ta_Table")
rst.AddNew
dbl_a = rst("Id")
rst.update
rst.close
dbl_a= Id créée.

Voili, voilou, voilà!
Chrysostome est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h12.


 
 
 
 
Partenaires

Hébergement Web