Sequence et gestion des conflits sous ACCESS

cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007 - 18 oct. 2006 à 18:27
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 - 20 oct. 2006 à 08:19
Bonjour,

Je doit reprendre un intranet existant et faire des évolutions.
La techno est imposée: ASP et Access.

Dans ma table Access, j'ai une table commande. Avec un Numéro de commande, clé primaire, number automatique.

Lorsqu'une personne passe une commande, on fais un INSERT dans la table commande sans le numéro de commande (vu qu'il est positionné automatiquement).

Je doit aujourd'hui, afficher à l'écran le Numéro de commande qui viens d'être attribué à la commande passée.

Je me dit que je peux modifier la base et rendre ce numéro de commande unique (le laisser en clé primaire), mais enlever l'attribut automatique. Dans le process ASP, je récupère le dernier numéro, je l'incrémente de 1, je fais un INSERT avec le numéro de commande et je l'affiche à l'écran....

Mais je me demande si c'est "pro" de faire ca, au cas ou 2 utilisateurs en meme temps demanderai un n+1 du numéro et ferais un INSERT juste apres avec le meme numéro. Ok je peux afficher un message demandant a recommancer pour le 2eme, mais existe t'il une autre methode plus "pro"?

(J'avais pensé a mettre une sequence, et le process access irait demander le dernier numéro de sequence... le numéro de commande serais alors unique, mais j'ai pas l'impression qu'on puisse faire cela en ACCESS)

Merci de vos conseils

3 réponses

tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
19 oct. 2006 à 08:26
Lorsque tu fais un INSERT en ADO
Tu fais un rs.update avant le rs.close
Et bien, lorsque tu fais ton rs.update
Ta nouvelle ligne est créée.
Tu peux donc récupérer immédiatement le n° nouvellement créer en faisant

blabla....
rs.update
Me.Numéro = rs("Num_CMD")
rs.close
TBBUIM
0
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 novembre 2007
19 oct. 2006 à 11:33
Merci tbbuim1, mais ca ne marche pas.

Donc pour résumer
j'ai une table "Commande" avec un index auto (Numero_Commande), un nom et un prenom
Si je fais:


dim conn
dim NumeroCommande
dim RS

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "MaBase","",""
Set RS = Server.CreateObject("ADODB.RecordSet")
Const adLockOptimistic = 3
RS.Open "Commande", conn, , adLockOptimistic, adCmdTable
RS.AddNew
RS("Nom") = "tbbuim1"
RS("Prenom") = "vbfrance"
RS.update
NumeroCommande = RS("Numero_Commande")
Response.write NumeroCommande
RS.close
conn.close
Set conn=Nothing

=> Je ne vois pas affichier mon index auto. [Response.write NumeroCommande]
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
20 oct. 2006 à 08:19
Pourtant j'ai une application où je fais
rs.open "Table",conn,1,2
rs.addNew
  rs("CH_Saisie") = EMP_ID
  rs("CH_DateSaisie") = Now
  rs.Update
  IdCh = rs("CH_ID")
rs.Close

Et j'ai bien le n° nouvellement créé dans IdCH, peut être est-ce ton response.write
qui ne te renvoi pas la bonne valeur, essayes avec
Debug.print RS("Numero_Commande") 'et tu regardes avec Ctrl+G
ou alors fais un MsgBox RS("Numero_Commande")
TBBUIM
0
Rejoignez-nous