Erreur '3021'

soltwoter Messages postés 1 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 22 mai 2007 - 22 mai 2007 à 09:25
bigoliver Messages postés 9 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 2 janvier 2013 - 2 janv. 2013 à 11:15
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

9 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
22 mai 2007 à 09:28
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

 
0
relieves Messages postés 4 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 23 mai 2007
22 mai 2007 à 10:20
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 mai 2007 à 20:52
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 #
0
relieves Messages postés 4 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 23 mai 2007
22 mai 2007 à 21:10
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 mai 2007 à 21:17
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 #
0
relieves Messages postés 4 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 23 mai 2007
22 mai 2007 à 21:20
Merci bcp pour ton aide précieuse. Je test sa demain au bureau!
0
relieves Messages postés 4 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 23 mai 2007
23 mai 2007 à 09:00
 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 !
0
horacejoun Messages postés 4 Date d'inscription samedi 31 juillet 2010 Statut Membre Dernière intervention 8 octobre 2010
1 oct. 2010 à 15:26
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
0
bigoliver Messages postés 9 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 2 janvier 2013
2 janv. 2013 à 11:15
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
0
Rejoignez-nous