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 :

Pb avec lecture de type while AdoQuery.Eof dans base mdb


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Pb avec lecture de type while AdoQuery.Eof dans base mdb
    Bonjour à tous,

    Voici pourtant un code qui me parrait classique
    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
      k:= 0;
      qry.Close;
      qry.SQL.Clear;
      qry.SQL.text:='SELECT * FROM TYPEOBJECT WHERE TYPEOBJECT_FAMILLY_NO ='+IntToStr(CurFamilly.FamillyNo)+';';
      qry.Prepared := true;
      qry.Open;
      qry.first;
      while not qry.Eof do
      begin
        CurFamilly.ObjectVec[k].NbrApparSeg:= qry.FieldByName('TYPEOBJECT_NB_SEG_APPAR').AsInteger;
        CurFamilly.ObjectVec[k].ObjectName:= qry.FieldByName('TYPEOBJECT_NAME').AsString;
        CurFamilly.ObjectVec[k].ObjTypeNo:= qry.FieldByName('TYPEOBJECT_NO').AsInteger;
        CurFamilly.DiscrimObj.NbrSegmentsVec[k]:= CurFamilly.ObjectVec[k].NbrApparSeg;
        CurFamilly.DiscrimObj.ObjectNameVec[k]:= CurFamilly.ObjectVec[k].ObjectName;
        qry.Next;
        inc(k);
      end;
    Or il se trouve que la lecture de certaines lignes de la table passent à la trappe, et de surcroît certaines autres sont lues en double voir en triple.

    Cela conduit à une liste des champs avec doublons et avec absence de certains autres

    Quelqu'un peut il me dire comment s'assurer de l'intégrité de la lecture ?

    A+ très vite j'espère car je suis dans le caca !

    Merci à tous

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    MDB ? ACCESS ?

    Ta boucle est correct à 1ère vue !
    La seule fois où j'ai eu un comportement abhérant ce fut sur MySQL, un fichier index corrompu, du coup pour un ID, il renvoyait toute la table et pour tous les autres rien ... destruction et rétablissement de l'index ayant réparer l'histoire (même le REPARE était au fraise)

    Sinon, le prepared est totalement inutile, tu n'as pas de paramètre et puis ACCESS ça ne doit même pas le gérer !

    Si tu lance la requête directement sur ACCESS, cela fonctionne ?

    pour info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurFamilly.ObjectVec[k].NbrApparSeg:= qry.FieldByName('TYPEOBJECT_NB_SEG_APPAR').AsInteger;
        CurFamilly.ObjectVec[k].ObjectName:= qry.FieldByName('TYPEOBJECT_NAME').AsString;
        CurFamilly.ObjectVec[k].ObjTypeNo:= qry.FieldByName('TYPEOBJECT_NO').AsInteger;
        CurFamilly.DiscrimObj.NbrSegmentsVec[k]:= CurFamilly.ObjectVec[k].NbrApparSeg;
        CurFamilly.DiscrimObj.ObjectNameVec[k]:= CurFamilly.ObjectVec[k].ObjectName;
    tu peux le simplifier en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with CurFamilly.ObjectVec[k] do
    begin
      NbrApparSeg := qry.FieldByName('TYPEOBJECT_NB_SEG_APPAR').AsInteger;
      ObjectName := qry.FieldByName('TYPEOBJECT_NAME').AsString;
      ObjTypeNo := qry.FieldByName('TYPEOBJECT_NO').AsInteger;
      CurFamilly.DiscrimObj.NbrSegmentsVec[k] := NbrApparSeg;
      CurFamilly.DiscrimObj.ObjectNameVec[k] := ObjectName;
    end;
    j'espère ne pas dire de bêtise mais cela devrait réduire le nombre d'opérations liés à l'accès d'un tableau.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/07/2015, 18h43
  2. Problème avec un while après écriture dans base Oracle
    Par NFHnv dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 18/07/2013, 11h04
  3. Définir le type de champs d'une base mdb
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2007, 13h21
  4. [LG]Type chaine avec plus de 255 car et EOF intempestif.
    Par jpclabaux dans le forum Langage
    Réponses: 2
    Dernier message: 27/10/2004, 10h39
  5. Problème avec Do while rs.EOF
    Par lauraned dans le forum ASP
    Réponses: 12
    Dernier message: 21/05/2004, 12h00

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