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 :

Une clé auto incrémentée


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut Une clé auto incrémentée
    slt a tous

    j'ai une table produit (code, nom, date)

    je veux qaund je clique sur le boutton nouveau, le champ (code) doit incrémente auto et ça par apport au nombre de ligne dans la table produit.

    voila ma procédure (boutton clique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
    integer;
    begin
    i:=0;
    table.first;
    while not table.Eof
     do begin
         i:=i+1;
         table.Next;
        end;
    edit1.Text:=inttostr(i+1);
    le probléme il n'incrémente pas

    je vous remrci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Ben déjà, comment est-ce que tu travailles ? Tu utilises des composants DB branchés sur un Datasource ou tu gère tout à la main ?

    Ensuite, au lieu de compter les lignes dans la table avec une boucle, tu as la propriété RecordCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    edit1.text := IntToStr(table.recordcount + 1);
    Cependant, à moins d'être en Paradox, ça va rammer dur si tu travailles comme ça. Dès que la table va grossir un peu, les temps de chargement vont devenir très important... Il vaudrait mieux faire une requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from MaTable

    De plus, si tu travaille avec des DBEdit branchés sur le dataset (Table), il ne faut pas que tu déplaces le curseur tant que la création/modification n'a pas été validé. Sinon, ça va implicitement annuler les modfications.

    PS: Pense à utiliser la balise code et à indenter le tout. Le code brut c'est pas très lisible et ça ne donne pas envi de t'aider.

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    merci mon frère, mais la même chose

    quand j'insert elle n'incrémente pas dans le edit

    mais comment j'affiche la focntion count(*) dans un edit

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    Ce que tu est entrain de faire mon ami n’est pas bon point de vu optimisation ! car tu doit parcourir la table produit à chaque fois où tu voulais faire une insertion, et ça c’est mauvais.

    L’idéale pour ta solution est de créer une table que tu nomme « cles » par exemple et dont la structure est comme suit

    (nom_cle, valeur)

    Par exemple ta table doit contenir le tuple (‘cle_produit’,100). (tout en supposant que 100 représente la clé du dernier produit inscrit, et dans le cas où la table produit est vide le tuple sera (‘cle_produit’,0) zéro car aucun enregistrement n’est inscrit )

    Et comme ça tu n’a qu’a chercher la valeur du nom de clé (nom_cle) lorsque nom_cle=’cle_produit’ par la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select valeur from nom_cle where nom_cle=’cle_produit’
    La requete te renvoi la valeur 100, et comme 100 est la clé du dernier produit enregistré tu n’a qu’a mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.text :=inttostr(valeur_de_la_cle+1) ;
    Après insertion du nouveau produit, n’oublie pas de mettre à jour la table cles par incrémentation du champ valeur du nom de la clé ‘cle_produit’.

  5. #5
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Quelle est le SGBQ utilisé ?

    Car les méthodes proposées ici vont échouer en multipost. Suivant le SGBD c'est un champ Autoinc, une séuqence ou un générateur. C'est géré au niveau du serveur et tu n'auras pas de risque de doublons.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

Discussions similaires

  1. Oracle 10g - Définir une colonne auto-incrémentée
    Par david71 dans le forum Oracle
    Réponses: 2
    Dernier message: 14/01/2008, 16h40
  2. Qu'est-ce qu'une clef auto-incrémentable?
    Par Milyshyn76 dans le forum Modélisation
    Réponses: 4
    Dernier message: 28/11/2007, 21h26
  3. [MySQL] récupérer une valeur auto incrémentée
    Par tonton51 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/06/2007, 15h23
  4. Réinitialisation d'une clé auto incrémentée
    Par Linio dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/06/2007, 21h21
  5. Longueur d'une clé auto-incrémentée
    Par licorne dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2007, 09h05

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