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

Bases de données Discussion :

[SQL Server] Retrouver l'ID du dernier INSERT


Sujet :

Bases de données

  1. #1
    Invité
    Invité(e)
    Par défaut [SQL Server] Retrouver l'ID du dernier INSERT
    Bonjour,

    J'utilise SQL Server 2005, je peux insérer des données dans ma BD sans problème. Seulement, j'aimerais pouvoir récupérer l'ID (auto-incrémenté dans la BD) du dernier INSERT effectué par le programme.
    J'ai déjà essayé d'utiliser @@IDENTITY ou SELECT MAX(Id) FROM MaTable par exemple, mais à chaque fois, ces solutions me renvoient 0, 1 ou bien rien du tout.
    De même si je créé un autre objet QSqlQuery dans le if.


    Table dbo.Vehicule (Id_Vehicule, immatriculatio, tare)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int AccesBD::insertVehicule(QString immatriculation, float tare)
    {
        int newId = -1;
     
        QSqlQuery query;
     
        if(query.exec(QString("INSERT INTO [dbo].[Vehicule] VALUES('%1','%2')").arg(immatriculation).arg(tare)))
        {
            QSqlQuery query("SELECT MAX(Id_vehicule) FROM [dbo].[Vehicule]");
            query.next();
            newId = query.value(0).toInt();
        }
        return newId;
    }
    Si quelqu'un a une idée, parce qu'un peu partout, je vois parler de @@IDENTITY ou SCOPE_IDENTITY(), mais rien ne fonctionne comme désiré.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, je sais pas ce que j'ai foutu, mais une solution qui ne fonctionnait pas au préalable a finalement fonctionné (après renseignement, je pensais même que la méthode n'était pas compatible avec SQL Server).
    Voici le code qui me renvoie donc l'Id du dernier INSERT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int AccesBD::insertVehicule(QString immatriculation, float tare)
    {
        int newId = -1;
     
        QSqlQuery query;
     
        if(query.exec(QString("INSERT INTO [dbo].[Vehicule] VALUES('%1','%2')").arg(immatriculation).arg(tare)))
        {
            newId = query.lastInsertId().toInt();
        }
        return newId;
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Là, c'est vraiment zarb.
    Je ne touche plus à cette méthode, en écrit une autre qui est utilisée séparément et voilà que maintenant, ça me renvoi 0 à chaque fois...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        AccesBD bd;
     
        bd.connexion();
        int i = bd.insertVehicule("FFF-666",13500);
     
        qDebug() << i << "\n";
     
        if(bd.deleteVehicule(126))
            qDebug() << "DELETE OK";
        else
            qDebug() << "DELETE FAIL";
     
        return app.exec();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int AccesBD::insertVehicule(QString immatriculation, float tare)
    {
        int newId = -1;
     
        QSqlQuery query;
     
        if(query.exec(QString("INSERT INTO [dbo].[Vehicule] VALUES('%1','%2')").arg(immatriculation).arg(tare)))
        {
            newId = query.lastInsertId().toInt();
        }
        return newId;
    }
     
    bool AccesBD::deleteVehicule(int id)
    {
        bool ret;
     
        QSqlQuery query;
        ret = query.exec(QString("DELETE FROM [dbo].[Vehicule] WHERE Id_vehicule = %1").arg(id));
     
        return ret;
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour ceux qui rechercheraient la solution voici le code qui, finalement, ne pose plus aucun soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            QSqlQuery queryLast("SELECT IDENT_CURRENT('[dbo].[Vehicule]');");
            queryLast.next();
            int id = queryLast.value(0).toInt();

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

Discussions similaires

  1. SQL Server 2005 :probleme avec truncate et insert
    Par blaise4714 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/03/2009, 16h11
  2. [SQL Server] Pb Date et Montant derniere commande
    Par marman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/10/2006, 19h21
  3. Réponses: 9
    Dernier message: 17/03/2005, 09h20
  4. [C#][SQL Server] Insertion de données inversées
    Par lamiae18 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 20/04/2004, 16h11
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

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