我想要做的是,每当用户打开表单(以及默认打开的子表单)时,我想搜索表单上的所有列(控件?),检查是否它们当前设置为使用Access'内置Totals行聚合(总和,计数等),如果是,则将它们设置为不聚合。
这样做的原因是存储了数百万条记录,所以当有人查询到3-4并打开Sum时,然后关闭它,当下一个人打开它时,它会尝试汇总数百万个数字和冻结。表单显示来自通过SQL填充的表的查询结果(我想,如果该句子有意义)。这是我到目前为止所做的:
a = tf.Variable(current_states_outputs)
b = tf.Variable(current_actions)
out = tf.squeeze(tf.gather_nd(a,tf.stack([tf.range(b.shape[0])[...,tf.newaxis], b[...,tf.newaxis]], axis=2)))
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
sess.run(out)
#output
[1, 6, 8]
我在Access VBA方面没有那么多经验(通常在Excel VBA中工作)所以请原谅我,如果我完全不在这里。命令Private Sub Form_Load()
'this form_load is in the UserApxSub sub-form, for reference
Call De_Aggregate
End Sub
Private Sub De_Aggregate()
Dim frm As Form, con As Control
Set frm = Forms!UserAPX!UserApxSub.Form!
For Each con In frm.Controls
If con.ControlType = acTextBox Then
If con.Properties("AggregateType").Value <> -1 Then
'crashes on following line
con.Properties("AggregateType").Value = -1
End If
End If
Next con
End Sub
不会引发错误,但只有在特定到达该行时,Access才会直接崩溃。
我在语法上尝试了很多变化但没有成功,我也试过循环遍历文件的其他元素(tabledefs,querydefs,recordsets等)以及看看我是否正在尝试更改错误的值,但是当我搜索具有AggregateType属性的元素时,此子表单上的控件是整个.mdb文件中的唯一内容。
我用con.Properties("AggregateType").Value = -1
切换出错误的行,我可以检查,除了-1之外什么也没有返回任何东西,手动启用某些列中的聚合,并让它返回正确的结果(0表示总和为例如),所以我认为我正在寻找合适的地方,只是错过了一些关键因素。
我一直在研究这项工作几周但没有成功。任何方式来修复我所拥有的或指向正确的方向将非常感激!
答案 0 :(得分:1)
这不一定是答案,但我没有足够的声誉 发表评论&#34; ...
我尝试过您的方案并且已验证可以更改属性值,但是我没有遍历所有控件,只是在列上使用onDoubleClick事件进行模拟。
我建议尝试使用Form_Open或Form_Current来触发你的sub,以查看在出于某种原因调用代码后属性是否重置。
<强>更新强>
您正在引用&#34;子表单&#34;主表单的对象:
Set frm = Forms!UserAPX!UserApxSub.Form!
尝试明确引用实际的UserApxSub
FORM。
像Set frm = Forms!UserApxSub!
之类的东西(假设UserApxSub是表单的名称)
然后坚持主要表单的Form_Open
:
Private Sub Form_Open(Cancel As Integer)
'// the following would set a single control only. You can add your loop through all controls
Me!{your control name}.Properties("AggregateType").Value = -1 '// set control in your main form
Form_UserApxSub!{your control name}.Properties("AggregateType").Value = -1 '// set control in your "sub" form
End Sub