Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2011, 09h35   #1
Invité régulier
 
Inscription : mai 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 16
Points : 8
Points : 8
Par défaut recordset.EOF = True

Bonjour à tous,
Je dois actuellement créer une fonction qui teste si une chaine de caractère se situe dans un recordset. rien de compliqué me direz vous, sauf que j'ai un problème vraiment bizarre. Tout d'abord voici le code de la fonction

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Function in_piezo(ByVal pi_col As String) As Boolean
 
Dim cnn As ADODB.Connection
Set cnn = CurrentProject.Connection
Dim reserv As New ADODB.Recordset
Set reserv.ActiveConnection = cnn
Dim ok As Boolean
 
 
 
 
reserv.Open "SELECT nom_piezo FROM PIEZO", cnn, adOpenStatic, adLockReadOnly
'juste pour vérifier que le recordset n'est pas vide
MsgBox (reserv.RecordCount)
'je me suis dit si je force le positionnement du curseur ca pourrait fonctionner
reserv.MoveFirst
 
'mais ca coince ici : EOF vaut toujours True
While reserv.EOF = False And reserv.Fields(0).Value <> pi_col
   reserv.MoveNext
 
  ok = False
 
Wend
If reserv.Fields(0).Value = pi_col Then
 
ok = True
End If
 
 reserv.Close
 in_piezo = ok
End Function
bon tout est dans les commentaires, au debug la fonction EOF renvoie true.
J'espère que quelqu'un pourra m'aider
shuggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h50   #2
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Si le recordCount est > 0, il semble en effet se passer des choses bizarres. Es-tu vraiment sûr que EOF est VRAI?

Pour vérifier, je ferais plutôt
Code :
Debug.Print reserv.recordcount & " : " & reserv.eof
Une remarque : la fonction telle qu'elle est écrite ne cherche pas un texte dans un jeu d'enregistrements (puisque c'est elle qui ouvre ce jeu), mais plutôt un texte dans le champ d'une table. L'utilisation d'un DLookUp me semble ici plus approprié.

Cordialement,
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 12h06   #3
Invité régulier
 
Inscription : mai 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 16
Points : 8
Points : 8
le recordcount vaut 81 et le getstring me retourne bien la liste des enregistrements...Quand au EOF. Lorsque j'ai l'erreur et j'entre en debogage, j'ai bien EOF= TRUE en passant ma souris sur la méthode.
C'est plutôt embêtant vu que je ne rentre pas dans la boucle. Pour ce qui est le but de ma fonction, je me suis mal exprimé. Je dois bien vérifier si la chaine se trouve dans le champ d'une table. Ne connaissant pas la fonction Dlookup, je me penche dessus dès que j'aurai mangé. Merci pour la réponse rapide.

PSeux tu m'expliquer comment on récupère le Debug.Print
shuggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 12h50   #4
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Re,

Je comprends mieux : c'est après avoir parcouru le jeu d'enregistrements que tu trouves EOF = VRAI, ce qui est bien normal!

L'erreur est levée par quelle ligne?

Mais regarde le DLookUp quand même!

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 13h01   #5
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

Code :
1
2
 
While reserv.EOF = False And reserv.Fields(0).Value <> pi_col
Avec ces conditions, si dans le 1er enregistrement la valeur de reserv.Fields(0).Value est égal à pi_col, ça ne peut pas boucler !
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h02   #6
Invité régulier
 
Inscription : mai 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 16
Points : 8
Points : 8
Re,

@pgz: L'erreur est relevée au niveau du While
@pc75: A mon avis le problème vient de là.
Je teste et j'édite merci beaucoup!

EDIT:
Bon j'ai regardé un peu le Dlookup et j'en ai déduit que je pouvais tout remplacer par quelque chose dans ce genre
Code :
1
2
3
Dim ok As Boolean
ok = DLookup("[nom_piezo]", "PIEZO", "[nom_piezo]= '" & pi_col & "'")
in_piezo=ok
Mais apparemment au niveau de la ligne du DlookUp je fais appel à NULL
(message "utilisation incorrecte de NULL").

EDIT2: C'est bon j'ai trouvé le problème, je passe mon paramètre comme un pied. Je vous remercie encore pour votre aide et pour m'avoir fait découvrir le DLookUp. Je suis en fait en stage et je découvre un peu le vba avec un sujet (que je trouve) assez compliqué (importation sélective de données excel tout ça...)
Bref je vous souhaite une bonne journée.
Cordialement,
shuggy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h43   #7
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Re,

A mon avis la cause de l'erreur est la suivante :
Si la valeur recherchée n'existe pas, le jeu d'enregistrements est totalement parcouru.
A ce moment là, l'évaluation de la condition du While renvoie VRAI pour EOF (pas de pb) mais reserv.Fields(0) lève une erreur puisqu'on est EOF! CQFD.


Bonne journée,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h07.


 
 
 
 
Partenaires

Hébergement Web