为啥我不能从 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的主要内容,如果未能解决你的问题,请参考以下文章
为啥 jQuery click 事件在我的多步骤表单中不能多次工作?