Erreur '3021'

Signaler
Messages postés
1
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
22 mai 2007
-
Messages postés
9
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
2 janvier 2013
-
Bonjour à tous, je suis nouveau sur le forum. Je migre actuellement une application DAO d'un logiciel vers ADO.

Private Sub Ss0_DataFill(ByVal Col As Long, ByVal Row As Long, ByVal DataType As Integer, ByVal fGetData As Integer, Cancel As Integer)

Dim Ret As Integer
Dim Wstr, Ww As String
Dim Wq As Double

If fGetData Then
    Select Case Col
                    Case 6:
                       Cancel = False
                        Ss0.Row = Row
                        Ss0.RowHidden = False
                        Ret = SpreadGetText(Ss0, 1, Row, Wstr)
                        If Wstr = "" Then
                            Ss0.Col = 8
                            Ss0.Row = Row
                            Ss0.Lock = False
                            Exit Sub ''Ligne Commentaire
                        End If
                        Ss0.Col = 3
                        Ss0.Col2 = 8
                        Ss0.Row = Row
                        Ss0.Row2 = Row
                        Ss0.BlockMode = True
                        Ss0.Lock = False
                        Ss0.BlockMode = False                        Ww "Code_Article '" & Wstr & "'"
                        FArticle.Recordset.Find Ww
                        If FArticle.Recordset("Prix_Non_Modifiable_Article") = 1 Then
                            Ss0.Col = 5
                            Ss0.Row = Row
                            Ss0.Lock = True
                            Ss0.Col = 6
                            Ss0.Row = Row
                            Ss0.Lock = True
                    End If
                    If FArticle.Recordset("Remise") <> 1 Then
                        Ss0.Col = 7
                        Ss0.Row = Row
                        Ss0.Lock = True
                    End If
            Case 31:
                    Cancel = True
                    Ret = SpreadGetText(Ss0, 1, Row, Wstr)
                    SpreadSetText Ss0, 31, Row, Wstr
            Case 32:
                    Cancel = True
                    Ret = SpreadGetText(Ss0, 3, Row, Wq)
                    SpreadSetText Ss0, 32, Row, Wq
            Case 33:
                    Cancel = True
                    Ret = SpreadGetText(Ss0, 16, Row, Wstr)
                    SpreadSetText Ss0, 33, Row, Wstr
            End Select
End If
End Sub

Voici l'erreur que le compilateur me sort:
Erreur d'exécution '3021'
BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.

J'ai besoin de votre aide
A voir également:

9 réponses

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

As-tu regardé dans ton aide en ligne ce que veut dire Eof et Bof ? Non ?
Cela veut dire que tu est soit à la fin de ton fichier soit au début, et ne peux par exemple faire un movenext, moveprevious....

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
4
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
23 mai 2007

Merci de m'avoir répondu Exploreur. Je sais bien ce que signifient EOF(End of File) et BOF (Begin of file).  Cependant je ne fai aucune movenext ou moveprevious dans mon code
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Effectivement tu ne fais pas de movenext, mais tu ne vérifie pas non plus que ton recordset contient au moins 1 enregistrement, tu y va franco, tu attaque direct la lecture de l'enregistrement courant. Hors si ton recordset n'a retourné aucun enregistrement, il n'y a pas d'enregistrement courant et donc une erreur la de la tentative d'accès.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
4
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
23 mai 2007

Merci de m'aider à comprendre mes erreurs. Cependant, j'aimerais savoir ce qu'il faut que je rajoute! Je sais que je fais des erreurs mais je ne vois pas ce qu'il faut que je change conccrètement.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je connais pas ADO, mais je pense que ça doit etre comme en DAO, tu dois avoir quelque chose du genre .Recordset.Count, qui doit etre différent de 0 lorsque tu as des enregistrements.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
4
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
23 mai 2007

Merci bcp pour ton aide précieuse. Je test sa demain au bureau!
Messages postés
4
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
23 mai 2007

 Ww "Code_Article '" & Wstr & "'
 FArticle.Recordset.Find Ww
 If FArticle.Recordset.RecordCount <> 0 Then
    If FArticle.Recordset("Prix_Non_Modifiable_Article") = 1 Then
                            Ss0.Col = 5
                            Ss0.Row = Row
                            Ss0.Lock = True
                            Ss0.Col = 6
                            Ss0.Row = Row
                            Ss0.Lock = True
     End If
  Else
            MsgBox("Pas d'enregistrement")
  End If

Le problème est le même !
Messages postés
4
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
8 octobre 2010

Bonjour la meilleurs façon de tester si un Recordset est vide il faut faire ceci:

dim MonRs as Recordset

if ((MonRs.EOF true)and(MonRs.BOF true))then


En fait lorsqu'un Recordset est Vide le BOF et EOF pointe sur le meme espace qui est le vide
Messages postés
9
Date d'inscription
jeudi 3 octobre 2002
Statut
Membre
Dernière intervention
2 janvier 2013

C'est exact pour le EOF et le BOF, et aussi, le Recordset.RecordCount retourne le nombre d'enregistrements présents dans la table ou la requête associée au RecordSet et non le nombre d'entrées trouvées après une recherche.

Only BigOliver