【问题标题】:Linking one form to multiple tables, and saving data on click将一个表单链接到多个表,并在单击时保存数据
【发布时间】:2020-07-11 17:59:45
【问题描述】:

所以我有一个表单,我希望用户使用它来更新多个表。我不希望将表单绑定到表格,因为我宁愿使用 VBA 来执行此操作(我想,我不知道)。

所以这里有一个小表格示例

用户表

UserID
First
Middle
Last
Division
Title

装备表

EquipID
AssignedLaptop
Model
Barcode

软表

SoftID
SoftwareName
License#
Custom (running sum to calculate how many licenses are left....another question)

交换表

UserID
SoftID
EquipID

这就是我设置表格的方式。所有这些文本/cmb 框都存在于一个表格中,我希望能够通过单击按钮将这个表格中的这些数据保存到所有相关表格中。

那么任何人都可以帮助我解决以下问题:

如果我在单击“创建新”按钮后填充了这个未绑定的表单,那么我如何告诉隐藏的文本框(理想情况下包含“”ID 号)来填充新的 ID 号(自动编号),例如每个表,在其中,以便我可以分配一个 UPDATE SQL 语句到单击 SAVE 按钮,在 VB 中保存数据?

我可以设置它以便我只是“交换表”(不知道我为什么这么命名它)填充其他表的 ID 号,而不是反之亦然?

我是不是走错路了

编辑:

我只是想给你一个例子,看看我试图做的事情是否可以在一个表单上使用多个表(最终是多个键),如果可以,它与使用一个表单/表有什么不同: 我经常使用未绑定的方法,因为我必须构建表单,并且需要在 VBA 中不断地将参数从一个表单传递到下一个表单。我认为自己编写代码更快?所以对于这个概念,我总是在表单上有一个隐藏的文本框,它通常有相关表的 ID 号。所以点击保存只需要一个简单的SQL = * WHERE Tbl_ID = frmID 有点想法。

我只想知道这些问题吗?

当您运行 INSERT 时,ID 号是否需要出现在 STATEMENT 中,或者在您执行时只需为您分配下一个相关的 ID 号?

如果没有 考虑到上面的方法,我如何通过代码自己确定这个数字(我需要使用的ID)?

另一个问题?您如何在绑定表单上通过记录功能击败鼠标滚轮滚动?

【问题讨论】:

  • 您为什么不想使用绑定表单?您可能可以在编写所有这些代码所需时间的 1/10 内构建表单。
  • 我认为这根本不是一个好问题。所问的内容与 Access 所涉及的一切都是对立的。如果表具有几乎相同的结构(此时您可能会考虑是否存在架构设计错误,并且来自这些近乎相同的表的数据应该都在同一个表中),那将是不同的。你所描述的看起来你应该只使用带有一些组合框和子表单的绑定父表单。但是您没有对您要尝试做的事情给出足够的解释,以使正确的答案成为可能。
  • 在 Access 中绑定编辑表单从未如此简单,除非您需要对保存进行过度控制。我使用大量未绑定的表单来开始新记录,只收集必填字段,插入树桩记录,然后在绑定的完整数据编辑表单中为用户打开它。也许这种方法会有所帮助。但是你没有解释数据表之间的关系(它不是不言自明的),所以很难说如何去做。但是如果你要使用 Access,你确​​实需要学习使用绑定表单。

标签: vba forms ms-access


【解决方案1】:

我明白你在说什么,这方面的措辞很奇怪,但我确实知道你在做什么。

这就是你所拥有的:

  • 您有一个未绑定的表单,未链接到任何表格
  • 您将通过添加一些文本框以及组合框和按钮来设计此未绑定的表单,它不会以任何方式链接到任何表格
  • 在这些文本框中,您有一些文本框将存储行的 ID(键值)。这样当您进行保存时,ID 号就会被设置回文本框
  • 将 ID 号设置为此隐藏字段后,您就可以对需要此 ID 号的所有表进行更新

听起来对吗?如果是这样,那就很简单了。您所要做的就是单击“创建按钮”执行插入,效果如下:

 ' Command to Insert Records.
      Dim cmdInsert As New OleDbCommand()
      cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
      cmdInsert.Connection = cnJetDB
      cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
      oleDa.InsertCommand = cmdInsert

然后你发出另一个命令来取回 IDENTITY,即你的 ID:

  ' Create another command to get IDENTITY value.
  cmdGetIdentity = New OleDbCommand()
  cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
  cmdGetIdentity.Connection = cnJetDB

您始终可以使用 SELECT @@IDENTITY 获得身份

因此,在您后面的代码中,将文本框设置为 SELECT @@IDENTITY 的值。 我已经超过 5 年没有访问过,但我记得做过类似的事情。一旦你有了这个身份,你就把它放在你的隐藏文本框中。这将帮助您执行使用此身份的更新。

这是一个很好的起点:http://support.microsoft.com/kb/815629 这是另一篇可能对您有所帮助的好文章:http://support.microsoft.com/kb/815629

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2013-01-26
    • 2012-03-27
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多