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 :

TSqlQuery et RecordCount


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut TSqlQuery et RecordCount
    Bonjour,
    J'ouvre une requete qui me renvoi des enregistrements (select ID from table)
    J'essai de faire MaRequete.RecordCount et là, delphi me met "opération non supportée" ...
    J'utilise delphi 7 avec dbExpress
    Cette ereur est due a dbexpress, car c'est la meme erreur sur Firebird ou MSSQL 2005 ...
    Faut il que j'utilise un clientdataset a chaque fois ?... y a - til une solution plus simple ?

    Merci

  2. #2
    Expert confirmé
    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 : 62
    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
    Par défaut
    Salut

    TSQLQuery est un ensemble de données unidirectionnel, donc déplace toi à la fin de ton Query avant d'accéder à RecordCount.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with SQLQuery1 do
      ExecSQL;
      Last;
      NbRecord := RecordCount;
      // ...
    end;
    @+ Claudius

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut
    Il ne veut pas du last : "opération non autorisé sur un ensemble de données unidirectionel '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      With DMMain.QYTravail do
      begin
     
        Close;
        SQL.Clear;
        SQL.Add('Select ACTIONID from U_PROFILERIGHTS ');
        SQL.Add('where ID = :ID');
        ParamByName('ID').AsInteger := DMMain.ProfileID;
        Open;
        Last;
        i := RecordCount;
    ...
      end;
    je n'ai pas de dataset ni rien de plus

  4. #4
    Expert confirmé
    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 : 62
    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
    Par défaut
    Re,
    Citation Envoyé par Aide Delphi
    La lecture de RecordCount générera une exception si l'ensemble de données ne peut pas déterminer le nombre d'enregistrements.Ne lisez pas RecordCount si :
    • L'ensemble de données représente une procédure stockée.
    • L'ensemble de données représente une requête qui contient des paramètres.
    • L'ensemble de données représente une jointure multitable.
    Tu vas devoir passer par une autre requête pour le count. N'utilisant pas dbExpress, je ne vois pas d'autres astuces.

    @+ Claudius

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut
    Je suis en train de passer du BDE a dbExpress, je pense que des que je vais utiliser un parametre, je vais etre obligé d'écrire directement dans le sql.add ... avec les risque d'erreur que ca comprend, notement au niveau des dates, différemment gérée par sqlserver et interbase

    Merci

  6. #6
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    De notre côté, notre application sait quelle base de données est utilisée (MySQL ou Oracle) et en fonction nous avons créé des fonctions pour tous les types de données particuliers (date, texte, entier) et renvoie le texte sql correspondant.

    Cela limite le risque d'erreur mais ne l'enlève pas.


    Edité: j'ai dit une grosse bêtise(voir la suite), j'ai confondu avec un autre composant, et j'ai mal lu le message de Cl@udius.

    Avec la fonction TSQLQuery.Count cela fonctionnera. (par contre cela fera automatiquement un select count(*) etc ... vérifié avec un SQLMonitor).

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut
    je pense que je vais etre obligé de faire comme ca.
    je connais la base (Firebird ou MSSQL), donc je formatterai en fonction de ...
    Merci

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut
    Meme quand je fais un simple select, ca ne marche pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select ACTIONID from MaTable
    WhereID=1
    recordcount me renvoie le nbre d'enregistrement DANS cette table !

  9. #9
    Expert confirmé
    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 : 62
    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
    Par défaut
    Citation Envoyé par coucoucmoi Voir le message
    recordcount me renvoie le nbre d'enregistrement DANS cette table !
    Ben tu t'attendais à quoi ?
    Je ne comprends ta remarque ! RecordCount renvoie le nombre d'enregistrements.

    @+

  10. #10
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Par défaut
    Ben je m'attendais au nombre de lignes renvoyées par la requete, cad 30, pas au nombre de lignes de la table entiere cad 107.

Discussions similaires

  1. TSQLQuery et recordcount
    Par Cybher dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/08/2005, 09h51
  2. procédures stockées et recordcount-1
    Par Josephe dans le forum ASP
    Réponses: 2
    Dernier message: 19/03/2004, 12h06
  3. Recordcount sur une table filtrée
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/03/2004, 00h05
  4. [VB6] [ADO] Problème avec recordcount
    Par MASSAKA dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2003, 11h45
  5. [XMLRAD] RecordCount ?
    Par Pm dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/11/2002, 14h59

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