cs_Talere
Messages postés102Date d'inscriptionvendredi 29 mars 2002StatutMembreDernière intervention14 février 2013
-
11 avril 2006 à 16:23
cs_Talere
Messages postés102Date d'inscriptionvendredi 29 mars 2002StatutMembreDernière intervention14 février 2013
-
12 avril 2006 à 08:56
Bonjour,
J'ai une instrcution SQL qui m'insère une ligne dans une de mes tables Access ("INSERT INTO Ma_Table(Mon_Champ) VALUES (ma_valeurvaleur)"). J'execute cette requete via ADODB mais le problème, c'est que j'aurais besoin de la clé primaire qui a été généré lors de cette création (champs "Mon_ID" de la table "Ma_Table").
Y-a-t-il un moyen rapide d'y parvenir ? car justement, vu le nombre de demandes, un find sur un recordset pourrait prendre trop de temps ...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 avril 2006 à 20:13
Salut
En fait, ceci est un faux problème.
Dans une DB, les clés primaires sont faites pour dissocier des enregistrements et faire le lien avec d'autres tables.
Elles ne sont normalement pas faites pour identifier extérieurement un enregistrement.
Sous MySQL, il existe LAST_INSERT_ID qui renvoie le dernier ID créé, mais pas sous Access
La solution peut consister à générer toi même un identifiant au moment de la requète Insert. Par exemple, un champ de type LongInteger dans lequel tu places le nombre de secondes depuis le 1er janvier 1970 (date choisie comme l'an zéro de l'informatique, le TimeStamp), valeur facilement calculable avec la fonction VB (supportée aussi sous le VBA de Access) : DateDiff("s", "01/01/1970", Now)
Exemple :
Dim monID As Long
monID = DateDiff("s", "01/01/1970", Now)
SQL = "Insert into maTable (TimeStamp, Test) Values (" & monID & ", 'Codes Sources')"
...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
cs_Talere
Messages postés102Date d'inscriptionvendredi 29 mars 2002StatutMembreDernière intervention14 février 2013 12 avril 2006 à 08:56
Je te remercie pour ta réponse plutot clair ...
En fait j'ai besoin de la clé primaire car j'ai un placé un textBox d'index 0 sur ma feuille et je charge par la suite, plusieurs textbox qui peuvent (ou pas) être lié à un enregistrement . Avoir l'ID me permettait de le stocker dans le tag de la textbox, et à chaque changement de celle ci, je mettais à jour le champs dans la base via l'identifiant unique. si l'enregistrement n'existait pas ( le tag = "") alors je crée l'enregistrement mais il fallait alors que je stocke le tag dans ma textbox ( d'ou mon besoin ...).
En fait ce que j'ai fait, c'est que si le tag est bien vide, j'utilise le recordset et la méthode addnew, qui me permet de récupérer la clé, sinon, j'utilise directement l'instruction SQL "UPDATE ...".
Toutefois, ma première idée a été de créer l'enregistrement dès le départ si celui ci n'existait pas ... cette solution était plutot longue et j'ai eu finalement l'idée de la première.