Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2007, 18h18   #1
Membre du Club
 
Avatar de jibe74
 
Inscription : avril 2004
Messages : 121
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 121
Points : 48
Points : 48
Par défaut Dernière clé insérée

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.
jibe74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 10h54   #2
Membre confirmé
 
Avatar de TMuet
 
Homme Olivier Muet
Responsable de service informatique
Inscription : septembre 2003
Messages : 222
Détails du profil
Informations personnelles :
Nom : Homme Olivier Muet
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 222
Points : 254
Points : 254
Tu veux faire quoi avec ça ?
TMuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 18h32   #3
Membre du Club
 
Avatar de jibe74
 
Inscription : avril 2004
Messages : 121
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 121
Points : 48
Points : 48
Bonjour,

Citation:
Envoyé par TMuet
Tu veux faire quoi avec ça ?
Un peu surprenant comme demande, c'est vrai !

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.
jibe74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 09h44   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
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:
la dernière clé insérée toutes tables confondues
quelque soit son type ?
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 17h12   #5
Membre du Club
 
Avatar de jibe74
 
Inscription : avril 2004
Messages : 121
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 121
Points : 48
Points : 48
Bonjour,

Merci pour ces précisions !

Citation:
Envoyé par makowski
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
Il y a peut-être un peu des deux : manque de réflexion, et demande mal formulée !

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 ), j'essaie de voir si je ne pourrais pas l'implémenter, ce qui d'ailleurs intéresse fortement les concepteurs de l'outil !

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.
jibe74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 20h59   #6
Membre à l'essai
 
Inscription : avril 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 25
Points : 23
Points : 23
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
pascal_legrand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 23h31   #7
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 10h00   #8
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 14h08   #9
Membre du Club
 
Avatar de jibe74
 
Inscription : avril 2004
Messages : 121
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 121
Points : 48
Points : 48
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 ! A ma décharge, une documentation encore très succinte d'Ultimate++ (mais ça progresse dans le bon sens), nulle en ce qui concerne les fonctions de gestion de BDD, et aucun commentaire dans les sources
__________________
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.
jibe74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h42.


 
 
 
 
Partenaires

Hébergement Web