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 :

[ORACLE] numéro autoincrémenté


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Par défaut [ORACLE] numéro autoincrémenté
    Je cherche à gérer via le code delphi l'incrémentation de la clé de ma table.
    Le champ est défini comme un entier.
    Lorsque je veux faire mon INSERT via une procedure delphi, je n'arrive pas à autoincrémenter mon champ ni à récupérer la dernière clè saisie.
    Comment faire?
    Merci d'avance

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Par défaut
    pourquoi via delphi? ORACLE est capable de le faire tout seul, si je ne me trompe pas

  3. #3
    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
    Perso je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(Ma cle) Nb from Matable
    Je récupère le champ Nb +1 et ça me donne ma nouvelle valeur.

    Ou tu peux le faire directement dans ton insert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into Matable (Macle, MonChamp1)
    (Select(NVL(MAX(MaCle), 0),'Toto' from MaTable);

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Par défaut
    il ya aussi quelque chose d'asez in téressant sur ce lien http://delphi.developpez.com/faq/?pa...#autoincrement mais je persiste à penser que c'est mieux de le faire au nieveau de la BDD

  5. #5
    Expert confirmé

    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 : 58
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    La méthode donnée dans la FAQ date du temps de Paradox. Il ne faut surtout pas l'appliquer à Oracle.

    Dans Oracle il suffit d'utiliser une séquence pour générer une valeur autoincrémentée.

    Linkin, avec cette méthode est en multipostes, tu vas avoir des violation de clef très souvent.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Par défaut
    Citation Envoyé par Nono40
    La méthode donnée dans la FAQ date du temps de Paradox. Il ne faut surtout pas l'appliquer à Oracle.
    C'est noté
    Citation Envoyé par Nono40
    Linkin, avec cette méthode est en multipostes, tu vas avoir des violation de clef très souvent.
    C'est bien ce que je pensait aussi. ORACLE ne gère-t-il pas tout seul les clés auto?

  7. #7
    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
    Je suis d'accord j'ai oublié de le préciser (enfin si mais je me suis trompé je l'ai effacé ce qui reviens au même).

    Il me semble que oui Oracle gère les champs autoincrement mais après ça dépend si on a la possibilité de le faire (Perso j'ai des tables avec plusieurs millions d'enregistrement et ma base a été créée sans champ auto, mais je n'ai pas d'accès à la même table par plusieurs applications en même temps

  8. #8
    Expert confirmé

    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 : 58
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Tu n'as pas de pbs car justement tu n'ajoute pas d'enregistrements par deux postes en même temps.

    Créer une séquence dans Oracle c'est très simple, et s'en servir pour remplir un champ c'est tout simple aussi. Je n'ai pas ça sous la mains ici mais je vous donnerais la méthode ce soir.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,

    Pour créer une séquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE SEQUENCE IDRepertoires START WITH 0 INCREMENT BY 1 MINVALUE 0 NOMAXVALUE NOCYCLE CACHE 50 ORDER;
    ( le cache 50 signifie que le SGBDR Oracle mémorise 50 numéros de séquences tant que la abse est à l'état 'mounted'. En cas d'arrêt on perd les numéros préalloués.

    la supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Drop SEQUENCE IDRepertoires;
    insérer la valeur courante de la séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Insert Into Repertoires R  -- Insére le root
           Values (Repertoire(IDRepertoires.CurrentVal,Ref_Disque,Path,'ROOT',NULL))
    insérer la valeur suivante de la séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Insert Into Repertoires R  -- Insére le root
           Values (Repertoire(IDRepertoires.NextVal,Ref_Disque,Path,'ROOT',Ref_Root))

  10. #10
    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
    Merci pour cette information ça peut être très utile en effet (et ça enlève une limite de mes applications

  11. #11
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Par défaut [ORACLE][DELPHI] numéro autoincrémenté
    merci pour vos réponses.
    Mon problème est que je n'ai pas défini ma clé comme une clé autoincrémenté, d'où mon souci de gérer l'autoincrément par delphi.
    Quelqu'un a t-il une solution sans que je sois obligé de casser ma base pour refaire ma table?

    D'avance merci

  12. #12
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Bonjour,
    tu n'as pas besoin de casser ta base, tu créés juste une séquence comme t'indique Laurent, ensuite tu peux créer un trigger sur ta table du stype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE TRIGGER DB.TABLE_BIR
    BEFORE insert ON DB.TABLE
    FOR EACH ROW
    DECLARE
      cpt number(16);
    BEGIN
      select IDRepertoires.NEXTVAL into cpt from DUAL;
      :NEW.Macle := cpt;
    END;
    Attention, tu devras attribuer la valeur maxi de la clé dans ton générateur.

  13. #13
    Expert confirmé

    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 : 58
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Avec la solution de Laurent, il ne faut pas de champ auto-incrémenté juste la création d'une séquence. Et tu te serts de MaSequence.NextVal pour remplir avec Delphi la valeur du champ.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  14. #14
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 23
    Par défaut merci

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/07/2012, 05h57
  2. Oracle numéro 1 des serveurs d’applications, d’après IDC
    Par Gordon Fowler dans le forum Actualités
    Réponses: 10
    Dernier message: 20/07/2012, 05h57
  3. Réponses: 1
    Dernier message: 16/05/2006, 21h22
  4. numéro oracle prédéfinie pour insert et delete?
    Par hoaxpunk dans le forum Oracle
    Réponses: 4
    Dernier message: 26/04/2006, 16h24
  5. Numéro de session Oracle
    Par Veve44 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/10/2005, 16h38

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