Savoir si la requête retourne au moins un enregistrement
IAmIvyAlice
Messages postés14Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 septembre 2009
-
4 juin 2009 à 14:55
vrachid
Messages postés109Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention 5 octobre 2011
-
14 déc. 2009 à 16:01
Bonjour,
Voici mon soucis, j'aimerais tester si une requête ADO retourne au moins un enregistrement ou s'il n'y a pas eu de résultat pour cette dernière.
J'ai essayé avec if maRequeteAdo.eof then... ça ne fonctionnait pas, j'ai également essayé avec while NOT maRequeteAdo.eof do en pensant que s'il n'y avait pas d'enregistrement, il skipperais tout simplement le code, visiblement je me trompais ^_^
Donc est-ce que quelqu'un pourrait me faire savoir comment je dois faire pour obtenir cette information ?
Merci d'avance
Ivy
A voir également:
Sous-requête ramenant un enregistrement de plus d'une ligne
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 22 juil. 2009 à 18:36
Bonjour Grandyaka,
merci de ta suggestion... elle fonctionne !
La propriété ADOQuery1.RecordCount donne, en effet, le nombre de groupes de champs renvoyés par une requête 'select'.
J'avais essayé ADOQuery1.Fields.Count mais cela ne donne que le nombre de champs demandés dans le select. Sans intérêt.
Ce 'count' vaut toujours la même valeur qq soit la réponse du 'select'.
Merci de ton aide.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
DenisPhil
Messages postés20Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention21 août 2009 22 juil. 2009 à 21:16
Bonsoir Cantador,
en effet, parcourir une table énorme pour compter les enreg peut prendre du temps.
Mais je pensais (naïvement !) que ce compteur existait, mis à jour par Access à chaque 'insert / delete' fait dans une table...
BOF ! Je vais utiliser les 'bof/eof' plus rapides.
Merci
rozg
Messages postés8Date d'inscriptionvendredi 12 décembre 2008StatutMembreDernière intervention11 juin 20141 10 sept. 2009 à 18:14
Un commentaire sur la réponse de Cantador du 22/08:
L'ancètre TDataSet met à disposition une fonction publique FUNCTION IsEmpty: BOOLEAN;
Qui semble donc répondre parfaitement au besoin.
Toutefois, si on va voir le source, cette fonction est codée (Delphi 2007):
Result:=FActiveRecord>=FRecordCount;
S'ils ont codé comme ça on pourrait penser que la détermination de FRecordCount ne nécessite pas le parcourt de toute la table.
C'est d'autant plus souhaitable que IsEmpty est utilisé en interne de l'unité DB (par exemple dans DoAfterOpen !
Si on cherche un peu, on voit qu'effectivement FRecordCount est mis à jour ici ou là (par exemple dans TDataSet.Insert).
Nota: Regarde un peu se qui se passe dans ClearBuffers et ActivateBuffers...
Je n'ai pas tout analysé mais je pense que FRecordCount ne représente pas forcément le nombre réel d'enregistrements de la table mais au plus le nombre qui est dans le tampon (FBufferCount). Dans ce cas, l'utilisation de IsEmpty n'aurait pas d'inconvénient.
UN détail : La propriété TDataSet.RecordCount renvoie toujours -1. Ce sont les descendants qui doivent implémenter (c'est le cas d'ADO).
vrachid
Messages postés109Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention 5 octobre 2011 14 déc. 2009 à 16:01
Bonjour à tous
il y a aussi cette méthode normalement:
begin with AdoQuery do begin ..
....
SQL.Add('SELECT COUNT( * ) as NbRecord From maTable');
....
...
if FieldByName('NbRecord').AsInteger > 0 then ......
else ....
end; end;