4

我正在设计一个工作表格,我需要能够为大量(会计)“结构”设置“属性”。我有一个“值”字段,用户在其中输入属性必须采用的值,然后每个结构都有 1 列,用户必须能够检查/取消选中每个结构的每个属性。此外,我需要能够向用户建议复选框值(也就是属性到结构的映射),这样他/她就不必手动单击所有需要勾选的复选框。最后,不应假定属性(行)的数量和结构(列)的数量是固定的,尽管我不希望用户能够自己修改它。我只是想要它,以便开发人员(可能是我)不会很难添加或删除结构。

现在我使用了一个本地表,其中每个结构都是一列,并且我已经硬编码了我的属性(这很好)。但是,我不确定使用本地表是否是好的设计。我们通常避免在同一个 Access DB 中使用表单和表来分隔表单和数据。另外,我想知道我是否缺少一个优雅的解决方案。将至少有 10-15 个结构和 11 个属性,这将使 110 (11*10) 个复选框需要处理,因此我无法手动操作(即创建 110 个复选框并每次检查 110 个值......)。

在这里,您可以看到表单的该部分现在的样子。

在此处输入图像描述

我知道这将是一个更啰嗦的问题,但我真的需要对此进行设计检查,所以这里有几个问题,我试图尽可能笼统和客观地提出:

  • 在 Access 中,如何创建一个控件矩阵,其中 1 列包含固定(但可由开发人员更改)数量的属性,一个可以接受文本的“值”字段,然后是 10 多列具有是/否值的列?
    • 没有本地表可以做到吗?

VBA 完全可以接受。

谢谢。

4

4 回答 4

2

在 Access 中,如何创建一个控件矩阵,其中 1 列包含固定(但可由开发人员更改)数量的属性,一个可以接受文本的“值”字段,然后是 10 多列具有是/否值的列?

我从未见过任何符合您描述的 VBA 代码。VB6 允许创建“控件数组”以对控件进行逻辑分组(并解决对表单上控件数量的一些限制),但我从未见过 VBA 提到过这一点。

没有本地表可以做到吗?

可能吗?也许,因为您可以通过代码修改表单,方法是在设计视图中打开它并使用CreateControl()添加控件。

实用吗?可能不是,因为访问帮助的“访问规范”部分提到了以下限制......

“您可以在表单或报表的生命周期内添加的控件和部分的数量:754”

..所以听起来重复修改表单的代码很可能会在一段时间后中断。

我的建议是创建一个临时表,使用它,然后丢弃它。如果您担心前端膨胀,那么您可以在临时 .accdb 文件中创建临时表,然后链接到它。

于 2013-05-21T10:28:58.193 回答
2

也许我错过了一些东西,但对我来说似乎很容易。

让每个结构都成为记录。
然后在另一个表中,使每个属性成为与结构表具有一对多关系的记录。所以,每个结构都会有很多属性。

然后是基于结构的表单和基于其属性的子表单。

可以在表结构中设置默认属性值。

当然,这些表可以从另一个数据库链接。

于 2013-05-21T16:56:19.190 回答
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”的是可编辑的查询结果集。

如果没有别的,您将需要一个表用于您的结构 -> 默认条件集,但它不必与前端位于同一个数据库中。

高温高压

于 2013-05-21T16:05:42.483 回答
1

在 Access 中,如何创建一个控件矩阵,其中 1 列包含固定(但可由开发人员更改)数量的属性,一个可以接受文本的“值”字段,然后是 10 多列具有是/否值的列?

我仍然不确定为什么要在单个列中使用多个位/布尔值,但是您也许可以利用位逻辑和长整数列。VBA 用它的常量做这样的事情。例如,在 MsgBox 中,您将 type = 设为vbCritical + vbYesNo。它的结果是一个整数值,VBA 将其解释为只有一个 Yes 和一个 No 按钮的 Critcal MsgBox。这样做的原因是因为每个常量的值是如此不同,以至于任何具有相似常量的总和都会产生一个可以反解析的唯一值。从用户的角度来看,它相当优雅,但我不想在后端进行数学运算以使这样的功能正常工作。

维护可用属性和/或属性集的单独表格并以这种方式构建/维护您的属性表可能会更好。您可以将属性集以及单个属性分配给特定控件。您还可以在任一表中指定该属性是否有默认值和/或该值是什么。

您也可能不需要那么多位。如果您可以更新您的问题,更详细地了解您的比特需求的性质,我很乐意缩小对您的情况的回答。

没有本地表可以做到吗?

您也许可以DAO.Recordset在 Access 中动态创建一个。

最好将您的属性表(见上文)调整为您的一个数据库中的永久表,而不是每次都重新填充相同的数据。

于 2013-05-21T15:13:05.540 回答