当我填写所有字段时,我得到错误3021:没有当前记录

时间:2014-02-25 18:04:36

标签: vba ms-access access-vba

我有一张表需要通过表单填写一些记录。我正在使用此代码:

Set rp = CurrentDb.OpenRecordset("table1")
Do
    rp.Edit
    rp!field2 = Text22
    rp.Update
    rp.MoveNext
Loop

当代码填满表格并到达文件末尾时,我收到3021错误。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

试试这个:

Set rp = CurrentDb.OpenRecordset("table1")
Do Until rp.EOF
    rp.Edit
    rp!Field2 = Text22
    rp.Update
    rp.MoveNext
Loop

另一种方法是使用这样的东西:

CurrentDb.Execute "UPDATE table1 SET field2='" & Text22 & "'", dbFailOnError 

答案 1 :(得分:1)

如果您希望将表中的每一行更新为特定值,那么使用SQL将会快得多。

例如:

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."

您甚至可以指定参数类型,例如:

sSQL= "PARAMETERS param Text(150); UPDATE Table1 SET Field2=param"

使用参数构建sql字符串会更安全。