IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

[Insert]Last row id. [Fait]


Sujet :

SQLite

  1. #1
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut [Insert]Last row id.
    Bonjour,

    Ca fait plusieurs fois que ce problème se pose:
    Comment récupérer avec Sqlite la valeur de la clé primaire d'une table après une insertion.

    Disons que j'ai une table profil, j'insère un profil dans cette table en utilisant les routines sqlite3_prepareV2, sqlite3_step.

    Seulement, je ne trouve pas dans l'API Sqlite, une routine pour obtenir le dernier row id. J'entends par là, sans passer par un autre traitement de requêtes SQL.

    Si vous savez faire, je vous remercie d'avance.

  2. #2
    Membre actif

    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    Il y a une solution de contournement ... mais je ne sais si elle peut correspondre exactement à ta demande :
    The sqlite3_update_hook() interface registers a callback function with the database connection identified by the first argument to be invoked whenever a row is updated, inserted or deleted. Any callback set by a previous call to this function for the same database connection is overridden.
    Ainsi, tu peux avoir une fonction callback qui est appelée lors de l'insertion. Cette fonction étant appelée constamment, il faut isoler son contenu à l'aide d'un booléen mis à true avant la mise à jour qui nous intéresse.
    The third and fourth arguments to the callback contain pointers to the database and table name containing the affected row. The final callback parameter is the rowid of the row.
    Ainsi, le rowid de la table est récupérable à l'aide de cette fonction mais le rowid n'est pas forcément la valeur de ta colonne. C'est à toi de construire ta table de telle façon que cela soit le cas (ex: un integer en autoincrément).

    Selon moi, cette routine est ce que tu cherches mais à toi de contourner les difficultés qui sont liées au rowid (et non pas à la valeur de la colonne).

    a+

  3. #3
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Bonjour,
    je ne crois pas que tu puisse le faire directement en sql.
    généralement je le fais en faisant un select apres un insert.

    aprés tu peux le faire dans un trigger avec une table temporaire pour stocker le resultat

    Sinon tu peux aussi utiliser rowid regarde ici:

    http://www.sqlite.org/c3ref/last_insert_rowid.html
    Si tu ne te plantes pas, comment veux tu pousser?

  4. #4
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut Merci pour vos réponses.
    Merci à vous deux,

    Mince, vraiment pas pratique la liste des fonctions sur le site, je l'ai pourtant parcourue plusieurs fois sans trouver Last_Insert!

    Je pense que je vais privilégier cette piste, car je n'ai pas à me soucier de blinder une callback.

    Donc merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Result set after last row
    Par otmaneo01 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 25/03/2015, 18h49
  2. Réponses: 3
    Dernier message: 27/02/2014, 16h31
  3. Curseur renvoyant deux fois la last row
    Par JulienBaldy dans le forum PL/SQL
    Réponses: 10
    Dernier message: 03/09/2013, 12h27
  4. [SQL-Server] Insertion plusieurs rows (Loop) sql server 2005
    Par myawo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/02/2013, 10h45
  5. last row , last column ?
    Par zirconias dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/07/2010, 04h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo