从Access窗体更新第二个表

时间:2017-08-02 03:49:40

标签: sql vba ms-access access-vba ms-access-2016

我第一次使用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)

2 个答案:

答案 0 :(得分:0)

试试这个:

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

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

答案 1 :(得分:0)

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

为了说明我的观点,假设每个记录中有五个记录。 PKs 1到5和交叉引用ID 1到5。现在假设您在Tr上有您的编辑表单,并且您想要将Tr中第一个记录的Vh_Id更改为5(Vh中的最后一个记录)。在Tr中进行了更改后,Tr(PKs 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的条目。由于只进行了一次编辑,您的交叉引用系统就完全被破坏了。

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