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] utilisation d'index auto-incrimente


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut [Oracle] utilisation d'index auto-incrimente
    Salut les developpeurs !

    Je voudrais connecter une application delphi à oracle , j'utilise adodataset lieé à une table t1 avec comme clé primaire un champ id1 du type entier . et comme oracle n'a pas des champs du type auto-incrimente j'ai crée une séquence appeler s1 . j'ai suivi la methode en sql pour liee le champ id1 au sequence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO t1 VALUES (s1.nextval,'champ1',...)
    Mais le problème c'est comment recuperer sous delphi le nextval du s1. y'a t'il un composant qui recupère nextval du s1.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Le mieux est de te faire une fonction qui te retourne le dernier numéro d'index +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function GetLastIndex : integer;
    begin
      With AdoQuery do
      begin
        Close;
        SQL.Clear;
        SQL.add('Select max(LeChampIndex) as Resultat from LaTable');
        Open;
        Result := FieldByName('Resultat').AsInteger + 1;
      end;
    end;
    Après il ne te reste plus qu'a l'intégré dans ton fonctionnement

    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
     
     
    AdoConnection.BeginTrans;
    try
      With AdoQueryInsert do
      begin
        Close;
        SQL.Add('Insert into t1 ');
        SQL.Add('Values(:MonIndex,:MonChamp1)');
        ParamCheck := True;
        Parameters.ParamByName('MonIndex').Value := GetLastIndex;
        Parameters.ParamByName('MonChamp1').Value := 'Test';
        ExecSQL;
        AoConnection.CommitTrans;
      end;
    Except on E:Exception do
      begin
        AdoConnection.RollBackTrans;
        ShowMessage('Erreur : ' + E.Message);
      end;
    end;
    A modifier et à adapter pour que cela fonctionne avec tes tables ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Salut

    La réponse de Malatar contourne l'utilisation de la séquence.
    Si tu veux connaître la valeur de la séquence, tu peux procéder en 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    qry1 : 
    select s1.nextval from dual
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    qry2 : 
    insert into t1 values (:seq, ...)
    Dans le code Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    qry1.Open;
    qry2.ParamByName('seq').AsInteger := qry1.Fields[0].AsInteger;
    qry1.close;
    qry2.execsql;
    Bon courage

  4. #4
    gonenc
    Invité(e)
    Par défaut Oracle a son trigger de Table pour autoincrement
    Ou je me trompe.

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/07/2009, 21h43
  2. [Oracle 8.1.7.2] Problème d'utilisation d'index
    Par deldin dans le forum Administration
    Réponses: 11
    Dernier message: 16/04/2007, 21h37
  3. Compteur sur l'utilisation des index
    Par hkhan dans le forum Administration
    Réponses: 11
    Dernier message: 14/10/2004, 17h57
  4. Utilisation des "indexs" ?
    Par vandeyy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/09/2004, 07h49
  5. Utilisation de Index Server
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 2
    Dernier message: 03/09/2003, 11h50

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