Recordset vide test infructueux par IsEmpty / IsNull
CrossHair
Messages postés9Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention13 octobre 2009
-
13 avril 2005 à 12:13
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
16 avril 2005 à 16:05
Salut Ô Gens !
J'ai un soucis pour tester un recordset vide. Je créée le recordset par une requête SQL. Parfois aucune donnée ne correspond à cette requête... mon recordset est donc vide ! Sinon cela me renvoi un seul enregistrement (Sumof#) Pas de soucis. Pour que mon code soit net, je dois vérifier si mon recordset est vide. Dans ce cas je donne une valeur Ø au champ du formulaire de destination, sinon la valeur de l'enregistrement.
Le test :
MyCheck = IsEmpty(rst.SumOf#)If MyCheck True then Formulaire.Champ 0 Else rst.SumOf#
C'est là que le bas blesse... il me retourne toujours False ! Y compris par IsNull.
Vos solutions sont ... bienvenueS.
En attendant je biaise en comptant le nombre d'enregistrement du recordset :
MyCheck = rst.RecordCountIf MyCheck 0 then Formulaire.Champ 0 Else rst.SumOf#
CrossHair (CS addicted - Je veux dire CS pas CS, même si CS un peu. Celui qui pige se sentira conserné )
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 avril 2005 à 17:36
Bizarre ta syntaxe rst.SumOf#
Bref, teste rst.RecordCount qui te renverra le nombre de réponses dans ton RecordSet, je ne vois pas où est le problème ...
Sinon, pour tester si un des champs n'est pas vide, suffit de faire :
If Not IsNull(rst!monChamp) Then maVar = rst!monChamp ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
CrossHair
Messages postés9Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention13 octobre 2009 14 avril 2005 à 09:16
rst.recordCount... je disais juste que faute de mieux, j'avais trouvé çà... mais que çà ne me plaisait qu'à moitié. Mais si çà vous semble propre... c'est top moumoute !
Merci pour ta (vos) réponse(s). J'ai appliqué "if not" ( et "if" seul); çà roule !
En prime j'ai pigé ! Dsl pour la syntaxe... çà sera mieux la prochaine !
CrossHair
Dans le genre j'ai aussi :
"L'expérience est un bien qui s'achète cher et se revend très mal." Partagez la vôtre, c'est ce que vous avez de mieux à en faire.
CrossHair
Messages postés9Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention13 octobre 2009 14 avril 2005 à 10:50
Oups ! Pas tout à fait mais EUREKA j'ai trouvé !
Il semble que IsNull (ou IsEmpty) ne test qu'un champ de l'enregistrement. Mon problème est que ma requête peut ne me retourner aucun enregistrement. C'est donc tous le RecordSet qui peut être vide. Je dois donc pourvoir tester quelque chose comme :
if IsEmpty (rst) then......
Et pas :
if IsEmpty (rst.champ) then....
La solution qui me semble la plus propre est un test sur BOF et EOF :
If ( rst.EOF true And rst.BOF true ) then 'valeurRecordSetVide' Else rst.champ
Ok ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 avril 2005 à 16:05
Même si ta requète ne renvoie aucune données (ligne), la structure du RecordSet existe : il y a une colonne par champ demandé dans le Select.
Ces champs peuvent être lu de 2 façons :
rst.Fields(NoDuChamp).Value
rst!NomDuChamp
ou rst![NomDuChamp] si le nom du champ comporte des espaces ou caractères spéciaux
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)