【问题标题】:One (probably unbound) Access 2003 form to create multiple records一个(可能未绑定)Access 2003 表单以创建多个记录
【发布时间】:2010-09-13 17:29:25
【问题描述】:

我被招募来制作用于追踪样本的表格。每个样本都与一个主题相关联;每个标本在 9 x 9 的存储盒中也有一个特定的插槽。为了便于数据输入,我认为 Access 表单最好反映盒子本身(以及将用于将数据输入 Access 的纸质表单):九列九行,每个元素基本上由一个文本组成标本 ID 框。这基本上是我想要的样子:

因此,数据输入人员基本上会输入盒子编号和样本 ID,然后单击“创建记录”以弹出所有这些记录(您可以在此处看到一些其他内容,但这并不是很重要,对吧现在)。但是,我不确定最好的编码方式。现在,我能想到的最佳过程是:1)如果框不存在,则运行插入查询以创建框,2)如果不存在,则运行插入查询以创建主题(人) , 和 3) 对每个样本运行插入查询,在其行和列中进行硬编码(例如 box_col = 'A', box_row = '1')。

注意:主题 ID 和标本 ID 都会从 ID 字段中解析出来 - 这很愚蠢,不是我的想法,但这就是它的设置方式。不过我能应付。

这当然是一个难题,但我不确定还能做什么,而且我在谷歌上搜索的大部分内容都与从单一表单创建多条记录无关。有一个更好的方法吗?我应该放弃这个想法并采用更传统的绑定子表单方法吗?

【问题讨论】:

  • 您是否考虑过使用 9 个连续的子表单,每个子表单限制为一列,每一行都是一条记录?我认为这会更容易,因为您将拥有一组要编辑的控件,并且无需代码即可创建/编辑记录。
  • 我没有考虑过 - 我一定会尝试一下。在没有代码的情况下这样做是一个非常吸引人的提议。

标签: forms ms-access ms-access-2003 data-entry


【解决方案1】:

这一切都可以在一个子表单中完成 - 但是,我假设为简单起见(点击次数更少、用户体验更轻松和直觉),您已经设计了它,以便最终用户看到他/她需要输入的所有内容。这样做没有错。输入所有数据后,只需在表单上有一个按钮即可一次执行多个插入。 从 1 开始,每次发出新的 INSERT 语句时包括 9 次迭代。

一旦语句完成,我会亲自在每一行旁边放一个小复选标记,这样如果插入成功,它将检查它是否正确,否则为错误。你可以很漂亮,使用绿色图像/红色图像。完成该过程后,应清除所有字段以允许额外输入。

我认为你所拥有的没有问题。

【讨论】:

  • 谢谢 - 听到这个也很有帮助。无论出于何种原因,我从来没有觉得我在 VB 中做的事情是正确的——它与我通常使用的太不同了。另外,感谢您提出的一些小建议——我不会想到的。
【解决方案2】:

弗里格。我刚刚失去了十分钟的打字时间。这就是为什么我不关心基于 Web 的表单。虽然公平地说,这是 StackOverflow 上第一次发生这种情况。

您以后真的需要以与输入相同的格式查看数据吗?如果他们可以只查看常规子表单,那么您就不再需要更新此表单了。

还请注意,如果我没记错的话,每个表单的控件的生命周期最大值为 768。 9 x 9 x 2 是 162,所以你会没事的。但是,如果您决定删除并重新创建大量的控制,您可能会遇到麻烦。如果您确实达到了该限制,我认为以单独的名称保存表单应该重置计数器。

请注意,您可以使用以下构造来引用控件并使生活更轻松。

Me.Controls("abc" & Row & column) 

例如在你可以使用的类型控件的更新后

call InsertRecords(3, "B")

sub InsertRecords(row as integer, Column as string)
....
cboTypeValue = Me.Controls("cboTypeID" & Row & Column) 
....

【讨论】:

  • 由于文本框/组合框上的标签,它是 9x9x4 + 9(对于行标签)+ 9(对于列标签),或总共 342 个。
  • 这正是我使用自定义集合的情况,因为它保存了对 Controls 集合的所有引用(这将比通过集合的引用要慢)。
  • 大卫,感谢您对标签的更正。我没有遵循您的自定义收藏概念。考虑发布一个带有 VBA 代码示例的帖子。
  • 我绝对不需要需要以相同的形式查看记录。那会很好,但不是必需的。还有其他绑定表单可以完成大部分工作。
  • 我已经在自定义集合上发布了无数次。最冗长的可能是 stackoverflow.com/questions/1917981/… 。我知道使用自定义集合比重复遍历表单的 Controls 集合要快得多。我并不是说“需要 5 毫秒而不是 10 毫秒”——对于实际用户来说,它明显更快。
【解决方案3】:

这可以用作某种本机访问控制的唯一网格。

如果有人发布一个示例,说明如何为每个未绑定的记录创建带有行的自定义未绑定子表单,以及一个循环并将其保存到表中的代码,那就太好了。

不会有那么多控件,也不会受到表单上字段数量的任何限制。

【讨论】:

  • 由于表单上控件数量的限制,在没有非 Access 网格控件的情况下,无法在 Access 中实际执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多