我正在设计一个工作表单,我需要能够为大量(会计)“结构”设置“属性”。我有一个“值”字段,用户输入属性必须的值,然后我为每个结构都有1列,用户必须能够检查/取消选中每个结构的每个属性。此外,我需要能够向用户建议复选框值(也就是属性到结构的映射),这样他/她就不必手动点击始终需要勾选的所有复选框。最后,不应该假设属性(行)的数量和结构(列)的数量是固定的,尽管我不希望用户能够自己修改它。我只是想要它,以便开发者(可能是我)不会很难添加或删除结构。
现在我使用了一个本地表,其中每个结构都是一列,我已经硬编码了我的属性(这很好)。但是,我不确定使用本地表是好的设计。我们通常避免在同一个Access DB中使用表单和表来分隔表单和数据。此外,我想知道是否有一个我缺少的优雅解决方案。将会有至少10-15个结构和11个属性,这将使110(11 * 10)个复选框处理,因此我不能手动执行(即创建110个复选框并每次检查110个值...)。
在这里,您可以看到表单中的那部分内容。
我知道这将是一个更加讨人喜欢的问题,但我真的需要对此进行设计检查,所以这里有一些问题我尽量做到尽可能一般和客观:
VBA完全可以接受。
感谢。
答案 0 :(得分:2)
在Access中,如何创建一个控件矩阵,其中1列包含固定(但可由dev更改)的属性数,一个“值”字段可以获取文本,然后10个列包含是/没有价值?
我从未见过任何VBA代码可以执行您所描述的内容。 VB6允许创建“控制数组”以逻辑分组控件(并解决对表单上控件数量的一些限制),但我从来没有见过VBA所提到的那些。
没有本地表可以做到吗?
可能吗?也许,因为您可以通过在设计视图中打开表单并使用CreateControl()
添加控件来修改表单。
实用?可能不是,因为Access帮助的“访问规范”部分提到了以下限制......
“您可以在表单或报告的生命周期内添加的控件和部分的数量:754”
..所以听起来反复修改表单的代码可能会在一段时间后很好地破解。
我的建议是创建一个临时表,使用它,然后丢弃它。如果您担心前端膨胀,那么您可以在临时的.accdb文件中创建临时表,然后链接到它。
答案 1 :(得分:2)
也许我错过了什么,但对我来说似乎很容易。
使每个结构成为记录 然后在另一个表中,使每个属性成为与结构表具有1-many关系的记录。因此,每个结构都有许多属性。
然后是一个基于结构的表单,其子表单基于它的属性。
可以在表结构中设置默认属性值。
当然,这些表可以从另一个数据库链接。
答案 2 :(得分:1)
在Access中,如何创建一个控件矩阵,其中1列包含固定(但可由dev更改)的属性数,一个“值”字段可以获取文本,然后10个列包含是/没有价值?
我仍然不确定为什么你想在一个列中有多个位/布尔值,但你可能能够利用位逻辑和长整数列。 VBA用它的常量做这样的事情。例如,在MsgBox中,您将类型设为= vbCritical + vbYesNo
。它的结果是一个整数值,VBA解释它只使用Yes和No按钮创建一个Critcal MsgBox。这样做的原因是因为每个常量的值是如此明显,以至于任何与类似常量的求和都会产生一个可以解析的唯一值。从用户的角度来看,它相当优雅,但我讨厌在后端进行数学计算以使这样的功能起作用。
最好维护一个单独的可用属性和/或属性集表,并以这种方式构建/维护属性表。您可以将属性集以及各个属性分配给特定控件。您还可以在任一表中指定该属性是否存在默认值和/或该值是什么。
您可能也不需要那么多位。如果您能够更详细地了解您的需求性质,我会很乐意缩小您对您情况的回答。
没有本地表可以做到吗?
您可以在Access中动态创建DAO.Recordset
。
最好将属性表(见上文)调整为您的某个数据库中的永久表,而不是每次都重新填充相同的数据。
答案 3 :(得分:1)
你可以采用更多的主/细节方法,将你的位字段组合成一个描述被检查框的字符串描述。
例如,如果你有一个名为'structure1',值为100和5个条件位的结构,你可以有一个字符串列,其中包含文本'cond1,cond2,cond7,cond8,cond9',然后是另一个允许它们的按钮修改该单一结构的条件集。
无论如何,你的复选框会更少。
我能想到的唯一与“a matrix of controls where 1 column contains a fixed (but changeable by a dev) number of properties
”相同的是可编辑的查询结果集。
您需要一张适合您结构的表格 - >默认条件设置,如果没有别的,但它不必与前端在同一个数据库中。
HTH