|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Bonjour,
Y a-t-il un moyen de connaitre la dernière clé insérée toutes tables confondues ? Une recherche rapide sur Google ne m'a pas permis de trouver, pourtant je serais bien surpris qu'on ne puisse pas retrouver ça dans les tables système ?
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Olivier MuetResponsable de service informatique Inscription : septembre 2003 Messages : 222 ![]() |
Tu veux faire quoi avec ça ?
|
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Bonjour,
Citation:
C'est une fonction disponible dans d'autres SGBD. Ca peut servir à beaucoup de choses, ne serait-ce qu'informer l'utilisateur amnésique... En fait, dans le cas concret ici, c'est pour écrire une bibliothèque afin de pouvoir utiliser Firebird avec Ultimate++. Cet IDE possède déjà une première couche d'accès aux bases SQL, dans laquelle certaines fonctions utilisent la dernière clé insérée. Il va être un peu difficile de faire en sorte de s'en passer, et ce serait un peu réducteur... Donc, si quelqu'un connait une astuce, je suis preneur !
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
non franchement je ne vois ni comment tu pourrais trouver cela, ni même l'intérêt , ni même comment cela pourrait être fait dans un sgbd avec un modèle transactionnel multigenerationnel comme Firebird
ou alars tu formules mal ta demande mais Citation:
ou bien tu parles uniquement des auto incréments ? mais quid des transactions ? quid du fait que tu peux faire avancer une séquence mais finalement ne pas faire ton Insert ? à la limite, il devrait être possible de faire quelque chose avec les nouveaux trigger de FB2.1, mais cela demande réflexion
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
|
00
|
|
|
#5 | |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Bonjour,
Merci pour ces précisions ! Citation:
En fait, je découvre tout juste Ultimate++, un outil RAD C++ open source multi-plateformes, et ses interfaces avec divers SGBD. Comme il y manque la possibilité d'utiliser Firebird (grave lacune à mon avis Comme je l'indiquais, il y a déjà une première couche d'accès aux bases SQL, qui fait intervenir à plusieurs occasions la dernière clé insérée. Apparemment, les interfaces pour MySQL, SQLite et PostGreSQL savent en renvoyer la valeur (de type variant). Je pensais un peu, tant à cause de mon manque de connaissance actuelle de toute la philosophie et de l'environnement de Ultimate++ que pour ne pas réinventer la roue, m'inspirer assez fortement des interfaces existantes actuellement. D'où ma question.... Cela dit, il est bien évident que Firebird n'a pas grand chose à voir avec SQLite ou MySQL, ni même avec PostGreSQL et que je devrais probablement réfléchir plus avant à ma question qui semble effectivement oublier (c'est d'ailleurs bien ce que j'avoue avoir négligé) les différences fondamentales entre les différents SGBD... Peut-être devrais-je me pencher un peu sur ce qui est fait dans l'interface Oracle ! Mais par ailleurs, il semble qu'il ne s'agisse que de savoir sur quoi portait le dernier Insert, et ce sur quoi il portait. Donc, renvoyer quelque chose du genre VILLE.NOM ou ORDER.NUMBER permettant de connaitre sur quel enregistrement de quelle table a porté le dernier ordre INSERT... Donc, ma question serait plutôt : peut-on connaitre lsur quelle table et quelle clé a porté le dernier ordre INSERT (Celui réellement pris en compte, laissons tomber les transactions en cours...) ? Mais peut-être ma démarche est-elle trop mauvaise (je ne peux me permettre de passer trop de temps là dessus, soit je peux le faire rapidement et facilement, soit je laisse tomber) et l'analyse pas assez poussée (ce qui voudrait probablement dire que la première couche d'accès aux bases SQL ne peut pas s'appliquer à Firebird, ou au moins qu'il y en a des subtilités que je n'ai pas saisies et qu'il me serait indispensable de connaitre avant d'envisager de faire une interface) ?
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : avril 2005 Messages : 25 ![]() |
Cette demande me parait difficile à résoudre de fait, connaissant succintement les différents SGBD évoqués, je pense que la fonctionnalité proposée n'est pas SGBD native, soit c'est une sorte de cache ou un développement au sein de l'outil, pour info il me semble que la valeur de rdb$db_key permet d'identifier le dernier enregistrement inséré dans une table FB, mais encore faut-il savoir sur quelle table portait l'insert ;o)
Slts PAscal |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
dis moi comment c'est fait pour PG et je te dirai si on peut faire pareil
mais manifestement avec PG ils ont le même problème franchement en plus c'est une mauvaise idée de vouloir utiliser un truc fait pour sqllite ou mysql avec des vrais sgbd comme PG ou FB, ce serait les faire fonctionner en mode dégradé prend cet outil si tu veux mais utilise le avec IBP, et tu ne t'en porte que mieux, même si tu devra faire un peux plus de choses "à la main" on rencontre le même genre de pb avec tous ces frameworks, composants d'accès soit disant universels d'abord développés pour sqllite ou Mysql ou Paradox (cf Delphi) en voulant utiliser ces trucs pour Firebird ou PG ou Oracle, on ne fait que des mauvaises choses.
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#8 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Fonctionnellement c'est étrange comme demande et je ne vois pas du tout ce que cette information apporte et comment elle pourait etre utilisée ??
Imaginons un SGBD avec une centaines de clients de connectés. A l'instant t le client A demande quel est la dernière clè insérée il optient la clé que le client Z vient de créer. A quoi celà peut il servir au client A sachant qu'a t + 1ms ce n'est plus la dernière clé parce que le client U vient de faire une insertion... La seule chose qui aurait un sens éventuel serait la dernière clé insérée par le client ce qui n a rien a voir avec la dernière clé insérée sur le SGBD (tout client confondu). La dernière clé insérée par le client peut etre gérée en local par le client et non pas le SGBD et sa mémorisation par le client peut avoir un sens cette fois-ci. |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 121 ![]() |
Bonjour,
Merci pour vos commentaires instructifs... et très pertinants ! J'ai été un peu plus loin dans mon analyse des interfaces déjà existants. Il s'avère que : - Les interfaces PostGreSQL et Oracle n'implémentent même pas la fonction interface renvoyant la dernière clé insérée, - Cette dernière clé insérée ne sert qu'à repositionner le curseur lors de l'echec de l'insertion d'un nouvel élément d'un array. Il faudrait analyser plus en détail (et mieux connaitre en ce qui me concerne SQLite, MySQL et Oracle !), mais je pense que l'appel à la fonction renvoyant la dernière clé insérée n'est jamais effectué dans le cas de PostGreSQL et Oracle... Désolé pour cette question finalement inutile !
__________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! Albert Einstein. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com