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 :

RecordCount = -1 alors que SELECT = OK


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut RecordCount = -1 alors que SELECT = OK
    Bonjour,


    J'ai un pb étrange avec une requête SQL dans mon code Delphi ; sont RecorCount me renvoie -1 alors que le résultat de la reqête contient des enregistrements.

    Voici la requête SQL qui fonctionne parfaitement dans l'analyseur de requête de MS SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct REPLACE(RIGHT(RTRIM(codehoraire), LEN(codehoraire) - CHARINDEX('/', codehoraire)), '&', '') as 'ZONE'
    from horaire
    order by 'ZONE'
    Elle me retourne bien les 15 lignes attendues.

    Et maintenant voici la même requête intégrée dans mon code Delphi (6) :
    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
    22
    procedure TMainForm.ListZones;
    var
      n, k : Integer;
    begin
      Requete.Close;
      with Requete.SQL do begin
        Clear;
        Add('select distinct REPLACE(RIGHT(RTRIM(codehoraire), LEN(codehoraire) - CHARINDEX(''/'', codehoraire)), ''&'', '''') as ''ZONE''');
        Add('from horaire');
        Add('order by ''ZONE''');
      end;
      Requete.Open;
     
      n := Requete.RecordCount;
     
      for k:=0 to n-1 do begin
        MEMO.Lines.Add(VarToStr(Requete.FieldValues['ZONE']));
        Requete.Next;
      end;
      Requete.Close;
     
    end;
    Lorsque je force la valeur de 'n' à 5 par exemple, il me renvoie bien les 5 1ers enregistrements

    Qq'un a-t-il déjà eu le même problème ? Merci...

  2. #2
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    J'ai une piste : il semblerait que ce soit la fonction SQL REPLACE() qui pose problème, car lorsque je la retire de ma requête, le RecordCount me renvoie bien le nbr de lignes.

    Le pb c'est que j'ai besoin du REPLACE() pour avoir le bon résultat

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    mai 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2003
    Messages : 259
    Points : 284
    Points
    284
    Par défaut
    Salut,

    Quel SGBD utilises-tu?
    Dans l'aide Delphi tu peux lire :
    Remarque : Utilisez RecordCount avec précaution, en effet le comptage des enregistrements peut être une opération longue en particulier avec des requêtes SQL renvoyant des ensembles de résultats importants. En principe, une application ne doit utiliser RecordCount qu'avec des tables Paradox et dBASE.
    Pour résoudre ton problème remplace la bouclke for par une boucle while.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while not requete.eof do
      begin
         // Ton traitement
         requete.next;
      end;

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2004
    Messages : 897
    Points : 1 533
    Points
    1 533
    Par défaut
    Va voir dans la FAQ au sujet du recordCount

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Merci Zatoobux, ca marche tip-top

    Je confirme donc, lorsque la requete SQL contient la fonction REPLACE(), le RecordCount renvoie toujours -1.

    Maintenant je ne sais pas si d'autres fonctions SQL font échouer le RC...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    mai 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2003
    Messages : 259
    Points : 284
    Points
    284
    Par défaut
    En général je préfére la méthode indiquée par Pascal Jankowski au TDataset.RecordCount pour connaitre le nombre d'enregistrement d'un jeux de données.

    @+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/04/2012, 16h43
  2. [AC-2003] Recordcount à 1 alors que j'ai 6 enregistrements
    Par beegees dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/06/2009, 12h43
  3. Table inexistante alors que je viens de la créer
    Par Invité dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 26/11/2005, 15h07
  4. Réponses: 4
    Dernier message: 13/08/2005, 11h20
  5. Probleme CSS : Text centrer alors que je le veux a gauche...
    Par vampyrx dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 19/07/2005, 00h53

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