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 :

TADOCommand - Recuperation de l'index


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut TADOCommand - Recuperation de l'index
    Salut,


    J'aimerais savoir comment faire pour recupérer l'index d'une table avec un TADOCommand.

    Explication :

    Je fait un INSERT d'un seul record dans une table SQL et j'aimerais que le ADOCommand me renvoie l'index (auto increment) du record que je viens d'ajouter, afin de l'utiliser pour modifier d'autres tables, avant un CommitTrans.

    Merci

  2. #2
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Quelle base de données, stp ?

    Oracle, Access, Interbase, ....

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    c'est un SQL Server

  4. #4
    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
    Il te faut executer une requete max (possible la, vu que tu as l'air d'utiliser les transactions )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max(Monindex) from MaTable
    Ou avec une requete Identity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select @@Identity from MaTable
    Je suis moins sûr de la 2em requete (il faudrait vérifier dans la doc SQL serveur)
    Modérateur Delphi

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

  5. #5
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    identity marche avec Access, cela doit marcher avec SQL Server.


    Je confirme

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(Monindex) from MaTable
    N'est pas tres recommandé...


    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select @@Identity from MaTable
    a l'air plus interressant ... Je suis en train de chercher comment recuperer cette valeur dans mon programme ...

    Si qqun peut m'aider ... merci

    PS : Frank j'avais pas vu ton lien, je suis en train d'y regarder ! Mais j'utilise un ADOCommand et non un query ... !

  7. #7
    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
    Citation Envoyé par lejert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(Monindex) from MaTable
    N'est pas tres recommandé...
    Pourquoi ne serait elle pas recommandé ?
    Je dirais oui dans le cas où tu n'utilises pas les transactions car il pourrait y avoir une création d'un nouvel index entre temps, mais vu que la transaction empèche cela, je ne vois pas de problème.
    Modérateur Delphi

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

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    certes ...

    Je suis tjs en train de sécher sur mon probleme...

    J'ai fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with DataModule1 Do
    try
        DataModule1.ADOConnection.BeginTrans;
        res := cmdAddRecordInTreeStructure.Execute;
    .
    .
    .
    Avec res : _RecordSet



  9. #9
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Citation Envoyé par lejert
    Je fait un INSERT d'un seul record dans une table SQL et j'aimerais que le ADOCommand me renvoie l'index (auto increment) du record que je viens d'ajouter, afin de l'utiliser pour modifier d'autres tables, avant un CommitTrans.
    Merci
    Je ne pense pas que tu puisses voir ta nouvelle valeur d'index avant le commit, non ?

    donc, moi, je ferai l'insert, le commit, et ensuite une petite requête qui me ramènerait la valeur de l'index de la ligne rajoutée.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Je dois recuperer l'ID pour faire ma 2eme commande (modif d'une autre table)

    Seulement après je pourrais faire mon commit, sinon : rollback.

  11. #11
    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
    Citation Envoyé par Frank
    Je ne pense pas que tu puisses voir ta nouvelle valeur d'index avant le commit, non ?

    donc, moi, je ferai l'insert, le commit, et ensuite une petite requête qui me ramènerait la valeur de l'index de la ligne rajoutée.
    Si on peut récupérer l'index même s'il n'y a pas eu de commit, c'est d'ailleur un des grands intérets des transactions.
    SQL Server assign l'index quand même. Si la transaction est validée par un commit alors l'index est sauvegardé définitivement sinon il est simplement libéré jusqu'a ce qu'une autre transaction en fasse la demande.

    Le schéma à faire :

    1- Debut de la transaction (begintrans)
    2- Insert dans la table X
    3- Récupération de l'index
    4- Insert dans la table Y avec utilisation de l'index
    5- Validation de l'ensemble (commit) ou annulation en cas de problème (Rollback)

    @lejert : Pourquoi ne fais tu pas un procédure stockée qui prend en paramètre ce que tu veux insérer et qui te retourne l'index ?
    Modérateur Delphi

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

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Ok.

    Comment ferais tu pour recuperer l'Index ?

    Sachant que ma Command est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO myTABLE...
     
    SELECT @@IDENTITY AS ID myTABLE
    Apres mon TADOCommand.Execute comment accéder à la variable @@IDENTITY

  13. #13
    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
    N'ayant jamais compris l'utilité d'un AdoCommand (j'utilise que des TAdoQuery) je ne pourrais pas te dire comment il fonctionne, mais ca à l'air d'être un composant je fais un peu de tout et j'agis comme mes copains composants solo .
    Donc je pense que tu peux récupérer les informations grace à FieldByName

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Showmessage(AdoCommand.FieldByName('Id').asString);
    A tester bien sûr ^^

    [edit]
    Je viens de consulter l'aide de delphi sur l'AdoCommand

    TADOCommand s'utilise le plus souvent pour exécuter des commandes SQL du langage de définition de données (DDL) ou pour exécuter une procédure stockée qui ne renvoie pas d'ensemble de résultats. Pour les instructions SQL qui renvoient un ensemble de résultats, un composant TADODataSet, TADOQuery ou TADOStoredProc est plus adapté. Cependant, la méthode Execute de TADOCommand est capable de renvoyer un ensemble d'enregistrements. Mais pour utiliser cet ensemble d'enregistrements, vous aurez besoin d'un composant ensemble de données ADO distinct.
    En clair rien de mieux que des AdoQuery

    [/edit]
    Modérateur Delphi

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

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Oui mais tout le prob est la : ADOCommand ne possede pas de propriete FieldByName .... lol

  15. #15
    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
    Citation Envoyé par lejert
    Oui mais tout le prob est la : ADOCommand ne possede pas de propriete FieldByName .... lol
    Est ce que tu es obligé d'utiliser un AdoCommand ?
    Modérateur Delphi

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

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    En fait, on me l'a recommandé, l'utilisation de ADOCommand ...

    Cependant, la méthode Execute de TADOCommand est capable de renvoyer un ensemble d'enregistrements. Mais pour utiliser cet ensemble d'enregistrements, vous aurez besoin d'un composant ensemble de données ADO distinct.
    ... c'est pour cela que je voulais utiliser un _RecordSet pour accéder au resultat du TADOCommand... mais je ne sais pas comment : accéder à l'@@Identity du recordSet.

  17. #17
    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
    Citation Envoyé par lejert
    En fait, on me l'a recommandé, l'utilisation de ADOCommand ...
    Bein moi, je te le recommande pas
    Avec un AdoQuery ca serait déjà réglé ton problème (surtout que pour une requete insert et un select pourquoi sortir l'artillerie lourde )



    Citation Envoyé par lejert
    ... c'est pour cela que je voulais utiliser un _RecordSet pour accéder au resultat du TADOCommand... mais je ne sais pas comment : accéder à l'@@Identity du recordSet.
    Deux composants pour pouvoir récupérer 1 resultat, alors qu'avec 1 adoQuery tu peux faire ton Insert, puis le réutiliser juste après pour faire ta récupération d'index, etc...

    Oui, oui, je suis tenace

    L'adoCommand a l'air d'être bien pour l'utilisation de commande spécifique à la base de données. Mais la tu ne fais que de simple requete donc pas vraiement utile. En plus ca te bloque pour le développement.
    Modérateur Delphi

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

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Ouais ouais c bon ... je jete l'eponge... Je vais utiliser un query.

    C'est ce que je pensais faire au debut... j'aurais du faire a ma tete ... !

    Merci en, tout cas pour ton aide !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/12/2007, 14h20
  2. Réponses: 3
    Dernier message: 17/05/2006, 16h50
  3. [Struts] récuperation d'une checkbox "indexed"
    Par japz dans le forum Struts 1
    Réponses: 1
    Dernier message: 07/03/2006, 12h49
  4. [vb.net][datatable] recuperer l'index d'une ligne
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/07/2005, 15h17
  5. [VB.NET] [DataGrid] recuperer l'index d'une ligne
    Par graphicsxp dans le forum Windows Forms
    Réponses: 12
    Dernier message: 29/03/2005, 15h13

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