子文本字段显示#Name?而不是来自ADO记录集的数据

问题描述 投票:-1回答:1

回复评论:

我从头开始建立新表格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位

access-vba
1个回答
1
投票

我觉得这有点尴尬,但是无论如何我都会张贴它,因此它对于其他进行类似战斗的人来说可能是有价值的...

与问题中的代码相反,在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后,它就像一个超级按钮。

感谢所有分享想法的评论者,终于找到了解决方案!]]

© www.soinside.com 2019 - 2024. All rights reserved.