|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 74 ![]() |
Bonjour!
J'ai plusieurs tables avec comme clé primaire des numéros qui s'incrementent tout seuls, que j'ai fait à l'aide de Trigger et de Generator avec la mention "Before Update" Maintenant par exemple, (avant j'avais mes données sur Access et ca ne me faisait pas ca), lorsque je fais un ajout d'un enregistrement dans une de ces tables, je ne suis pas capable de récupérer le numéro auto. Voici mon exemple, en VB, avant ca marchais, plus maintenant car ca ajoute le numéro auto après (au moment de rst.update), pas au moment ou je créé la ligne. Donc quand j'essaie de récupérer ma valeur dans idEmp, ca fait une erreur car idEmployeur n'a pas de valeur assigné encore. Code :
Et si je tente de récuperer le "idEmployeur" après le update, comme ca: Code :
Merci d'avance de votre aide. |
||||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
Donc le trigger doit être sur le BEFORE INSERT, et celui ci est utile uniquement dans le cas ou vous n'avez pas renseigné la clé primaire (donc il y a un if (cle is null) then Cle = gen_id(generateur,1); ) car en effet si vous souhaitez lors d'un insert spécifier une clé, votre trigger ne dois pas effacer ce que vous avez spécifé. Maintenant l'autre probleme : Comment récupérer l'identifiant affecté à l'enregistrement nouvellement inséré ? Il existe des tuto ici qui même s'ils ne sont pas dédiés à ASP.NET expliquent comment procéder. Mais voici le principe à respecter : Si cet identifiant a été affecté par le trigger, c'est impossible (à moins que vous ne soyez dans une application mono-utilisateur car dans ce cas il suffira de faire un select max(Cle) from matable (ce qui n'est pas tres performant ou un select gen_id(MonGenerateur,0) mais surtout faudra changer impérativement de méthode lorsque vous passerez votre appli en mode multi-poste donc autant prendre de bonnes habitudes dès le début). Donc la seule solution pour récupérer un identifiant c'est de demander un indentifiant unique avant l'insertion. Faire un Code :
SELECT gen_id(MonGenerateur,1) FROM Rdb$database; |
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 74 ![]() |
Merci !
|
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 74 ![]() |
Un peu en retard, mais je n'avais pas encore eu le temps de tester ça.
Moi je suis en Access.. je crois qu'il est impossible pour moi d'utiliser cette ligne de code là n'est ce pas? Code :
Merci |
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Pourquoi ce n'est pas possible ? c'est du SQL...
|
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 74 ![]() |
Ben je n'ai pas réussi. Je ne comprends pas par quoi remplacer J'utilise un driver ODBC, mais j'ai fait des liens uniquement sur les tables. Ma chaîne de connexion pour chaque table est la suivante:
Code :
ODBC; DSN=Connexion a Jurimaitre; Driver=Firebird/Interbase(r) driver; Dbname=C:\JURIMAITRE.FDB; CHARSET=NONE; Merci |
|
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 74 ![]() |
J'ai fini par comprendre, voici comment je m'y suis pris
Code :
Merci. |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com