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 composant UIB et D7


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut PB avec composant UIB et D7
    J'utilise :
    - Delphi 7
    - UIB 2.1
    - FireBird

    Lorsque j'execute un select qui me ramene un seul enregistrement, et que j'effectue un fetchall (justement pour pouvoir compter le nombre d'enregistrements), eof passe a vrai alors que je n'ai pas effectuer un seul next

    si je n'effectue pas de fetchall tout se passe bien, seulement je n'ai pas l'information recordcount;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if rs.Eof then 
      Memo.Lines.Add('end');
    Memo.Lines.Add(rs.Fields.ByNameAsString['DOS_NOM']);
    ---> data

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      rs.FetchAll;
      rs.first;
      if rs.Eof then 
        Memo.Lines.Add('end');
      Memo.Lines.Add(rs.Fields.ByNameAsString['DOS_NOM']);
    --> end // si un seul enregistrement
    --> data

    J'ai essayé avec D6 et je n'ai pas ce probleme. C'est tout de meme bizar un bug aussi énorme ...

    >< quelqun aurait eu le meme souci et aurait il une solution.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut et bienvenue sur ce forum

    Citation Envoyé par Caesarus
    eof passe a vrai alors que je n'ai pas effectuer un seul next
    Si comme je le suppose tu utilises un JvUIBQuery, et bien si tu effectues sans le savoir un Next sur ton Query.
    Un FetchAll est implémenté comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TJvUIBStatement.FetchAll;
    begin
      while not Eof do Next;
    end;
    Citation Envoyé par Caesarus
    C'est tout de meme bizar un bug aussi énorme ...
    Rien à voir avec un bug !


    Si ton but est de remplir ton mémo avec la valeur d'un champ puis de mettre 'End' à la fin, ce code doit faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      with JvUIBQuery1 do
      begin
        Open;
        Memo1.Clear;
        while not EOF do
        begin
          Memo1.Lines.Add(Fields.ByNameAsString['DOS_NOM']);
          Next;
        end;
        Memo1.Lines.Add('<< End >>');
        Close(etmCommit);
      end;
    @+ Claudius

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    Merci de ta réponse, salutation à toi.

    oui le fetchall effectue des next ^^ mais le first est la pour replacer le curseur sur le premier enregistrement (pour lequel s'il y a au moins un enregistrement eof = false, enfin normalement)

    mais je me suis peut être mal exprimé :

    ceci marche ds tout les cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      with JvUIBQuery1 do
      begin
        Open;
        Memo1.Clear;
        while not EOF do
        begin
          Memo1.Lines.Add(Fields.ByNameAsString['DOS_NOM']);
          Next;
        end;
        Memo1.Lines.Add('<< End >>');
        Close(etmCommit);
      end;

    ceci ne marche pas (avec un seul enregistrement récupéré) il ne passe pas une seule fois dans la boucle (avec D7/UIB 2.1/firebird)
    Dans le cas ou il y a plus d'un enregistrement cela fonctionne sans souci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      with JvUIBQuery1 do
      begin
        Open;
        fetchall;  // <- !!!
        first;  // <- !!! oui le fecthall place le curseur a la fin;
        Memo1.Clear;
        while not EOF do
        begin
          Memo1.Lines.Add(Fields.ByNameAsString['DOS_NOM']);
          Next;
        end;
        Memo1.Lines.Add('<< End >>');
        Close(etmCommit);
      end;

    je suis d'accord qu'avec un while je n'ai pas besoin de savoir par avance le nombre d'enregistrement que j'ai (recordcount) mais comme mes modules d'acces aux données sont générés automatiquement ... le fetchall est indispensable (il me semble) pour savoir le nombre d'enregistrements recupérés
    ( remarque la fonction last effectue le même travail et genere le meme pb)

    >< ce qui me semble bizar c'est que je n'ai vu personne avoir le même souci.
    j'ai pensé a un pb d'installation mais apres multiples installations j'ai tjrs le même pb.

    Ce même code marche très bien sous D6, avec un seul enregistrement recupéré. Il passe dans la boucle.

    Je peux contourner le prob tres grossierement de la facon suivante :

    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
      with JvUIBQuery1 do
      begin
        Open;
        fetchall;  // <- !!!
        first;  // <- !!! oui le fecthall place le curseur a la fin;
        if recordCount > 0 then
          onfirst := true
        else
          onfirst := false;
        Memo1.Clear;
        while (not EOF) or (onfirst) do
        begin
          Memo1.Lines.Add(Fields.ByNameAsString['DOS_NOM']);
          Next;
          onfirst := false;
        end;
        Memo1.Lines.Add('<< End >>');
        Close(etmCommit);
      end;
    mais c'est pas beau heiiiin ><

    >< si quelqun avait D7, UIB 2.1 et firebird et qui n'aurais pas ce bug ( je maintient :p ). ca voudrais dire que je me suis planté dans l'install (tt les fois ou j'ai reinstallé avec tt les version d'UIB que j'ai testé).

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Caesarus
    Ce même code marche très bien sous D6, avec un seul enregistrement recupéré.
    Je viens d'effectuer un test et cela marche également sous Delphi7 / UIB2.1 / FB2.0.1.


    ???

    [EDIT]
    Avec un JvUIBQuery, tu n'as pas accès à la propriété RecordCount. Pourquoi ce besoin de faire un FetchAll ?
    [/EDIT]

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    >< tin j'me disais aussi je connais celui qui a pondu les composants, j'resterais probablement tjs un amateur a coté de lui.

    en reinstallant j'ai pourtant redl le package, retiré le package dans delphi, fermé delphi et reinstaller les composants.

    >< j'vais retenter

    sisi avec query on a acces au recordcount :
    - Query.Fields.RecordCount
    seulement pour des soucis d'optimisation, il faut effectuer un fetchall après l'open pour que la propriété soit correcte.

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Citation Envoyé par Caesarus
    - Query.Fields.RecordCount
    Tiens je l'avais pas vu celui-là ! Thanks


    Comment as-tu défini les paramètres 'USER' dans le fichier JvUIB.inc ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    >< j'ai pas toucher a ca.

    J'ai pris les sources sur progdigy. j'ai install synEdit au préalable;
    pi j'ai installer les packages
    JvUIBD7R.dpk (compile)
    JvUIBD7D.dpk (install)

    j'oubliais la modification du chemin de bibliothèque (options d'environnement), j'avoue la premiere fois j'ai eu des erreurs.

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Extrait de JvUIB.inc
    // *****************
    // BEGIN USER DEFINE
    // *****************

    //----------
    // FIREBIRD
    //----------
    {.$DEFINE FB102}
    {.$DEFINE FB103}
    {.$DEFINE FB15}
    {$DEFINE FB20} // <- doit être en concordance avec ta version
    {.$DEFINE FBEMBED}

    //----------
    // INTERBASE
    //----------
    {.$DEFINE IB65}
    {.$DEFINE IB7}
    {.$DEFINE IB71}
    {.$DEFINE IB75}

    //----------
    // YAFFIL
    //----------
    {.$DEFINE YF867}

    // Enable Multithreading,
    // Disabling Multithrading will made UIB faster.
    {$DEFINE UIBTHREADSAFE}

    //----------
    // Languages
    //----------
    {.$DEFINE UIBLANG_EN} // English
    {$DEFINE UIBLANG_FR} // French
    {.$DEFINE UIBLANG_CZ} // Czech
    {.$DEFINE UIBLANG_DE} // Deutch
    {.$DEFINE UIBLANG_RU} // Russian
    {.$DEFINE UIBLANG_ES} // Espanol
    {.$DEFINE UIBLANG_TR} // Turkish

    // use SYNEDIT (sql editor)
    {.$DEFINE HAVE_SYNEDIT} // je n'utilise pas SynEdit ;-)

    // no components
    {.$DEFINE UIB_NO_COMPONENT}

    // support VARCHAR(16) CHARSET OCTET COLLATION OCTET as TGUID
    {$DEFINE GUID_TYPE}

    // set this to handle GUID as VARCHAR(38) instead of standard VARCHAR(16) "octets"
    {.$DEFINE GUID_AS_TEXT}

    // ***************
    Vérifie ces paramètres, et recompile tes packages si nécessaire. Je ne sais si c'est la solution à ton problème, mais de toute façon... ca ne mange pas de pain

    @+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    avec les parametres, pareil.

    En revanche j'avais pas essayé mais avec le dataset je n'ai pas le pb.
    bizar

    Je testerais ce soir chez moi, j'ai tjrs cette soluce.

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Caesarus
    En revanche j'avais pas essayé mais avec le dataset je n'ai pas le pb.
    bizar

    Ouais ca reste bizarre, cela devrait fonctionner avec un Query !

    @+

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/05/2011, 10h28
  2. Problème d'écriture avec les Composants UIB
    Par zoheir13 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/01/2008, 13h32
  3. DBGrid avec composants UIB
    Par BRODU dans le forum Bases de données
    Réponses: 5
    Dernier message: 19/09/2007, 16h04
  4. Affichage caractères asiatique avec composants standard
    Par FransTreb dans le forum Composants VCL
    Réponses: 5
    Dernier message: 05/12/2005, 17h20
  5. probleme avec composant indy IDhttp
    Par ulysse66x dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 09h35

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