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 :

ADOTable.Next ne fonctionne pas


Sujet :

Bases de données Delphi

  1. #1
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut ADOTable.Next ne fonctionne pas
    [Delphi 7- ADO]
    Bonsoir,
    Je voudrais savoir pourquoi les méthodes(Next,prior et autres) ne fonctionnent pas pour des tables liées?
    voici le code:
    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.Button1Click(Sender: TObject);
    begin
    while not ADOTable1.Eof do
       begin
          while ADOTable2Champ1.Value=ADOTable1Champ1.Value do
           begin
              while  ADOTable3Champ2.Value = ADOTable2Champ2.Value do
               begin
                 ADOTable3.Next;
                 Label1.Caption:=IntToStr(ADOTable3.RecNo);
               end;
            ADOTAble2.Next;
           end;
          ADOTAble1.Next
        end;
    end;

  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
    Il serait préférable de nous dire ce que tu veux que ton programme fait et le problème que tu rencontres, car en regardant le code, je ne vois aucun soucis.

    Utilisant souvent ADO, je n'ai jamais rencontré de problème avec les Next & co.
    Modérateur Delphi

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

  3. #3
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Il serait préférable de nous dire ce que tu veux que ton programme fait et le problème que tu rencontres, car en regardant le code, je ne vois aucun soucis.

    Utilisant souvent ADO, je n'ai jamais rencontré de problème avec les Next & co.
    Bonjour,
    En fait je voudrais ecrire dans un fichier txt, le contenu des 3 tables, sous la forme suivante:
    --ADOTable1Champ1
    -- ADOTable2Champ1
    -- ADOTable3champ1
    bien entendu que les relations sont 1->n. Ce fichier doit servir à remplir un treeview, car je n'arrive pas à maitriser le composant JvDBTreeView, dont j'ai déja posté un message precedement.
    Merci.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et quand tu dis que cela ne "fonctionne pas" tu entends par quoi au juste ?

    Est-ce que tu n'as pas de relations maître-détail (MasterSource) entre tes tables ?

    En outre je penses qu'il faudrait mettre un ADOTAble2.First avant la boucle sur ADOTAble2 et un ADOTable3.First avant la boucle sur ADOTable3 pour que cela fonctionne correctement.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Et quand tu dis que cela ne "fonctionne pas" tu entends par quoi au juste ?

    Est-ce que tu n'as pas de relations maître-détail (MasterSource) entre tes tables ?

    En outre je penses qu'il faudrait mettre un ADOTAble2.First avant la boucle sur ADOTAble2 et un ADOTable3.First avant la boucle sur ADOTable3 pour que cela fonctionne correctement.
    Bonsoir AKa Guymelef,

    Pour mieux expliquer la chose, voyant la relation 1->n , moi j'utilise ADOTable2.next pour avancé d'1 enregistrement, et c'est là ou ça marche pas, d'ou (n) reste positionné toujours sur le même record, maintenant concernant le ADOTable2.First, je ne vois l'utilité du fait que les tables sont liées (MasterSource).
    Merci AKa.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Dans ce cas si tes tables sont liées correctement avec un MasterSource je ne vois pas l'utilité de tester l'égalité entre les champs de "jointures" puisque le système se charge déjà de filtrer le jeu d'enregistrement détail par rapport à l'enregistrement maître courant.

    Le First il faut toujours le faire car tu ne sais pas à l'avance sur quel enregistrement courant est positionné chaque DataSet et du coup tu risques d'oublier aléatoirement des enregistrements.

    Du coup le code devient :

    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
      ADOTable1.First;
      while not ADOTable1.Eof do
      begin
        ADOTable2.First;
        while not ADOTable2.Eof do
        begin
          ADOTable3.First;
          while  ADOTable3.Eof do
          begin
            Label1.Caption:=IntToStr(ADOTable3.RecNo);
            ADOTable3.Next;
          end;
          ADOTAble2.Next;
        end;
        ADOTAble1.Next;
      end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  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 Aka Guymelef Voir le message
    Dans ce cas si tes tables sont liées correctement avec un MasterSource je ne vois pas l'utilité de tester l'égalité entre les champs de "jointures" puisque le système se charge déjà de filtrer le jeu d'enregistrement détail par rapport à l'enregistrement maître courant.

    Le First il faut toujours le faire car tu ne sais pas à l'avance sur quel enregistrement courant est positionné chaque DataSet et du coup tu risques d'oublier aléatoirement des enregistrements.

    Du coup le code devient :

    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
      ADOTable1.First;
      while not ADOTable1.Eof do
      begin
        ADOTable2.First;
        while not ADOTable2.Eof do
        begin
          ADOTable3.First;
          while  ADOTable3.Eof do
          begin
            Label1.Caption:=IntToStr(ADOTable3.RecNo);
            ADOTable3.Next;
          end;
          ADOTAble2.Next;
        end;
        ADOTAble1.Next;
      end;
    Pas d'accord avec les AdoTabl2.First et AdoTable3.First, comme tu l'as dit toi même

    le système se charge déjà de filtrer le jeu d'enregistrement détail par rapport à l'enregistrement maître courant
    Donc il sera positionner automatiquement sur le bon enregistrement

    Enfin bon, je pense quand même que ça mériterait plus l'utilisation d'une requête que de jouer avec des TAdoTable.
    De nos jours, travailler sur les bases de données sans connaitre le SQL, c'est se mettre des limites dans le développement.
    De plus que le SQL n'est pas bien dur à apprendre.
    Modérateur Delphi

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

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Certes quand la table maître change d'enregistrement, le DataSet détail filtre son jeu d'enregistrement mais le remet-il forcément sur le premier ? Pas si sûr Donc moi prudent moi faire first
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  9. #9
    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 Aka Guymelef Voir le message
    Certes quand la table maître change d'enregistrement, le DataSet détail filtre son jeu d'enregistrement mais le remet-il forcément sur le premier ? Pas si sûr Donc moi prudent moi faire first
    Es tu sur que la table est filtrée et que ce n'est pas un positionnement sur l'enregistrement (je n'utilise pas les TAdoTable et les liaison maitre détails, je préfère les requêtes) donc quand tu fais le First que ça ne retourne pas sur le 1er enregistrement de la table et pas le premier enregistrement maitre-détails ?
    Modérateur Delphi

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

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Non car justement dans une relation maître détail le jeu d'enregistrement est constamment filtré par rapport à l'enregistrement maître de la même manière que si tu appliquais un SetRange.

    Donc faire un First, Next, Move, Prior et Last sur un DataSet détail ne fera bouger le curseur que parmi les enregistrements filtrés. De même Eof et RecordCount ne s'appliquent alors que sur le jeu d'enregistrement filtré et pas le total.

    Mais maintenant si effectivement il y a moyen de passer par une requête autant privilégier cette solution car elle sera infiniment moins coûteuse qu'un parcours de DataSet liés (surtout en cascade comme ça)
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  11. #11
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Non car justement dans une relation maître détail le jeu d'enregistrement est constamment filtré par rapport à l'enregistrement maître de la même manière que si tu appliquais un SetRange.

    Donc faire un First, Next, Move, Prior et Last sur un DataSet détail ne fera bouger le curseur que parmi les enregistrements filtrés. De même Eof et RecordCount ne s'appliquent alors que sur le jeu d'enregistrement filtré et pas le total.

    Mais maintenant si effectivement il y a moyen de passer par une requête autant privilégier cette solution car elle sera infiniment moins coûteuse qu'un parcours de DataSet liés (surtout en cascade comme ça)
    Bonjour,
    merci pour vos réponses, je vais essayer avec des requêtes, toutefois, je vous signale que en utilisant des DBNavigator les méthodes Next,Prior marche parfaitement sur un dataset filtre d'ou mon étonnement .
    A+

  12. #12
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par liazidf Voir le message
    Bonjour,
    merci pour vos réponses, je vais essayer avec des requêtes, toutefois, je vous signale que en utilisant des DBNavigator les méthodes Next,Prior marche parfaitement sur un dataset filtre d'ou mon étonnement .
    A+
    salut,
    Problème résolu à l'aide de requêtes sql.


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

Discussions similaires

  1. [XL-2010] Simple next for fonctionne pas
    Par 8e8eClo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/01/2012, 12h35
  2. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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