从访问表单更新第二个表



我是第一次使用Access和VBA。我有两个表(VhTr(,我有一个基于Tr表的表格。

Tr表中有一个Vh_Id字段(对于Vh表,反之亦然(,我正在尝试更新。在Edit Tr窗体上,我有一个下拉列表,其中包含Vh表中的所有 ID,并且更改此下拉列表后,我有一些 SQL 设置要运行。我得到的对话框告诉我 1 行将受到影响,尽管说是,但我从未看到Vh表中所做的更改。

如何获取以下代码以实际更新Vh表中的所选记录,以使用当前记录更新其Tr_Id字段?

Dim command As String
command = "UPDATE Vh SET Tr_Id = " + Me.Tr_Id + " WHERE PK = " + Str(Me.Vh_Id)
DoCmd.RunSQL (command)

试试这个:

Dim command As String
command = "UPDATE Vh SET Tr_Id = " & Me.Tr_Id & " WHERE Vh_Id = " & Me.Vh_Id
DoCmd.RunSQL (command)

编辑:看起来Str()函数是罪魁祸首,所以最好不要在你的 where 子句中使用它。 根据Str()文档,"当数字转换为字符串时,始终为数字符号保留前导空格"。

在尝试解决此问题之前,我认为您首先需要停下来认真考虑您的表关系。 在我看来,您试图通过 Vh 和 Tr 之间的交叉引用 ID 来实现的是某种一对一的关系。 也就是说,Vh 中的每个记录在 Tr 中只能有一个等价项,反之亦然。 这是完全可以接受的,但是你对代码的尝试会直接导致你遇到问题。 你想允许,我所说的孤儿吗? 也就是说,Vh 中的某些记录是否有可能在 Tr 中没有等价物,反之亦然?

为了说明我的观点,假设每个记录中有五条记录。 PK 1 到 5 和交叉引用 ID 1 到 5 在两者中。 现在假设您在 Tr 上有"编辑"窗体,并且想要将 Tr 中第一条记录的Vh_Id更改为 5(Vh 中的最后一条记录(。 在 Tr 中进行更改后,现在 Tr 中有两条记录(PK 1 和 5(指向 Vh (PK 5( 中的相同记录。 如果您现在更新(如您所建议的那样(Vh,使PK 5具有Tr_ID 1,那么您将面临以下问题。 Tr 中的两条记录指向 Vh 中的同一记录 (PK 5(,但 Vh PK 5 仅指向其中一条记录 (Tr PK 1(。 Vh PK 1 仍然指向TR_ID 1,但 Tr PK 1 指向Vh_ID 5。 Tr中没有指向Vh PK 1的条目。 即您的交叉引用系统仅由于一次编辑而完全损坏。

请考虑一下您真正想做的事情,回到这里,我们会尽力为您修复它。

最新更新