【发布时间】:2014-03-28 10:28:10
【问题描述】:
我有一个包含 2 个子表单(SF1 和 SF2)的表单 (F)。我还有 3 个 Oracle 表(T1、T2 和 T3)。每个(子)表格对应一个表格:
F -> T1
SF1 -> T2
Sf2 -> T3
此外,每个(子)表单都会根据某些条件显示一个行列表:
* F shows all rows of T1.
* SF1 shows rows of T2 based on the row selected in F.
* SF2 shows rows of T3 based on the row selected in SF1.
使之成为可能:
* In SF1: A field of SF1 is linked to the "id" field of F.
* In SF2: A field of SF2 is linked to a special control of F.
F 的特殊控件是一个具有特殊 SourceControl 属性的文本框:
=[SF1].[Form]![ID]
获取在 SF1 选择的行的 id。
好的,现在的问题是:如果用户在 F 处选择不同的行,那么 SF1 行和 SF2 行都会立即更新。但是,如果用户在 SF1 选择了不同的行,那么 SF2 行不会立即更新,它们可能会在用户更改选择后 0.3 或 0.5 秒更新。
造成这种不同行为的原因是什么?在第二种情况下是否也可以立即更新行?
更新:已解决:只需在 SF1 的 Form_Current() 事件中调用 SF2.Requery(),当用户在 SF1 更改选择时,SF2 内容将立即更新:
Private Sub Form_Current() ' at Form__SF1 module
Dim SF2 As Form
On Error Resume Next
Set SF2 = Me.Parent("SF2").Form ' SF2 is a son of the parent
If Err <> 0 Then ' parent not openned
Exit Sub
End If
On Error GoTo 0
SF2.Requery ' update SF2 content
End Sub
【问题讨论】:
-
听起来它在两种情况下都可以正常工作,只是速度很慢。桌子有多大?它们成比例地大吗?索引是如何设置的?
-
SF2 是 F 中的子表单还是 SF1 中的子表单?
-
表很小,因为它们仍然是开发表,大约有 5 到 10 行。我相信大小不是原因。 SF1 和 SF2 都是 F 的子形式(SF2 不是 SF1 的子形式)。奇怪的是,如果用户更改 F 中的选择,那么 SF2(和 SF1)会立即更新。但是,如果用户在 SF1 中更改选择,则 SF2 会在 0.3-0-5 秒后更新。正如我在对 Alan Waage 评论的回复中解释的那样,SF2 依赖于 SF1 的选择,方法是使用 F 处的中间文本框,该文本框从 SF1 获取所选值,并由 SF2 读取。