为啥我不能从 VBA 中的多实例表单中获取当前记录 ID

Posted

技术标签:

【中文标题】为啥我不能从 VBA 中的多实例表单中获取当前记录 ID【英文标题】:Why can't I get the current record ID from a multi-instance form in VBA为什么我不能从 VBA 中的多实例表单中获取当前记录 ID 【发布时间】:2021-08-24 08:41:11 【问题描述】:

我有一个数据库,我正在处理许多表单,当不同表单的某些内容发生更改时,其中一些必须更新。我已将其设置为多实例表单,其工作原理如下:

Set frm = New Form_Name
frm.RecordSource = "select * from Table_Name where id = " & ID
colForms.Add Item:=frm, Key:=frm.hwnd & ""
mintForm = mintForm + 1
frm.SetFocus
frm.Visible = True

colForms 是一个集合。 为了刷新表单,我添加了一个函数来刷新与传递的名称和 ID 匹配的表单:

Function RefreshForm(RForm As String, ID As Integer)
    If Developer = False Then On Error GoTo Fehler
    Dim F As Form
    On Error Resume Next
    For i = 1 To mintForm
        Set F = colForms(i)
        If F.CurrentRecord = ID And F.Name = RForm Then F.Refresh
    Next i
'Error handling logic
Done:
    Exit Function
Fehler:
    RuntimeError "MultiInstance: RefreshForm", Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext, Err.LastDllError
    Err.Raise 1000, , "Folgefehler"
End Function

问题是,由于某种原因,F.CurrentRecord 始终为 1,即使表单中记录的 ID 绝对不是 1。知道我做错了什么,或者我如何正确获取记录 ID (主键)来自表单?表单肯定是绑定的(至少是我试图获取 ID 的表单)。

【问题讨论】:

您的代码没有显示 F.CurrentRecord 的值是如何/在哪里设置的。 @HelO'Ween:.CurrentRecord是表单的一个属性,枚举表单的记录;它没有读取 ID 的值。 那么我不明白你的问题,因为你的代码指出:If F.CurrentRecord = ID,我认为这是你正在寻找的记录 ID。 【参考方案1】:

CurrentRecord 没有从唯一标识符字段中提取记录的 ID。 CurrentRecord 是表单分配的序号,与字段中保存的记录唯一标识无关。

如果焦点在第五条记录上,那么它就是记录 5,如果该记录的唯一 ID 字段值为 5,那么它们是等价的。进行这种比较很少有意义。无论过滤/排序如何,表单总是按顺序对记录进行编号,从 1 开始,但可以过滤表单以显示记录的子集和/或可以对记录进行排序,因此 ID 不是连续的,也不是从 1 开始的。

如果您想知道具有焦点的记录的 ID,请参考包含该数据的字段名称。

If F!fieldname = ID And F.Name = RForm Then F.Refresh

【讨论】:

谢谢,就是这样!现在可以了,完美!只要我有足够的声望,我就会给你一个赞成票。

以上是关于为啥我不能从 VBA 中的多实例表单中获取当前记录 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 在 Access 中关闭单个表单实例?

如何更新 ms access vba 中的多值组合框?

使用从 VBA 代码派生的值填充表中的字段

为啥 jQuery click 事件在我的多步骤表单中不能多次工作?

Access 2013 - VBA - 记录集插入获取 ID

访问当前记录上的 VBA 打开表单