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 Delphi Discussion :

incrémenter mon identifiant


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut incrémenter mon identifiant
    salut a tous

    je sais pas comment m'y prendre pour pouvoir incrémenté de manière automatique une id d'une table.

    en effet j'ai essayé ce moyen là mais suis pas arrivé.

    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
     
     
    procedure TForm1.incrementationID(Sender: TObject);
    var
      incClient : integer ;
    begin
     
       qrySelect.Close();
       qrySelect.Open();
       incClient := qrySelect.FieldByName('id').Value;
       if incClient = 0 then
          edtID.Text := '1'
       else
        edtID.Text := intTostr(incClient + 1);
     
    end;
    en faite il récupère la première valeur de mon id donc se qui m'arrange surtout pas.
    on m'a parlé des triggers mais je m'y connais pas trop donc sa sera pas mauvais de m'en parlé un peu

    NB : suis sur embacadero XE5 j'utilise comme SGBD fireBird a l'aide FireDac et IBexpert
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    fireBird , pour le TRIGGER et la SEQUENCE (GENERATOR est le nom Firebird), il suffit de lire la How to create an autoincrement column?

    TRIGGER c'est un évènement qui se produit lors d'action sur une table, donc ton cas lors du INSERT
    GENERATOR est un objet de la DB qui s'incrémente à chaque fois que l'on l'invoque


    Sinon ton code en local pourrait fonctionner (a bannir dans un programme profesionnel et surtout en cas d'accès concurrentiel c'est à dire plusieurs utilisateurs en même temps par le réseau)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    qrySelect.Open();
    qrySelect.Last(); // Juste ça mais c'est horrible de charger toutes la table pour en trouver la suite du compteur, autant utiliser directement un TFDTable !
       incClient := qrySelect.FieldByName('id').Value;
    ou alors un SELECT MAX(...) FROM LaTable
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    je sais mais je reçois une erreur : qrySelect paramètre 'id' non trouvé

    n'est il pas possible d’accéder a la valeur du dernier id avec cette syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incClient := qrySelectID.value;
    à vrai dire je sais si mon erreur viens de mon code SQL ou de mon code delphi

    Sinon ton code en local pourrait fonctionner (a bannir dans un programme profesionnel et surtout en cas d'accès concurrentiel c'est à dire plusieurs utilisateurs en même temps par le réseau)
    oui mon application est en locale. quel dégât ou quel problème peut engendrer mon bout de code en réseau ??
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par alves1993 Voir le message
    je sais mais je reçois une erreur : qrySelect paramètre 'id' non trouvé
    n'est il pas possible d’accéder a la valeur du dernier id avec cette syntaxe
    Comme on n'a pas le texte de la query , difficile de dire que oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incClient := qrySelectID.value;
    pour accéder comme cela il faut que les champs soit déclarés , sinon il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incClient := qrySelect.FieldByName('ID').value;
    autre solution que le COUNT ,
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FIRST 1 ID FROM TABLE ORDER BY ID DESC
    récupérera uniquement la dernière ID

    oui mon application est en locale. quel dégât ou quel problème peut engendrer mon bout de code en réseau ??
    une possibilité (minime mais possible) d'identifiant en double

    la meilleure solution reste quand même un Générateur et un Trigger , surtout en réseau car l'incrémentation du générateur se fait dans une transaction séparé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    Comme on n'a pas le texte de la query , difficile de dire que oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    incClient := qrySelectID.value;
    oui en effet c'est possible je devait en faite ajouter des champs de ma table dans le field de la query

    la meilleure solution reste quand même un Générateur et un Trigger , surtout en réseau car l'incrémentation du générateur se fait dans une transaction séparé
    oui je crois que je vais opté pour cette solution

    merci quand même pour m'avoir éclairé
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

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

Discussions similaires

  1. Modifier mon identifiant
    Par dali0807 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 24/03/2011, 13h21
  2. Réponses: 4
    Dernier message: 22/02/2008, 10h02
  3. comment incrémenter mon tableau en jsp et mysql?
    Par shou86 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/11/2007, 15h54
  4. Changer mon identifiant
    Par Phoenix_Blue dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 25/10/2006, 22h31
  5. Comment changer mon identifiant ?
    Par mouloudéen dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 12/07/2006, 23h22

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