OVH Cloud OVH Cloud

Récupération d'un Autonumber

8 réponses
Avatar
Drizzit
Bonjour =E0 toutes et =E0 tous et bonne ann=E9e.

Je cherche un moyen apr=E8s une instuction SQL "INSERT INTO..." de
r=E9cup=E9rer la valeur d'un autonumber, sachant que je ne souhaite pas
de solution du genre :
- SELECT MAX(MonChampID) ...
- Faut faire un recordset et r=E9cup la valeur du champ apr=E8s l Update.

Merci d'avance

8 réponses

Avatar
J-Pierre
Bonjour,

Je ne sais pas si c'est possible après une instruction SQL INSERT INTO, par contre, en utilisant ADO, ça marche très bien,
voilà un exemple de code

J-Pierre

Dim strgSQL As String
Dim Wident As Long
Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection

Set cnn = CurrentProject.Connection
cnn.BeginTrans

strgSQL = "SELECT T001_rendezVous.* FROM T001_rendezVous " & _
"WHERE T001_code_client = " & Me.codeClient & ";"
rst.Open strgSQL, cnn, adOpenKeyset, adLockOptimistic

rst.AddNew
rst!T001_code_client = Me.codeClient
rst!T001_groupe = Me.groupe
rst!T001_prestation = Me.prestation
rst!T001_disposition = Me.disposition

On Error Resume Next

rst.Update

If cnn.Errors.Count > 0 Then
rst.Close
cnn.RollbackTrans
Set cnn = Nothing
On Error GoTo 0
MsgBox "blablabla" & vbCrLf & vbCrLf & strgSQL, _
vbOKOnly, "AJOUTER LE RENDEZ-VOUS"
Exit Sub
End If

On Error GoTo 0

Wident = rst!T001_ident
rst.Close
MsgBox rst!T001_ident & "," & Wident

"Drizzit" a écrit dans le message de news:
Bonjour à toutes et à tous et bonne année.

Je cherche un moyen après une instuction SQL "INSERT INTO..." de
récupérer la valeur d'un autonumber, sachant que je ne souhaite pas
de solution du genre :
- SELECT MAX(MonChampID) ...
- Faut faire un recordset et récup la valeur du champ après l Update.

Merci d'avance
Avatar
Drizzit
Ok merci pour cette solution, mais justement, je ne souhaite pas
utiliser d'objet Recordset.
Je suis toujours preneur pour autres solutions... idées...
Avatar
J-Pierre
Simple curiosité, pourquoi ne veux-tu pas utiliser un objet recordset ?

"Drizzit" a écrit dans le message de news:
Ok merci pour cette solution, mais justement, je ne souhaite pas
utiliser d'objet Recordset.
Je suis toujours preneur pour autres solutions... idées...
Avatar
Eric
et avec la fonction de domaine DMax() sur la table ?

Ok merci pour cette solution, mais justement, je ne souhaite pas
utiliser d'objet Recordset.
Je suis toujours preneur pour autres solutions... idées...


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Drizzit
En faite il s'agit d'une application dans laquelle on référence des
instructions SQL (SELECT, UPDATE, INSERT, ...) qu'on execute
successivement, et par une "espèce" de macro langage, on peut ajouter
des données FILLE (Ligne de commande) à une donnée MERE
(commande)....
Avatar
Drizzit
Oui, mais si entre le moment on je crée mon enregistrement et le
moment ou je fais mon DMax, une autre personne crée un nouvelle
enregistrement, je vais récupérer son ID, mais pas le mien.
Nan, l'idéale serait d'avoir l'équivalent "SELECT @@IDENTITY" de SQL
Serveur...
Mais j'ai beau cherché, je ne trouve pas, sauf gérer soit même les
ID... Mais ça va faire du changement si je fais cela...

Merci en tout cas pour les idées...
Avatar
3stone
Salut,

"Drizzit"
Oui, mais si entre le moment on je crée mon enregistrement et le
moment ou je fais mon DMax, une autre personne crée un nouvelle
enregistrement, je vais récupérer son ID, mais pas le mien.
Nan, l'idéale serait d'avoir l'équivalent "SELECT @@IDENTITY" de SQL
Serveur...
Mais j'ai beau cherché, je ne trouve pas, sauf gérer soit même les
ID... Mais ça va faire du changement si je fais cela...



Une insertion via un CurentDb.execute ne permet pas de récupérer
l'autonumber en multiuser...

Si dans la table exite un index unique, il reste... quelque chose comme :
Select ID from table Where index= le ou les champs


Pas forcément joli non plus ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Drizzit
C'est bien ce que je pensais.... Pas de solution.
Par contre l'idée de l'index peut être une solution...
Merci