回复评论:
我从头开始建立新表格sfrmService
->再次获得#Name?
:-(我使用表单助手构建它,并从表中获取字段名称。因此,ControlSources匹配,因为我在rs
中相应地命名了字段。
[? Me.pID.ControlSource
产生pID
,与pTitel
相同,名称正确
我添加了一个例程,用1行填充rs
(请参见下文),并且? rs.RecordCount
产生1
[大图:在预订系统中,我通过3种连续形式收集新预订的数据。 sfrmService
(这3种形式中的1种形式的子形式)拥有与该新预订关联的服务列表。当然,我将文本字段限制为仅2个,原始子表单中还有更多。我创建了一个仅包含这两个文本字段的子表单进行测试。仅当用户提交新创建的预订时,数据才会被写入表中。我想在内存中使用断开的记录集来执行这些操作。我可以将它们直接写到表中,但是需要经常更新它们,并在取消->资源使用情况下将其删除。并且:我想挑战自己学习新技术:-)
我有一个主表单frmBooking
和一个子表单sfrmService
,两者都是未绑定的,并且它们之间没有链接。
记录集是在子窗体的onload
-Event中建立的,如下所示:
Option Explicit
Public rs As ADODB.Recordset
...
Private Sub Form_Load()
Set rs = New ADODB.Recordset
With rs
.Fields.Append "pID", adInteger, 4, adFldKeyColumn
.Fields.Append "pTitel", adVarChar, 255, adFldUpdatable
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
' *** added with 1st update of question ***
rs.AddNew
rs!pID = 100
rs!pTitel = "test"
rs.Update
rs.MoveFirst
Set Me.Recordset = rs
End Sub
记录集正确构建,没有错误。然后,通过主窗体中的例程将其填充数据,一切正常,但是sfrmService
上的文本框改为显示#Name?
。
我试图将子窗体的控件与VBA重新绑定,没有区别。我在打开rs之前添加了rs.CursorType = adOpenKeySet
,没有区别。
我在这里无能为力,所以我们将不胜感激!
使用MS Access 2019 64位
我觉得这有点尴尬,但是无论如何我都会张贴它,因此它对于其他进行类似战斗的人来说可能是有价值的...
与问题中的代码相反,在Me.Requery
之后我忘了注释掉了Set Me.Recordset = rs
...
Private Sub Form_Load()
Set rs = New ADODB.Recordset
With rs
.Fields.Append "pID", adInteger, 4, adFldKeyColumn
.Fields.Append "pTitel", adVarChar, 255, adFldUpdatable
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
Set Me.Recordset = rs
Me.Requery <--------------------- BAD IDEA
End Sub
删除Me.Requery
后,它就像一个超级按钮。
感谢所有分享想法的评论者,终于找到了解决方案!]]