Quand je remplisse tous les champs, je reçois une erreur 3021: Aucun enregistrement actuel
-
21-12-2019 - |
Question
J'ai une table qui doit être remplie d'un enregistrement à travers un formulaire.J'utilise ce code:
Set rp = CurrentDb.OpenRecordset("table1")
Do
rp.Edit
rp!field2 = Text22
rp.Update
rp.MoveNext
Loop
Lorsque le code remplit la table et atteint la fin du fichier, j'obtiens l'erreur 3021.
Pourquoi cela se produit-il?
La solution
Essayez celui-ci:
Set rp = CurrentDb.OpenRecordset("table1")
Do Until rp.EOF
rp.Edit
rp!Field2 = Text22
rp.Update
rp.MoveNext
Loop
Une autre façon serait d'utiliser quelque chose comme ceci:
CurrentDb.Execute "UPDATE table1 SET field2='" & Text22 & "'", dbFailOnError
Autres conseils
Ce serait beaucoup, beaucoup plus rapide d'utiliser SQL si vous souhaitez mettre à jour chaque ligne d'une table à une valeur spécifique.
Par exemple:
sSQL= "UPDATE Table1 SET Field2=param"
Set qdf = db.CreateQueryDef("", sSQL)
qdf.Parameters!param = Trim(Me.Text22)
qdf.ReturnsRecords = False
qdf.Execute dbFailOnError
intResult = qdf.RecordsAffected
MsgBox "You updated " & intResult & " records."
Vous pouvez même spécifier le type de paramètre, par exemple:
sSQL= "PARAMETERS param Text(150); UPDATE Table1 SET Field2=param"
Il est beaucoup plus sûr d'utiliser des paramètres qui construisent des chaînes SQL.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow