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

Composants VCL Delphi Discussion :

TSQLQuery insertion d'une ligne et récupération de l'id créé


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Par défaut TSQLQuery insertion d'une ligne et récupération de l'id créé
    Bonjour, Je suis sous XE2

    Voici mon code.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    procedure TFUser.btn_getLasteInsertedIdClick(Sender: TObject);
    var
      Qry: TSQLQuery;
    begin
      // Set up your connection as above, and open it
      Qry := TSQLQuery.Create(nil);
      Qry.SQLConnection := tuto_d2010fb;
     
      // insert query
      Qry.SQL.Add('insert into PS_12 ');
      Qry.SQL.Add('(ID_PERS) ');
      Qry.SQL.Add(' values (''voiture'') ');
      Qry.SQL.Add('returning ID_PS_12 ');
      Qry.Active := true;
      // Qry.ParamByName('ID_PS_12').ParamType := ptOutput;
     
      try
        Qry.Prepared := true;
        Qry.Open;
        //Qry.ExecSQL() ;
        //Showmessage(Qry.fields[1].asstring);
      except
        // on E:TDBXError do begin
        on E: TDBxError do
        begin
          OutputDebugString(PChar('Erreur, nous n''avons pas pu insérer votre record' + ' | TFUser.getLastInsertId'));
          // Qry.Free;
        end;
      end;
     
      // outputDebugString (PChar('Record inserted = '+Qry.FieldByName('ID_PS_12').AsString));
      // OutputDebugString(PChar(Qry.ParamByName('ID_PS_12').asString));
    end;
    C'est assez simple, je veux insérer une ligne et le returning doit me renvoyer l'id_ps_12 (clé primaire créé)
    J'utilise un Qry open pour avoir un retour
    Le Qry.ExecSQL() ; ne semple pas me retourner quelque chose.

    Pour le moment j'arrive à insérer la ligne mais pas à avoir un retour :-(

    Je bloque complètement.

    Merci pour votre aide

    Bertrand

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    Le Query.Active := True ne déclenche-t-il pas l'insertion avant le Open, empêchant le retour ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Par défaut
    Bonjour tourlourou,

    Si je retire le Query.Active := True je n'ai plus d'insertion.
    Bon je débute delphi, donc je découvre.

    En toute logique je dois quand même insérer la ligne pour avoir un retour ?

  4. #4
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    ExecSQL renvoie le nombre de lignes affectées, donc sûrement 1 pour ton insertion.

    Chaque base de données a sa façon de procéder pour avoir la valeur du dernier increment.
    Quelle est ta base de données?

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    Désolé, je pensais que Open faisait juste un Active:=True !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Par défaut Hello,
    Je travaille sur une db firebird.

    J'ai effectué la même chose avec du php, j'ai bien un retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "insert into PS_12 (ID_PERS) values ('voiture') returning ID_PS_12";
    $sth = ibase_query($db, $query);
    $return = ibase_fetch_object($sth);
    echo $return->ID_PS_12;
    Donc c'est bien dans delphi que je bloque.

    Je ne connais pas bien le composant, pour le moment j'essaye.
    Pour ce que je comprends, je dois avoir un open pour avoir un retour.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par beletot Voir le message
    Je travaille sur une db firebird.
    Itou.
    Donc c'est bien dans delphi que je bloque.
    Je ne connais pas bien le composant, pour le moment j'essaye.
    DBExpress est plus compatible Interbase que Firebird. Je n'ai jamais accroché vraiment le wagon DBExpress et n'ai pas XE2 pour vérifier mais il me semble que pour attaquer une base Firebird avec DBexpress+XE2 il s'agit du driver Interbase qui est utilisé (à confirmer). Ceci explique peut être ton soucis ?
    Pour ce que je comprends, je dois avoir un open pour avoir un retour.
    par principe : toute query ne renvoyant pas de données se fait via ExecSQL , à l'inverse pour toute query renvoyant des données il faut utiliser Open ou Active:=True
    (à ce sujet Tourlourou à raison, Open ne contient qu'une seule instruction : Active:=True)

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

Discussions similaires

  1. Date d'insertion d'une ligne
    Par bmasimo dans le forum SQL
    Réponses: 3
    Dernier message: 05/09/2014, 16h31
  2. Insertion d'une ligne ou le calcul s'effectu
    Par achakro dans le forum Excel
    Réponses: 4
    Dernier message: 09/01/2008, 18h15
  3. Insertion d'une Ligne dans MSFlexGrid
    Par Bib0ucH dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/12/2007, 12h12
  4. Réponses: 2
    Dernier message: 15/11/2007, 17h43
  5. Trouver la date d'insertion d'une ligne
    Par shirya dans le forum Access
    Réponses: 2
    Dernier message: 03/11/2007, 17h29

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