我第一次使用Access和VBA工作。我有两个表(Vh
和Tr
),我有一个基于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)
答案 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的条目。由于只进行了一次编辑,您的交叉引用系统就完全被破坏了。
请考虑一下你真正想做的事情,回到这里,我们会尽力为你修好。